X-Git-Url: http://git.droids-corp.org/?p=protos%2Flibecoli.git;a=blobdiff_plain;f=include%2Fecoli_keyval.h;fp=include%2Fecoli_keyval.h;h=0000000000000000000000000000000000000000;hp=38b0d40bad3a14b32657282ee48be9f97d389f81;hb=41bf1ba66e15c00f38375d05e49b31aa70f92349;hpb=03fcfd9562d205a050aba4c17902c56bbc817d54 diff --git a/include/ecoli_keyval.h b/include/ecoli_keyval.h deleted file mode 100644 index 38b0d40..0000000 --- a/include/ecoli_keyval.h +++ /dev/null @@ -1,187 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2016, Olivier MATZ - */ - -/** - * Simple hash table API - * - * This file provides functions to store objects in hash tables, using strings - * as keys. - */ - -#ifndef ECOLI_KEYVAL_ -#define ECOLI_KEYVAL_ - -#include -#include - -typedef void (*ec_keyval_elt_free_t)(void *); - -struct ec_keyval; -struct ec_keyval_elt_ref; - -/** - * Create a hash table. - * - * @return - * The hash table, or NULL on error (errno is set). - */ -struct ec_keyval *ec_keyval(void); - -/** - * Get a value from the hash table. - * - * @param keyval - * The hash table. - * @param key - * The key string. - * @return - * The element if it is found, or NULL on error (errno is set). - * In case of success but the element is NULL, errno is set to 0. - */ -void *ec_keyval_get(const struct ec_keyval *keyval, const char *key); - -/** - * Check if the hash table contains this key. - * - * @param keyval - * The hash table. - * @param key - * The key string. - * @return - * true if it contains the key, else false. - */ -bool ec_keyval_has_key(const struct ec_keyval *keyval, const char *key); - -/** - * Delete an object from the hash table. - * - * @param keyval - * The hash table. - * @param key - * The key string. - * @return - * 0 on success, or -1 on error (errno is set). - */ -int ec_keyval_del(struct ec_keyval *keyval, const char *key); - -/** - * Add/replace an object in the hash table. - * - * @param keyval - * The hash table. - * @param key - * The key string. - * @param val - * The pointer to be saved in the hash table. - * @param free_cb - * An optional pointer to a destructor function called when an - * object is destroyed (ec_keyval_del() or ec_keyval_free()). - * @return - * 0 on success, or -1 on error (errno is set). - * On error, the passed value is freed (free_cb(val) is called). - */ -int ec_keyval_set(struct ec_keyval *keyval, const char *key, void *val, - ec_keyval_elt_free_t free_cb); - -/** - * Free a hash table an all its objects. - * - * @param keyval - * The hash table. - */ -void ec_keyval_free(struct ec_keyval *keyval); - -/** - * Get the length of a hash table. - * - * @param keyval - * The hash table. - * @return - * The length of the hash table. - */ -size_t ec_keyval_len(const struct ec_keyval *keyval); - -/** - * Duplicate a hash table - * - * A reference counter is shared between the clones of - * hash tables so that the objects are freed only when - * the last reference is destroyed. - * - * @param keyval - * The hash table. - * @return - * The duplicated hash table, or NULL on error (errno is set). - */ -struct ec_keyval *ec_keyval_dup(const struct ec_keyval *keyval); - -/** - * Dump a hash table. - * - * @param out - * The stream where the dump is sent. - * @param keyval - * The hash table. - */ -void ec_keyval_dump(FILE *out, const struct ec_keyval *keyval); - -/** - * Iterate the elements in the hash table. - * - * The typical usage is as below: - * - * // dump elements - * for (iter = ec_keyval_iter(keyval); - * iter != NULL; - * iter = ec_keyval_iter_next(iter)) { - * printf(" %s: %p\n", - * ec_keyval_iter_get_key(iter), - * ec_keyval_iter_get_val(iter)); - * } - * - * @param keyval - * The hash table. - * @return - * An iterator element, or NULL if the dict is empty. - */ -struct ec_keyval_elt_ref * -ec_keyval_iter(const struct ec_keyval *keyval); - -/** - * Make the iterator point to the next element in the hash table. - * - * @param iter - * The hash table iterator. - * @return - * An iterator element, or NULL there is no more element. - */ -struct ec_keyval_elt_ref * -ec_keyval_iter_next(struct ec_keyval_elt_ref *iter); - -/** - * Get the key of the current element. - * - * @param iter - * The hash table iterator. - * @return - * The current element key, or NULL if the iterator points to an - * invalid element. - */ -const char * -ec_keyval_iter_get_key(const struct ec_keyval_elt_ref *iter); - -/** - * Get the value of the current element. - * - * @param iter - * The hash table iterator. - * @return - * The current element value, or NULL if the iterator points to an - * invalid element. - */ -void * -ec_keyval_iter_get_val(const struct ec_keyval_elt_ref *iter); - - -#endif