#ifndef _MAP_H_ #define _MAP_H_ struct map_item { unsigned int key; }; struct map_entry; struct map { unsigned int size; unsigned int count; struct map_entry *data; }; int map_create(struct map *map); void map_destroy(struct map *map); void map_clear(struct map *map, void (*release)(struct map_item *)); int map_put(struct map *map, unsigned int key, struct map_item *v); int map_reput(struct map *map, unsigned int key, struct map_item *v, struct map_item **old); int map_contains(const struct map *map, unsigned int key); struct map_item *map_get(const struct map *map, unsigned int key); int map_remove(struct map *map, unsigned int key); unsigned int map_length(struct map *map); struct map_entry *map_iter_first(const struct map *map); struct map_entry *map_iter_next(const struct map *map, struct map_entry *iter); struct map_item *map_iter_item(struct map_entry *iter); #define map_for_each(map, iter) \ for (iter = map_iter_first(map); iter; iter = map_iter_next(map, iter)) #define map_iter_data(iter, type, member) \ container_of(map_iter_item(iter), type, member) #endif