Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 1 | #ifndef QDICT_H |
| 2 | #define QDICT_H |
| 3 | |
| 4 | #include "qobject.h" |
Luiz Capitulino | f2e1750 | 2009-12-10 17:15:54 -0200 | [diff] [blame] | 5 | #include "qlist.h" |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 6 | #include "qemu-queue.h" |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 7 | #include <stdint.h> |
| 8 | |
| 9 | #define QDICT_HASH_SIZE 512 |
| 10 | |
| 11 | typedef struct QDictEntry { |
| 12 | char *key; |
| 13 | QObject *value; |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 14 | QLIST_ENTRY(QDictEntry) next; |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 15 | } QDictEntry; |
| 16 | |
| 17 | typedef struct QDict { |
| 18 | QObject_HEAD; |
| 19 | size_t size; |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 20 | QLIST_HEAD(,QDictEntry) table[QDICT_HASH_SIZE]; |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 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); |
Luiz Capitulino | 21f800d | 2009-10-13 13:56:58 -0300 | [diff] [blame] | 31 | void qdict_iter(const QDict *qdict, |
| 32 | void (*iter)(const char *key, QObject *obj, void *opaque), |
| 33 | void *opaque); |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 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 | int64_t qdict_get_int(const QDict *qdict, const char *key); |
Luiz Capitulino | cd4dde3 | 2009-12-10 17:15:53 -0200 | [diff] [blame] | 41 | int qdict_get_bool(const QDict *qdict, const char *key); |
Luiz Capitulino | f2e1750 | 2009-12-10 17:15:54 -0200 | [diff] [blame] | 42 | QList *qdict_get_qlist(const QDict *qdict, const char *key); |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 43 | const char *qdict_get_str(const QDict *qdict, const char *key); |
| 44 | int64_t qdict_get_try_int(const QDict *qdict, const char *key, |
| 45 | int64_t err_value); |
| 46 | const char *qdict_get_try_str(const QDict *qdict, const char *key); |
| 47 | |
| 48 | #endif /* QDICT_H */ |