#ifndef DICT_H
#define DICT_H
#define DICT_PATH_PRIVATE "priv/"
#define DICT_PATH_SHARED "shared/"
struct dict;
enum dict_iterate_flags {
DICT_ITERATE_FLAG_RECURSE = 0x01,
DICT_ITERATE_FLAG_SORT_BY_KEY = 0x02,
DICT_ITERATE_FLAG_SORT_BY_VALUE = 0x04
};
enum dict_data_type {
DICT_DATA_TYPE_STRING,
DICT_DATA_TYPE_UINT32
};
typedef void dict_transaction_commit_callback_t(int ret, void *context);
void dict_driver_register(struct dict *driver);
void dict_driver_unregister(struct dict *driver);
void dict_drivers_register_builtin(void);
void dict_drivers_unregister_builtin(void);
void dict_drivers_register_all(void);
void dict_drivers_unregister_all(void);
struct dict *dict_init(const char *uri, enum dict_data_type value_type,
const char *username, const char *base_dir);
void dict_deinit(struct dict **dict);
int dict_wait(struct dict *dict);
int dict_lookup(struct dict *dict, pool_t pool,
const char *key, const char **value_r);
struct dict_iterate_context *
dict_iterate_init(struct dict *dict, const char *path,
enum dict_iterate_flags flags);
struct dict_iterate_context *
dict_iterate_init_multiple(struct dict *dict, const char *const *paths,
enum dict_iterate_flags flags);
bool dict_iterate(struct dict_iterate_context *ctx,
const char **key_r, const char **value_r);
int dict_iterate_deinit(struct dict_iterate_context **ctx);
struct dict_transaction_context *dict_transaction_begin(struct dict *dict);
int dict_transaction_commit(struct dict_transaction_context **ctx);
void dict_transaction_commit_async(struct dict_transaction_context **ctx,
dict_transaction_commit_callback_t *callback,
void *context);
void dict_transaction_rollback(struct dict_transaction_context **ctx);
void dict_set(struct dict_transaction_context *ctx,
const char *key, const char *value);
void dict_unset(struct dict_transaction_context *ctx,
const char *key);
void dict_atomic_inc(struct dict_transaction_context *ctx,
const char *key, long long diff);
const char *dict_escape_string(const char *str);
const char *dict_unescape_string(const char *str);
#endif