map#
A type-safe hash map implementation for C.
See rxi/map for the official documentation.
Prototypes for provided macros
typedef map_t(T) MAP_T;
void map_init(MAP_T *m);
void map_deinit(MAP_T *m);
void *map_get(MAP_T *m, const char *key);
int map_set(MAP_T *m, const char *key, T value);
void map_remove(MAP_T *m, const char *key);
map_iter_t map_iter(MAP_T *m);
const char *map_next(MAP_T *m, map_iter_t *iter);
Predefined map types
typedef map_t(void*) map_void_t;
typedef map_t(char*) map_str_t;
typedef map_t(int) map_int_t;
typedef map_t(char) map_char_t;
typedef map_t(float) map_float_t;
typedef map_t(double) map_double_t;
typedef map_t(unsigned int) map_uint_t;
map_uint_t m;
unsigned int *p;
const char *key;
map_iter_t iter;
map_init(&m);
map_set(&m, "testkey", 123);
p = map_get(&m, "testkey");
iter = map_iter(&m);
while ((key = map_next(&m, &iter))) {
printf("%s -> %u\n", key, *map_get(&m, key));
}
map_deinit(&m);
Internal functions
These functions are called via the macros. Don’t call them directly.
-
void map_deinit_(map_base_t *m)#
-
void *map_get_(const map_base_t *m, const char *key)#
-
int map_set_(map_base_t *m, const char *key, void *value, int vsize)#
-
void map_remove_(map_base_t *m, const char *key)#
-
map_iter_t map_iter_(void)#
-
const char *map_next_(map_base_t *m, map_iter_t *iter)#
Defines
-
MAP_VERSION#
-
map_t(T)#
Defines a new map type.
-
map_init(m)#
Initialises the map, this must be called before the map can be used.
-
map_deinit(m)#
Deinitialises the map, freeing the memory the map allocated during use; this should be called when we’re finished with a map.
-
map_get(m, key)#
Returns a pointer to the value of the given key. If no mapping for the key exists then NULL will be returned.
-
map_set(m, key, value)#
Sets the given key to the given value. Returns 0 on success, otherwise -1 is returned and the map remains unchanged.
-
map_remove(m, key)#
Removes the mapping of the given key from the map. If the key does not exist in the map then the function has no effect.
-
map_iter(m)#
Returns a map_iter_t which can be used with map_next() to iterate all the keys in the map.
-
map_next(m, iter)#
Uses the map_iter_t returned by map_iter() to iterate all the keys in the map. map_next() returns a key with each call and returns NULL when there are no more keys.
Typedefs
-
typedef struct map_node_t map_node_t#
-
struct map_base_t#
-
struct map_iter_t#