]>
Commit | Line | Data |
---|---|---|
41836a9f LC |
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 | ||
fb08dde0 LC |
13 | #ifndef QDICT_H |
14 | #define QDICT_H | |
15 | ||
7b1b5d19 PB |
16 | #include "qapi/qmp/qobject.h" |
17 | #include "qapi/qmp/qlist.h" | |
1de7afc9 | 18 | #include "qemu/queue.h" |
fb08dde0 | 19 | |
c8bc3cd7 | 20 | #define QDICT_BUCKET_MAX 512 |
fb08dde0 LC |
21 | |
22 | typedef struct QDictEntry { | |
23 | char *key; | |
24 | QObject *value; | |
72cf2d4f | 25 | QLIST_ENTRY(QDictEntry) next; |
fb08dde0 LC |
26 | } QDictEntry; |
27 | ||
28 | typedef struct QDict { | |
c7c46212 | 29 | QObject base; |
fb08dde0 | 30 | size_t size; |
c8bc3cd7 | 31 | QLIST_HEAD(,QDictEntry) table[QDICT_BUCKET_MAX]; |
fb08dde0 LC |
32 | } QDict; |
33 | ||
34 | /* Object API */ | |
35 | QDict *qdict_new(void); | |
0d078b2a LC |
36 | const char *qdict_entry_key(const QDictEntry *entry); |
37 | QObject *qdict_entry_value(const QDictEntry *entry); | |
fb08dde0 LC |
38 | size_t qdict_size(const QDict *qdict); |
39 | void qdict_put_obj(QDict *qdict, const char *key, QObject *value); | |
40 | void qdict_del(QDict *qdict, const char *key); | |
41 | int qdict_haskey(const QDict *qdict, const char *key); | |
42 | QObject *qdict_get(const QDict *qdict, const char *key); | |
43 | QDict *qobject_to_qdict(const QObject *obj); | |
21f800d3 LC |
44 | void qdict_iter(const QDict *qdict, |
45 | void (*iter)(const char *key, QObject *obj, void *opaque), | |
46 | void *opaque); | |
f2b07f35 LC |
47 | const QDictEntry *qdict_first(const QDict *qdict); |
48 | const QDictEntry *qdict_next(const QDict *qdict, const QDictEntry *entry); | |
55e1819c | 49 | void qdict_destroy_obj(QObject *obj); |
fb08dde0 LC |
50 | |
51 | /* Helper to qdict_put_obj(), accepts any object */ | |
52 | #define qdict_put(qdict, key, obj) \ | |
53 | qdict_put_obj(qdict, key, QOBJECT(obj)) | |
54 | ||
55 | /* High level helpers */ | |
acc3b033 | 56 | double qdict_get_double(const QDict *qdict, const char *key); |
fb08dde0 | 57 | int64_t qdict_get_int(const QDict *qdict, const char *key); |
34acbc95 | 58 | bool qdict_get_bool(const QDict *qdict, const char *key); |
f2e17508 | 59 | QList *qdict_get_qlist(const QDict *qdict, const char *key); |
df10ce6a | 60 | QDict *qdict_get_qdict(const QDict *qdict, const char *key); |
fb08dde0 LC |
61 | const char *qdict_get_str(const QDict *qdict, const char *key); |
62 | int64_t qdict_get_try_int(const QDict *qdict, const char *key, | |
83aba69e | 63 | int64_t def_value); |
34acbc95 | 64 | bool qdict_get_try_bool(const QDict *qdict, const char *key, bool def_value); |
fb08dde0 LC |
65 | const char *qdict_get_try_str(const QDict *qdict, const char *key); |
66 | ||
7990d2c9 KW |
67 | void qdict_copy_default(QDict *dst, QDict *src, const char *key); |
68 | void qdict_set_default_str(QDict *dst, const char *key, const char *val); | |
69 | ||
b382bc9a | 70 | QDict *qdict_clone_shallow(const QDict *src); |
f660dc6a | 71 | void qdict_flatten(QDict *qdict); |
b382bc9a | 72 | |
5726d872 | 73 | void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start); |
05a8c222 | 74 | void qdict_array_split(QDict *src, QList **dst); |
bd50530a | 75 | int qdict_array_entries(QDict *src, const char *subqdict); |
603476c2 | 76 | QObject *qdict_crumple(const QDict *src, Error **errp); |
5726d872 | 77 | |
9c526812 HR |
78 | void qdict_join(QDict *dest, QDict *src, bool overwrite); |
79 | ||
fb08dde0 | 80 | #endif /* QDICT_H */ |