X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fecoli_keyval.h;h=a3e9400fe557bb16137c17ea219d8f4dc757fc7d;hb=51028779e0a8772091aec5ab96bcf2519cf2f1ad;hp=55d3986f86b5f5e8f34f33f663e8fc2cf2e1c864;hpb=7cbb8a1000b85db2a487afd4d17e688b8c0aa756;p=protos%2Flibecoli.git diff --git a/lib/ecoli_keyval.h b/lib/ecoli_keyval.h index 55d3986..a3e9400 100644 --- a/lib/ecoli_keyval.h +++ b/lib/ecoli_keyval.h @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2016, Olivier MATZ + * Copyright 2016, Olivier MATZ */ /** @@ -18,6 +18,7 @@ typedef void (*ec_keyval_elt_free_t)(void *); struct ec_keyval; +struct ec_keyval_iter; /** * Create a hash table. @@ -125,4 +126,79 @@ struct ec_keyval *ec_keyval_dup(const struct ec_keyval *keyval); */ 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); + * ec_keyval_iter_valid(iter); + * ec_keyval_iter_next(iter)) { + * printf(" %s: %p\n", + * ec_keyval_iter_get_key(iter), + * ec_keyval_iter_get_val(iter)); + * } + * ec_keyval_iter_free(iter); + * + * @param keyval + * The hash table. + * @return + * An iterator, or NULL on error (errno is set). + */ +struct ec_keyval_iter * +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. + */ +void ec_keyval_iter_next(struct ec_keyval_iter *iter); + +/** + * Free the iterator. + * + * @param iter + * The hash table iterator. + */ +void ec_keyval_iter_free(struct ec_keyval_iter *iter); + +/** + * Check if the iterator points to a valid element. + * + * @param iter + * The hash table iterator. + * @return + * true if the element is valid, else false. + */ +bool +ec_keyval_iter_valid(const struct ec_keyval_iter *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_iter *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_iter *iter); + + #endif