17b1b5d19SPaolo Bonzini /* 27b1b5d19SPaolo Bonzini * QDict Module 37b1b5d19SPaolo Bonzini * 47b1b5d19SPaolo Bonzini * Copyright (C) 2009 Red Hat Inc. 57b1b5d19SPaolo Bonzini * 67b1b5d19SPaolo Bonzini * Authors: 77b1b5d19SPaolo Bonzini * Luiz Capitulino <lcapitulino@redhat.com> 87b1b5d19SPaolo Bonzini * 97b1b5d19SPaolo Bonzini * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 107b1b5d19SPaolo Bonzini * See the COPYING.LIB file in the top-level directory. 117b1b5d19SPaolo Bonzini */ 127b1b5d19SPaolo Bonzini 137b1b5d19SPaolo Bonzini #ifndef QDICT_H 147b1b5d19SPaolo Bonzini #define QDICT_H 157b1b5d19SPaolo Bonzini 167b1b5d19SPaolo Bonzini #include "qapi/qmp/qobject.h" 171de7afc9SPaolo Bonzini #include "qemu/queue.h" 187b1b5d19SPaolo Bonzini 197b1b5d19SPaolo Bonzini #define QDICT_BUCKET_MAX 512 207b1b5d19SPaolo Bonzini 217b1b5d19SPaolo Bonzini typedef struct QDictEntry { 227b1b5d19SPaolo Bonzini char *key; 237b1b5d19SPaolo Bonzini QObject *value; 247b1b5d19SPaolo Bonzini QLIST_ENTRY(QDictEntry) next; 257b1b5d19SPaolo Bonzini } QDictEntry; 267b1b5d19SPaolo Bonzini 279f5c734dSMarkus Armbruster struct QDict { 283d3eacaeSMarc-André Lureau struct QObjectBase_ base; 297b1b5d19SPaolo Bonzini size_t size; 307b1b5d19SPaolo Bonzini QLIST_HEAD(,QDictEntry) table[QDICT_BUCKET_MAX]; 319f5c734dSMarkus Armbruster }; 327b1b5d19SPaolo Bonzini 33*d709bbf3SMarc-André Lureau void qdict_unref(QDict *q); 34*d709bbf3SMarc-André Lureau 35*d709bbf3SMarc-André Lureau G_DEFINE_AUTOPTR_CLEANUP_FUNC(QDict, qdict_unref) 36*d709bbf3SMarc-André Lureau 377b1b5d19SPaolo Bonzini /* Object API */ 387b1b5d19SPaolo Bonzini QDict *qdict_new(void); 397b1b5d19SPaolo Bonzini const char *qdict_entry_key(const QDictEntry *entry); 407b1b5d19SPaolo Bonzini QObject *qdict_entry_value(const QDictEntry *entry); 417b1b5d19SPaolo Bonzini size_t qdict_size(const QDict *qdict); 427b1b5d19SPaolo Bonzini void qdict_put_obj(QDict *qdict, const char *key, QObject *value); 437b1b5d19SPaolo Bonzini void qdict_del(QDict *qdict, const char *key); 447b1b5d19SPaolo Bonzini int qdict_haskey(const QDict *qdict, const char *key); 457b1b5d19SPaolo Bonzini QObject *qdict_get(const QDict *qdict, const char *key); 467b1b5d19SPaolo Bonzini const QDictEntry *qdict_first(const QDict *qdict); 477b1b5d19SPaolo Bonzini const QDictEntry *qdict_next(const QDict *qdict, const QDictEntry *entry); 487b1b5d19SPaolo Bonzini 497b1b5d19SPaolo Bonzini /* Helper to qdict_put_obj(), accepts any object */ 507b1b5d19SPaolo Bonzini #define qdict_put(qdict, key, obj) \ 517b1b5d19SPaolo Bonzini qdict_put_obj(qdict, key, QOBJECT(obj)) 527b1b5d19SPaolo Bonzini 5315280c36SMarkus Armbruster void qdict_put_bool(QDict *qdict, const char *key, bool value); 5415280c36SMarkus Armbruster void qdict_put_int(QDict *qdict, const char *key, int64_t value); 5515280c36SMarkus Armbruster void qdict_put_null(QDict *qdict, const char *key); 5615280c36SMarkus Armbruster void qdict_put_str(QDict *qdict, const char *key, const char *value); 57a92c2159SEric Blake 587b1b5d19SPaolo Bonzini double qdict_get_double(const QDict *qdict, const char *key); 597b1b5d19SPaolo Bonzini int64_t qdict_get_int(const QDict *qdict, const char *key); 6034acbc95SEric Blake bool qdict_get_bool(const QDict *qdict, const char *key); 617b1b5d19SPaolo Bonzini QList *qdict_get_qlist(const QDict *qdict, const char *key); 627b1b5d19SPaolo Bonzini QDict *qdict_get_qdict(const QDict *qdict, const char *key); 637b1b5d19SPaolo Bonzini const char *qdict_get_str(const QDict *qdict, const char *key); 647b1b5d19SPaolo Bonzini int64_t qdict_get_try_int(const QDict *qdict, const char *key, 657b1b5d19SPaolo Bonzini int64_t def_value); 6634acbc95SEric Blake bool qdict_get_try_bool(const QDict *qdict, const char *key, bool def_value); 677b1b5d19SPaolo Bonzini const char *qdict_get_try_str(const QDict *qdict, const char *key); 687b1b5d19SPaolo Bonzini 69b382bc9aSKevin Wolf QDict *qdict_clone_shallow(const QDict *src); 70bcebf102SKevin Wolf 717b1b5d19SPaolo Bonzini #endif /* QDICT_H */ 72