18#define KEY_EQ uint32_t_eq
19#define KEY_HASH hash_id_uint32_t
20#define VALUE char const*
21#define NAME id_to_name
25 printf(
"Map has items:\n");
28 printf(
"position: %zu key: %" PRIu32
" string: %s\n", pos, *entry.key, *entry.value);
34 printf(
"Id to Name Map Example:\n");
35 id_to_name map = id_to_name_new(stdalloc_get());
37 id_to_name_insert(&map, 23,
"hello");
38 id_to_name_insert(&map, 10,
"bob");
39 id_to_name_insert(&map, 42,
"meaning");
40 DC_ASSERT(strcmp(*id_to_name_read(&map, 42),
"meaning") == 0);
44 char const** entry = id_to_name_write(&map, 23);
46 *entry =
"a different string!";
52 id_to_name_delete(&map);
62 fprintf(
stream,
" report_id@%p { name: \"%s\", section: %d}", self, self->
name, self->
section);
83 fprintf(
stream,
" report@%p { description: \"%s\", value: %d}", self, self->
description,
89#define KEY struct report_id
90#define KEY_EQ report_id_equality
91#define KEY_HASH report_id_hash
92#define KEY_DELETE report_id_delete
93#define KEY_DEBUG report_id_debug
94#define VALUE struct report
95#define VALUE_DELETE report_delete
96#define VALUE_DEBUG report_debug
97#define NAME report_map
101 printf(
"Report Map Example:\n");
102 report_map map = report_map_new(stdalloc_get());
104 struct report_id id1 = {.name = strdup(
"Report A"), .section = 1};
105 struct report_id id2 = {.name = strdup(
"Report B"), .section = 2};
107 report_map_insert(&map, id1,
108 (
struct report){.description = strdup(
"Description A"), .value = 100});
109 report_map_insert(&map, id2,
110 (
struct report){.description = strdup(
"Description B"), .value = 200});
112 DC_ASSERT(strcmp(report_map_read(&map, id1)->description,
"Description A") == 0);
116 FOR_CONST(report_map, &map, iter, entry) {
117 printf(
"Position: %zu Key: %s Section: %u Value: %d\n", pos, entry.key->name,
118 entry.key->section, entry.value->value);
125 struct report entry = report_map_remove(&map, id1);
130 report_map_delete(&map);
139 fprintf(
stream,
"fixed_string@%p { value: \"%.*s\" }", self, 4, self->
value);
147 return hash_murmurhash_string_4(str->
value);
150#define KEY struct fixed_string
151#define KEY_EQ fixed_string_eq
152#define KEY_HASH fixed_string_hash
153#define KEY_DEBUG fixed_string_debug
154#define VALUE uint32_t
155#define NAME fixed_string_map
159 printf(
"Fixed Strings Example:\n");
160 fixed_string_map map = fixed_string_map_new(stdalloc_get());
166 fixed_string_map_insert(&map, key1, 123);
167 fixed_string_map_insert(&map, key2, 456);
168 fixed_string_map_insert(&map, key3, 789);
170 DC_ASSERT(*fixed_string_map_read(&map, key1) == 123);
171 DC_ASSERT(*fixed_string_map_read(&map, key2) == 456);
172 DC_ASSERT(*fixed_string_map_read(&map, key3) == 789);
175 FOR_CONST(fixed_string_map, &map, iter, entry) {
176 printf(
"Position: %zu Key: %.3s Value: %u\n", pos, entry.key->value, *entry.value);
182 fixed_string_map_delete(&map);
static void free(SELF *self, void *ptr)
void report_debug(struct report const *self, dc_debug_fmt fmt, FILE *stream)
void id_to_name_example()
void print_map(id_to_name const *map)
void report_delete(struct report *self)
void report_id_debug(struct report_id const *self, dc_debug_fmt fmt, FILE *stream)
void report_map_example()
void fixed_string_debug(struct fixed_string const *self, dc_debug_fmt fmt, FILE *stream)
bool report_id_equality(struct report_id const *report_1, struct report_id const *report_2)
void fixed_string_example()
bool fixed_string_eq(struct fixed_string const *str1, struct fixed_string const *str2)
void report_id_delete(struct report_id *self)
size_t report_id_hash(struct report_id const *report_id)
size_t fixed_string_hash(struct fixed_string const *str)
static dc_debug_fmt dc_debug_fmt_new()
#define FOR_CONST(TYPE, INSTANCE, ITER, ITEM)
size_t hash_murmurhash_string(const char *str)
static size_t hash_combine(size_t seed, size_t h)
#define DC_ASSERT(expr,...)
Debug format helpers for debug printin data structures.
static FILE * stream(SELF *self)
Opens a file for.