| 1 | /* |
| 2 | * QDict Module |
| 3 | * |
| 4 | * Copyright (C) 2009 Red Hat Inc. |
| 5 | * |
| 6 | * Authors: |
| 7 | * Luiz Capitulino <lcapitulino@redhat.com> |
| 8 | * |
| 9 | * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
| 10 | * See the COPYING.LIB file in the top-level directory. |
| 11 | */ |
| 12 | |
| 13 | #ifndef QDICT_H |
| 14 | #define QDICT_H |
| 15 | |
| 16 | #include "qobject/qobject.h" |
| 17 | #include "qemu/queue.h" |
| 18 | |
| 19 | #define QDICT_BUCKET_MAX 512 |
| 20 | |
| 21 | typedef struct QDictEntry { |
| 22 | char *key; |
| 23 | QObject *value; |
| 24 | QLIST_ENTRY(QDictEntry) next; |
| 25 | } QDictEntry; |
| 26 | |
| 27 | struct QDict { |
| 28 | struct QObjectBase_ base; |
| 29 | size_t size; |
| 30 | QLIST_HEAD(,QDictEntry) table[QDICT_BUCKET_MAX]; |
| 31 | }; |
| 32 | |
| 33 | void qdict_unref(QDict *q); |
| 34 | |
| 35 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(QDict, qdict_unref) |
| 36 | |
| 37 | /* Object API */ |
| 38 | QDict *qdict_new(void); |
| 39 | const char *qdict_entry_key(const QDictEntry *entry); |
| 40 | QObject *qdict_entry_value(const QDictEntry *entry); |
| 41 | size_t qdict_size(const QDict *qdict); |
| 42 | void qdict_put_obj(QDict *qdict, const char *key, QObject *value); |
| 43 | void qdict_del(QDict *qdict, const char *key); |
| 44 | int qdict_haskey(const QDict *qdict, const char *key); |
| 45 | QObject *qdict_get(const QDict *qdict, const char *key); |
| 46 | const QDictEntry *qdict_first(const QDict *qdict); |
| 47 | const QDictEntry *qdict_next(const QDict *qdict, const QDictEntry *entry); |
| 48 | |
| 49 | /* Helper to qdict_put_obj(), accepts any object */ |
| 50 | #define qdict_put(qdict, key, obj) \ |
| 51 | qdict_put_obj(qdict, key, QOBJECT(obj)) |
| 52 | |
| 53 | void qdict_put_bool(QDict *qdict, const char *key, bool value); |
| 54 | void qdict_put_int(QDict *qdict, const char *key, int64_t value); |
| 55 | void qdict_put_null(QDict *qdict, const char *key); |
| 56 | void qdict_put_str(QDict *qdict, const char *key, const char *value); |
| 57 | |
| 58 | double qdict_get_double(const QDict *qdict, const char *key); |
| 59 | int64_t qdict_get_int(const QDict *qdict, const char *key); |
| 60 | uint64_t qdict_get_uint(const QDict *qdict, const char *key); |
| 61 | bool qdict_get_bool(const QDict *qdict, const char *key); |
| 62 | QList *qdict_get_qlist(const QDict *qdict, const char *key); |
| 63 | QDict *qdict_get_qdict(const QDict *qdict, const char *key); |
| 64 | const char *qdict_get_str(const QDict *qdict, const char *key); |
| 65 | int64_t qdict_get_try_int(const QDict *qdict, const char *key, |
| 66 | int64_t def_value); |
| 67 | bool qdict_get_try_bool(const QDict *qdict, const char *key, bool def_value); |
| 68 | const char *qdict_get_try_str(const QDict *qdict, const char *key); |
| 69 | |
| 70 | QDict *qdict_clone_shallow(const QDict *src); |
| 71 | |
| 72 | #endif /* QDICT_H */ |