1*407bc4bfSDaniel P. Berrangé /* 2*407bc4bfSDaniel P. Berrangé * Copyright IBM, Corp. 2009 3*407bc4bfSDaniel P. Berrangé * Copyright (c) 2013, 2015, 2017 Red Hat Inc. 4*407bc4bfSDaniel P. Berrangé * 5*407bc4bfSDaniel P. Berrangé * Authors: 6*407bc4bfSDaniel P. Berrangé * Anthony Liguori <aliguori@us.ibm.com> 7*407bc4bfSDaniel P. Berrangé * Markus Armbruster <armbru@redhat.com> 8*407bc4bfSDaniel P. Berrangé * Marc-André Lureau <marcandre.lureau@redhat.com> 9*407bc4bfSDaniel P. Berrangé * 10*407bc4bfSDaniel P. Berrangé * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 11*407bc4bfSDaniel P. Berrangé * See the COPYING.LIB file in the top-level directory. 12*407bc4bfSDaniel P. Berrangé * 13*407bc4bfSDaniel P. Berrangé */ 14*407bc4bfSDaniel P. Berrangé #ifndef QLIT_H 15*407bc4bfSDaniel P. Berrangé #define QLIT_H 16*407bc4bfSDaniel P. Berrangé 17*407bc4bfSDaniel P. Berrangé #include "qobject.h" 18*407bc4bfSDaniel P. Berrangé 19*407bc4bfSDaniel P. Berrangé typedef struct QLitDictEntry QLitDictEntry; 20*407bc4bfSDaniel P. Berrangé typedef struct QLitObject QLitObject; 21*407bc4bfSDaniel P. Berrangé 22*407bc4bfSDaniel P. Berrangé struct QLitObject { 23*407bc4bfSDaniel P. Berrangé QType type; 24*407bc4bfSDaniel P. Berrangé union { 25*407bc4bfSDaniel P. Berrangé bool qbool; 26*407bc4bfSDaniel P. Berrangé int64_t qnum; 27*407bc4bfSDaniel P. Berrangé const char *qstr; 28*407bc4bfSDaniel P. Berrangé QLitDictEntry *qdict; 29*407bc4bfSDaniel P. Berrangé QLitObject *qlist; 30*407bc4bfSDaniel P. Berrangé } value; 31*407bc4bfSDaniel P. Berrangé }; 32*407bc4bfSDaniel P. Berrangé 33*407bc4bfSDaniel P. Berrangé struct QLitDictEntry { 34*407bc4bfSDaniel P. Berrangé const char *key; 35*407bc4bfSDaniel P. Berrangé QLitObject value; 36*407bc4bfSDaniel P. Berrangé }; 37*407bc4bfSDaniel P. Berrangé 38*407bc4bfSDaniel P. Berrangé #define QLIT_QNULL \ 39*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QNULL } 40*407bc4bfSDaniel P. Berrangé #define QLIT_QBOOL(val) \ 41*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QBOOL, .value.qbool = (val) } 42*407bc4bfSDaniel P. Berrangé #define QLIT_QNUM(val) \ 43*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QNUM, .value.qnum = (val) } 44*407bc4bfSDaniel P. Berrangé #define QLIT_QSTR(val) \ 45*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QSTRING, .value.qstr = (val) } 46*407bc4bfSDaniel P. Berrangé #define QLIT_QDICT(val) \ 47*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QDICT, .value.qdict = (val) } 48*407bc4bfSDaniel P. Berrangé #define QLIT_QLIST(val) \ 49*407bc4bfSDaniel P. Berrangé { .type = QTYPE_QLIST, .value.qlist = (val) } 50*407bc4bfSDaniel P. Berrangé 51*407bc4bfSDaniel P. Berrangé bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs); 52*407bc4bfSDaniel P. Berrangé 53*407bc4bfSDaniel P. Berrangé QObject *qobject_from_qlit(const QLitObject *qlit); 54*407bc4bfSDaniel P. Berrangé 55*407bc4bfSDaniel P. Berrangé #endif /* QLIT_H */ 56