libqb  1.0.6
Map

This provides a map interface to a Patricia trie, hashtable or skiplist.

Ordering
The hashtable is NOT ordered, but ptrie and skiplist are.
Iterating
Below is a simple example of how to iterate over a map.
const char *p;
void *data;
for (p = qb_map_iter_next(it, &data); p; p = qb_map_iter_next(it, &data)) {
printf("%s > %s\n", p, (char*) data);
}

Deletion of items within the iterator is supported. But note do not free the item memory in the iterator. If you need to free the data items then register for a notifier and free the memory there. This is required as the items are reference counted.

qb_map_notify_add(m, NULL, my_map_free_handler,
Notifications
These allow you to get callbacks when values are inserted/removed or replaced.
Note
hashtable only supports deletion and replacement notificatins. There is also a special global callback for freeing deleted and replaced values (QB_MAP_NOTIFY_FREE).
See also
qb_map_notify_add() qb_map_notify_del_2()
Prefix matching
The ptrie supports prefixes in the iterator:
while ((p = qb_map_iter_next(it, &data)) != NULL) {
printf("%s > %s\n", p, (char*)data);
}

The ptrie also supports prefixes in notifications: (remember to pass QB_MAP_NOTIFY_RECURSIVE into the notify_add.

See also
qbmap.h
qb_map_iter_create
qb_map_iter_t * qb_map_iter_create(qb_map_t *map)
Create an iterator.
qb_map_iter_free
void qb_map_iter_free(qb_map_iter_t *i)
free the iterator
QB_MAP_NOTIFY_DELETED
#define QB_MAP_NOTIFY_DELETED
Definition: qbmap.h:105
QB_MAP_NOTIFY_FREE
#define QB_MAP_NOTIFY_FREE
Definition: qbmap.h:109
qb_map_pref_iter_create
qb_map_iter_t * qb_map_pref_iter_create(qb_map_t *map, const char *prefix)
Create a prefix iterator.
QB_MAP_NOTIFY_INSERTED
#define QB_MAP_NOTIFY_INSERTED
Definition: qbmap.h:107
QB_MAP_NOTIFY_REPLACED
#define QB_MAP_NOTIFY_REPLACED
Definition: qbmap.h:106
QB_MAP_NOTIFY_RECURSIVE
#define QB_MAP_NOTIFY_RECURSIVE
Definition: qbmap.h:108
qb_map_notify_add
int32_t qb_map_notify_add(qb_map_t *m, const char *key, qb_map_notify_fn fn, int32_t events, void *user_data)
Add a notifier to the map.
qb_map_iter_next
const char * qb_map_iter_next(qb_map_iter_t *i, void **value)
Get the next item.
qb_map_iter_t
struct qb_map_iter qb_map_iter_t
This is an opaque data type representing an iterator instance.
Definition: qbmap.h:103