Go to the source code of this file.
|
| static bool | name_eq (const name *name_1, const name *name_2) |
| static void | name_debug (const name *self, dc_debug_fmt fmt, FILE *stream) |
| static bool | age_eq (age const *age_1, age const *age_2) |
| static size_t | age_hash (age const *age) |
| static void | age_debug (age const *self, dc_debug_fmt fmt, FILE *stream) |
| static void | employee_debug (employee const *self, dc_debug_fmt fmt, FILE *stream) |
| static hr_system | hr_system_new () |
| static void | hr_system_new_employee (hr_system *self, employee emp) |
| static employee const * | hr_system_newest_of_age (hr_system const *self, age age) |
| static void | hr_system_debug (hr_system const *self, dc_debug_fmt fmt, FILE *stream) |
| static void | hr_system_delete (hr_system *self) |
| int | main () |
◆ INDEX_BITS
◆ ITEM
| #define ITEM employees_index_t |
◆ ITEM_DEBUG
| #define ITEM_DEBUG employees_index_t_debug |
◆ KEY
◆ KEY_DEBUG
◆ KEY_EQ
◆ KEY_HASH
◆ NAME [1/3]
| #define NAME employees_by_age |
◆ NAME [2/3]
| #define NAME same_age_employees |
◆ NAME [3/3]
◆ VALUE [1/2]
| #define VALUE same_age_employees |
◆ VALUE [2/2]
◆ VALUE_DEBUG [1/2]
| #define VALUE_DEBUG same_age_employees_debug |
◆ VALUE_DEBUG [2/2]
◆ age_debug()
◆ age_eq()
| bool age_eq |
( |
age const * | age_1, |
|
|
age const * | age_2 ) |
|
static |
◆ age_hash()
| size_t age_hash |
( |
age const * | age | ) |
|
|
static |
◆ employee_debug()
- Examples
- complex/employees.c.
Definition at line 55 of file employees.c.
55 {
56 fprintf(
stream,
"employee@%p {\n", (
void*)self);
58
62
64
68
71}
static void name_debug(const name *self, dc_debug_fmt fmt, FILE *stream)
static void age_debug(age const *self, dc_debug_fmt fmt, FILE *stream)
static DC_PUBLIC void dc_debug_fmt_print(dc_debug_fmt fmt, FILE *stream, const char *format,...)
static DC_PUBLIC dc_debug_fmt dc_debug_fmt_scope_end(dc_debug_fmt fmt)
static DC_PUBLIC dc_debug_fmt dc_debug_fmt_scope_begin(dc_debug_fmt fmt)
◆ hr_system_debug()
◆ hr_system_delete()
- Examples
- complex/employees.c.
Definition at line 145 of file employees.c.
145 {
146 employees_delete(&self->
data);
147
148 DC_FOR(employees_by_age, &self->
by_age, iter, entry) { same_age_employees_delete(entry.value); }
149
150 employees_by_age_delete(&self->
by_age);
151}
#define DC_FOR(TYPE, INSTANCE, ITER, ITEM)
◆ hr_system_new()
- Examples
- complex/employees.c.
Definition at line 98 of file employees.c.
98 {
100 .data = employees_new_with_capacity_for(1000, stdalloc_get_ref()),
101 .by_age = employees_by_age_new(stdalloc_get_ref()),
102 };
103}
◆ hr_system_new_employee()
- Examples
- complex/employees.c.
Definition at line 105 of file employees.c.
105 {
107 employees_index_t idx = employees_insert(&self->
data, emp);
108 same_age_employees* idxes = employees_by_age_try_write(&self->
by_age, emp.
age);
109 if (!idxes) {
110 idxes = employees_by_age_insert(&self->
by_age, emp.
age,
111 same_age_employees_new(stdalloc_get_ref()));
112 }
113 same_age_employees_push(idxes, idx);
114}
◆ hr_system_newest_of_age()
- Examples
- complex/employees.c.
Definition at line 116 of file employees.c.
116 {
117 same_age_employees
const* idxes = employees_by_age_try_read(&self->by_age,
age);
118 if (!idxes) {
119 return NULL;
120 }
121 if (same_age_employees_size(idxes) == 0) {
122 return NULL;
123 }
124 employees_index_t const* idx =
125 same_age_employees_read(idxes, same_age_employees_size(idxes) - 1);
126 return employees_read(&self->data, *idx);
127}
◆ main()
Definition at line 153 of file employees.c.
153 {
155
157 .age = (
age){.value = 22},
158 .email = "veryverylongemail@someprovider.net",
159 .name =
161 .forename = "Frank",
162 .surname = "Lee",
163 },
164 };
166
168 .forename = "Bob",
169 .surname = "Mike",
170 };
172 .age = (
age){.value = 22},
173 .email = "bib@cool.org",
174 .name = bob_name,
175 };
177
181
183
185}
static void hr_system_new_employee(hr_system *self, employee emp)
static bool name_eq(const name *name_1, const name *name_2)
static void hr_system_delete(hr_system *self)
static employee const * hr_system_newest_of_age(hr_system const *self, age age)
static void hr_system_debug(hr_system const *self, dc_debug_fmt fmt, FILE *stream)
static hr_system hr_system_new()
static DC_PUBLIC dc_debug_fmt dc_debug_fmt_new()
#define DC_ASSERT(expr,...)
◆ name_debug()
- Examples
- complex/employees.c.
Definition at line 32 of file employees.c.
32 {
33 (void)fmt;
34 fprintf(
stream,
"name@%p { forename: \"%s\", surname: \"%s\" }", (
void*)self, self->forename,
35 self->surname);
36}
◆ name_eq()
| bool name_eq |
( |
const name * | name_1, |
|
|
const name * | name_2 ) |
|
static |
- Examples
- complex/employees.c.
Definition at line 20 of file employees.c.
20 {
21 if (!name_1 || !name_2)
22 return false;
24 return false;
26 return false;
27
30}