141836a9fSLuiz Capitulino /* 241836a9fSLuiz Capitulino * QDict Module 341836a9fSLuiz Capitulino * 441836a9fSLuiz Capitulino * Copyright (C) 2009 Red Hat Inc. 541836a9fSLuiz Capitulino * 641836a9fSLuiz Capitulino * Authors: 741836a9fSLuiz Capitulino * Luiz Capitulino <lcapitulino@redhat.com> 841836a9fSLuiz Capitulino * 941836a9fSLuiz Capitulino * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 1041836a9fSLuiz Capitulino * See the COPYING.LIB file in the top-level directory. 1141836a9fSLuiz Capitulino */ 1241836a9fSLuiz Capitulino 13fb08dde0SLuiz Capitulino #ifndef QDICT_H 14fb08dde0SLuiz Capitulino #define QDICT_H 15fb08dde0SLuiz Capitulino 16*407bc4bfSDaniel P. Berrangé #include "qobject/qobject.h" 171de7afc9SPaolo Bonzini #include "qemu/queue.h" 18fb08dde0SLuiz Capitulino 19c8bc3cd7SLuiz Capitulino #define QDICT_BUCKET_MAX 512 20fb08dde0SLuiz Capitulino 21fb08dde0SLuiz Capitulino typedef struct QDictEntry { 22fb08dde0SLuiz Capitulino char *key; 23fb08dde0SLuiz Capitulino QObject *value; 2472cf2d4fSBlue Swirl QLIST_ENTRY(QDictEntry) next; 25fb08dde0SLuiz Capitulino } QDictEntry; 26fb08dde0SLuiz Capitulino 279f5c734dSMarkus Armbruster struct QDict { 283d3eacaeSMarc-André Lureau struct QObjectBase_ base; 29fb08dde0SLuiz Capitulino size_t size; 30c8bc3cd7SLuiz Capitulino QLIST_HEAD(,QDictEntry) table[QDICT_BUCKET_MAX]; 319f5c734dSMarkus Armbruster }; 32fb08dde0SLuiz Capitulino 33d709bbf3SMarc-André Lureau void qdict_unref(QDict *q); 34d709bbf3SMarc-André Lureau 35d709bbf3SMarc-André Lureau G_DEFINE_AUTOPTR_CLEANUP_FUNC(QDict, qdict_unref) 36d709bbf3SMarc-André Lureau 37fb08dde0SLuiz Capitulino /* Object API */ 38fb08dde0SLuiz Capitulino QDict *qdict_new(void); 390d078b2aSLuiz Capitulino const char *qdict_entry_key(const QDictEntry *entry); 400d078b2aSLuiz Capitulino QObject *qdict_entry_value(const QDictEntry *entry); 41fb08dde0SLuiz Capitulino size_t qdict_size(const QDict *qdict); 42fb08dde0SLuiz Capitulino void qdict_put_obj(QDict *qdict, const char *key, QObject *value); 43fb08dde0SLuiz Capitulino void qdict_del(QDict *qdict, const char *key); 44fb08dde0SLuiz Capitulino int qdict_haskey(const QDict *qdict, const char *key); 45fb08dde0SLuiz Capitulino QObject *qdict_get(const QDict *qdict, const char *key); 46f2b07f35SLuiz Capitulino const QDictEntry *qdict_first(const QDict *qdict); 47f2b07f35SLuiz Capitulino const QDictEntry *qdict_next(const QDict *qdict, const QDictEntry *entry); 48fb08dde0SLuiz Capitulino 49fb08dde0SLuiz Capitulino /* Helper to qdict_put_obj(), accepts any object */ 50fb08dde0SLuiz Capitulino #define qdict_put(qdict, key, obj) \ 51fb08dde0SLuiz Capitulino qdict_put_obj(qdict, key, QOBJECT(obj)) 52fb08dde0SLuiz Capitulino 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 58acc3b033SMarkus Armbruster double qdict_get_double(const QDict *qdict, const char *key); 59fb08dde0SLuiz Capitulino int64_t qdict_get_int(const QDict *qdict, const char *key); 6034acbc95SEric Blake bool qdict_get_bool(const QDict *qdict, const char *key); 61f2e17508SLuiz Capitulino QList *qdict_get_qlist(const QDict *qdict, const char *key); 62df10ce6aSLuiz Capitulino QDict *qdict_get_qdict(const QDict *qdict, const char *key); 63fb08dde0SLuiz Capitulino const char *qdict_get_str(const QDict *qdict, const char *key); 64fb08dde0SLuiz Capitulino int64_t qdict_get_try_int(const QDict *qdict, const char *key, 6583aba69eSLuiz Capitulino int64_t def_value); 6634acbc95SEric Blake bool qdict_get_try_bool(const QDict *qdict, const char *key, bool def_value); 67fb08dde0SLuiz Capitulino const char *qdict_get_try_str(const QDict *qdict, const char *key); 68fb08dde0SLuiz Capitulino 69b382bc9aSKevin Wolf QDict *qdict_clone_shallow(const QDict *src); 70bcebf102SKevin Wolf 71fb08dde0SLuiz Capitulino #endif /* QDICT_H */ 72