65 lines
1.9 KiB
C
65 lines
1.9 KiB
C
#ifndef FX_DS_DICT_H_
|
|
#define FX_DS_DICT_H_
|
|
|
|
#include <fx/bst.h>
|
|
#include <fx/macros.h>
|
|
#include <fx/misc.h>
|
|
#include <fx/queue.h>
|
|
#include <fx/status.h>
|
|
#include <fx/string.h>
|
|
|
|
FX_DECLS_BEGIN;
|
|
|
|
#define FX_TYPE_DICT (fx_dict_get_type())
|
|
#define FX_TYPE_DICT_ITERATOR (fx_dict_iterator_get_type())
|
|
|
|
struct fx_dict_p;
|
|
|
|
FX_DECLARE_TYPE(fx_dict);
|
|
FX_DECLARE_TYPE(fx_dict_iterator);
|
|
|
|
FX_TYPE_CLASS_DECLARATION_BEGIN(fx_dict)
|
|
FX_TYPE_CLASS_DECLARATION_END(fx_dict)
|
|
|
|
FX_TYPE_CLASS_DECLARATION_BEGIN(fx_dict_iterator)
|
|
FX_TYPE_CLASS_DECLARATION_END(fx_dict_iterator)
|
|
|
|
#define FX_DICT_ITEM(k, v) {.key = (k), .value = (v)}
|
|
#define FX_DICT_ITEM_END {.key = NULL, .value = NULL}
|
|
|
|
#define fx_dict_foreach(it, dict) \
|
|
for (int z__fx_unique_name() = fx_dict_iterator_begin(dict, it); \
|
|
(it)->key != NULL; \
|
|
fx_dict_iterator_next(it))
|
|
|
|
typedef struct fx_dict_item {
|
|
const fx_string *key;
|
|
fx_object *value;
|
|
} fx_dict_item;
|
|
|
|
FX_API fx_type fx_dict_get_type(void);
|
|
FX_API fx_type fx_dict_iterator_get_type(void);
|
|
|
|
FX_TYPE_DEFAULT_CONSTRUCTOR(fx_dict, FX_TYPE_DICT);
|
|
|
|
#if 0
|
|
FX_API fx_dict *fx_dict_create_with_items(const fx_dict_item *items);
|
|
#endif
|
|
|
|
FX_API fx_status fx_dict_put(fx_dict *dict, const char *key, fx_object *value);
|
|
FX_API fx_status
|
|
fx_dict_put_sk(fx_dict *dict, const fx_string *key, fx_object *value);
|
|
FX_API fx_object *fx_dict_at(const fx_dict *dict, const char *key);
|
|
FX_API fx_object *fx_dict_at_sk(const fx_dict *dict, const fx_string *key);
|
|
FX_API fx_object *fx_dict_get(fx_dict *dict, const char *key);
|
|
FX_API fx_object *fx_dict_get_sk(fx_dict *dict, const fx_string *key);
|
|
|
|
FX_API bool fx_dict_has_key(const fx_dict *dict, const char *key);
|
|
FX_API bool fx_dict_has_skey(const fx_dict *dict, const fx_string *key);
|
|
FX_API size_t fx_dict_get_size(const fx_dict *dict);
|
|
FX_API bool fx_dict_is_empty(const fx_dict *dict);
|
|
|
|
FX_DECLS_END;
|
|
|
|
#endif
|