summaryrefslogtreecommitdiff
path: root/src/test/test-hashmap.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2018-01-26 16:38:01 -0800
committerSven Eden <yamakuzure@gmx.net>2018-05-30 07:58:46 +0200
commit1032d657a9b6865dc82d415960ea6871e553d42d (patch)
tree6a823206a5b125427217ae6bc1fa952e215b7dbf /src/test/test-hashmap.c
parentc6af51bbe0844276e955edfbd90a744cb06de64e (diff)
basic: implement the IteratedCache
Adds the basics of the IteratedCache and constructor support for the Hashmap and OrderedHashmap types. iterated_cache_get() is responsible for synchronizing the cache with the associated Hashmap and making it available to the caller at the supplied result pointers. Since iterated_cache_get() may need to allocate memory, it may fail, so callers must check the return value. On success, pointer arrays containing pointers to the associated Hashmap's keys and values, in as-iterated order, are returned in res_keys and res_values, respectively. Either may be supplied as NULL to inhibit caching of the keys or values, respectively. Note that if the cached Hashmap hasn't changed since the previous call to iterated_cache_get(), and it's not a call activating caching of the values or keys, the cost is effectively zero as the resulting pointers will simply refer to the previously returned arrays as-is. A cleanup function has also been added, iterated_cache_free(). This only frees the IteratedCache container and related arrays. The associated Hashmap, its keys, and values are not affected. Also note that the associated Hashmap does not automatically free its associated IteratedCache when freed. One could, in theory, safely access the arrays returned by a successful iterated_cache_get() call after its associated Hashmap has been freed, including the referenced values and keys. Provided the iterated_cache_get() was performed prior to the hashmap free, and that the type of hashmap free performed didn't free keys and/or values as well.
Diffstat (limited to 'src/test/test-hashmap.c')
0 files changed, 0 insertions, 0 deletions