1 #ifndef QDICT_H 2 #define QDICT_H 3 4 #include "qobject.h" 5 #include "qlist.h" 6 #include "qemu-queue.h" 7 #include <stdint.h> 8 9 #define QDICT_HASH_SIZE 512 10 11 typedef struct QDictEntry { 12 char *key; 13 QObject *value; 14 QLIST_ENTRY(QDictEntry) next; 15 } QDictEntry; 16 17 typedef struct QDict { 18 QObject_HEAD; 19 size_t size; 20 QLIST_HEAD(,QDictEntry) table[QDICT_HASH_SIZE]; 21 } QDict; 22 23 /* Object API */ 24 QDict *qdict_new(void); 25 size_t qdict_size(const QDict *qdict); 26 void qdict_put_obj(QDict *qdict, const char *key, QObject *value); 27 void qdict_del(QDict *qdict, const char *key); 28 int qdict_haskey(const QDict *qdict, const char *key); 29 QObject *qdict_get(const QDict *qdict, const char *key); 30 QDict *qobject_to_qdict(const QObject *obj); 31 void qdict_iter(const QDict *qdict, 32 void (*iter)(const char *key, QObject *obj, void *opaque), 33 void *opaque); 34 35 /* Helper to qdict_put_obj(), accepts any object */ 36 #define qdict_put(qdict, key, obj) \ 37 qdict_put_obj(qdict, key, QOBJECT(obj)) 38 39 /* High level helpers */ 40 double qdict_get_double(const QDict *qdict, const char *key); 41 int64_t qdict_get_int(const QDict *qdict, const char *key); 42 int qdict_get_bool(const QDict *qdict, const char *key); 43 QList *qdict_get_qlist(const QDict *qdict, const char *key); 44 QDict *qdict_get_qdict(const QDict *qdict, const char *key); 45 const char *qdict_get_str(const QDict *qdict, const char *key); 46 int64_t qdict_get_try_int(const QDict *qdict, const char *key, 47 int64_t err_value); 48 const char *qdict_get_try_str(const QDict *qdict, const char *key); 49 50 #endif /* QDICT_H */ 51