Browse Source Download (without any required ccan dependencies)
stringmap
Macros for mapping strings to things
stringmap provides a generic string map via macros. It also supports byte strings with null characters.
Features which are sorely lacking in this version of stringmap are deletion and traversal.
#include <ccan/stringmap/stringmap.h>
static const char *get_string(void) {
static char buffer[4096];
char *tail;
if (!fgets(buffer, sizeof(buffer), stdin))
return NULL;
tail = strchr(buffer, 0);
if (tail>buffer && tail[-1]=='\n')
*--tail = 0;
if (!*buffer)
return NULL;
return buffer;
}
int main(void) {
stringmap(int) map = stringmap_new(NULL);
const char *string;
while ((string = get_string()) != NULL) {
int *count = stringmap_lookup(map, string);
if (!count) {
printf("\"%s\" is new\n", string);
count = stringmap_enter(map, string);
}
(*count) ++;
printf("\"%s\" has been entered %d times\n", string, *count);
}
stringmap_free(map);
return 0;
}
BSD (3 clause)