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" |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 5 | #include "qemu-queue.h" |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 6 | #include <stdint.h> |
| 7 | |
| 8 | #define QDICT_HASH_SIZE 512 |
| 9 | |
| 10 | typedef struct QDictEntry { |
| 11 | char *key; |
| 12 | QObject *value; |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 13 | QLIST_ENTRY(QDictEntry) next; |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 14 | } QDictEntry; |
| 15 | |
| 16 | typedef struct QDict { |
| 17 | QObject_HEAD; |
| 18 | size_t size; |
Blue Swirl | 72cf2d4 | 2009-09-12 07:36:22 +0000 | [diff] [blame] | 19 | QLIST_HEAD(,QDictEntry) table[QDICT_HASH_SIZE]; |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 20 | } QDict; |
| 21 | |
| 22 | /* Object API */ |
| 23 | QDict *qdict_new(void); |
| 24 | size_t qdict_size(const QDict *qdict); |
| 25 | void qdict_put_obj(QDict *qdict, const char *key, QObject *value); |
| 26 | void qdict_del(QDict *qdict, const char *key); |
| 27 | int qdict_haskey(const QDict *qdict, const char *key); |
| 28 | QObject *qdict_get(const QDict *qdict, const char *key); |
| 29 | QDict *qobject_to_qdict(const QObject *obj); |
Luiz Capitulino | 21f800d | 2009-10-13 13:56:58 -0300 | [diff] [blame] | 30 | void qdict_iter(const QDict *qdict, |
| 31 | void (*iter)(const char *key, QObject *obj, void *opaque), |
| 32 | void *opaque); |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 33 | |
| 34 | /* Helper to qdict_put_obj(), accepts any object */ |
| 35 | #define qdict_put(qdict, key, obj) \ |
| 36 | qdict_put_obj(qdict, key, QOBJECT(obj)) |
| 37 | |
| 38 | /* High level helpers */ |
| 39 | int64_t qdict_get_int(const QDict *qdict, const char *key); |
Luiz Capitulino | cd4dde3 | 2009-12-10 17:15:53 -0200 | [diff] [blame^] | 40 | int qdict_get_bool(const QDict *qdict, const char *key); |
Luiz Capitulino | fb08dde | 2009-08-28 15:27:07 -0300 | [diff] [blame] | 41 | const char *qdict_get_str(const QDict *qdict, const char *key); |
| 42 | int64_t qdict_get_try_int(const QDict *qdict, const char *key, |
| 43 | int64_t err_value); |
| 44 | const char *qdict_get_try_str(const QDict *qdict, const char *key); |
| 45 | |
| 46 | #endif /* QDICT_H */ |