diff options
Diffstat (limited to 'Build/source/libs/pplib/pplib-src/src/ppdict.c')
-rw-r--r-- | Build/source/libs/pplib/pplib-src/src/ppdict.c | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Build/source/libs/pplib/pplib-src/src/ppdict.c b/Build/source/libs/pplib/pplib-src/src/ppdict.c new file mode 100644 index 00000000000..95ea96b9f33 --- /dev/null +++ b/Build/source/libs/pplib/pplib-src/src/ppdict.c @@ -0,0 +1,166 @@ + +#include "pplib.h" + +ppdict * ppdict_create (const ppobj *stackpos, size_t size, ppheap *heap) +{ + ppdict *dict; + ppobj *data; + ppname **pkey; + size_t i; + + size >>= 1; // num of key-value pairs + dict = (ppdict *)ppstruct_take(heap, sizeof(ppdict)); + dict->data = data = (ppobj *)ppstruct_take(heap, size * sizeof(ppobj)); + dict->keys = pkey = (ppname **)ppstruct_take(heap, (size + 1) * sizeof(ppname **)); + dict->size = 0; + + for (i = 0; i < size; ++i, stackpos += 2) + { + if (stackpos->type != PPNAME) // we need this check at lest for trailer hack + continue; + *pkey = stackpos->name; + *data = *(stackpos + 1); + ++pkey, ++data, ++dict->size; + } + *pkey = NULL; // sentinel for convinient iteration + return dict; +} + +ppobj * ppdict_get_obj (ppdict *dict, const char *name) +{ + ppname **pkey; + ppobj *obj; + + for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) + if (strcmp((*pkey)->data, name) == 0) // not ppname_eq() or ppname_is()!! + return obj; + return NULL; +} + +ppobj * ppdict_rget_obj (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_obj(obj) : NULL; +} + +int ppdict_get_bool (ppdict *dict, const char *name, int *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_bool(obj, *v) : 0; +} + +int ppdict_rget_bool (ppdict *dict, const char *name, int *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_bool(obj, *v) : 0; +} + +int ppdict_get_int (ppdict *dict, const char *name, ppint *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_int(obj, *v) : 0; +} + +int ppdict_rget_int (ppdict *dict, const char *name, ppint *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_int(obj, *v) : 0; +} + +int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_uint(obj, *v) : 0; +} + +int ppdict_rget_uint (ppdict *dict, const char *name, ppuint *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_uint(obj, *v) : 0; +} + +int ppdict_get_num (ppdict *dict, const char *name, ppnum *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_num(obj, *v) : 0; +} + +int ppdict_rget_num (ppdict *dict, const char *name, ppnum *v) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_num(obj, *v) : 0; +} + +ppname * ppdict_get_name (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_name(obj) : NULL; +} + +ppname * ppdict_rget_name (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_name(obj) : NULL; +} + +ppstring * ppdict_get_string (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_string(obj) : NULL; +} + +ppstring * ppdict_rget_string (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_string(obj) : NULL; +} + +pparray * ppdict_get_array (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_array(obj) : NULL; +} + +pparray * ppdict_rget_array (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_array(obj) : NULL; +} + +ppdict * ppdict_get_dict (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_dict(obj) : NULL; +} + +ppdict * ppdict_rget_dict (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_dict(obj) : NULL; +} + +/* +ppstream * ppdict_get_stream (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_stream(obj) : NULL; +} +*/ + +ppstream * ppdict_rget_stream (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_stream(obj) : NULL; +} + +ppref * ppdict_get_ref (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_ref(obj) : NULL; +} + +ppref * ppdict_rget_ref (ppdict *dict, const char *name) +{ + ppobj *obj; + return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_ref(obj) : NULL; +} |