20 if (!name_1 || !name_2)
49#define T employees_index
50#define SELF same_age_employees
54#define V same_age_employees
57#define SELF employees_by_age
67 .data = employees_new_with_capacity_for(1000, stdalloc_get()),
68 .by_age = employees_by_age_new(stdalloc_get()),
74 employees_index idx = employees_insert(&self->
data, emp);
75 same_age_employees* idxes = employees_by_age_try_write(&self->
by_age, emp.
age);
78 employees_by_age_insert(&self->
by_age, emp.
age, same_age_employees_new(stdalloc_get()));
80 same_age_employees_push(idxes, idx);
84 same_age_employees
const* idxes = employees_by_age_try_read(&self->
by_age,
age);
88 if (same_age_employees_size(idxes) == 0) {
91 employees_index
const* idx = same_age_employees_read(idxes, same_age_employees_size(idxes) - 1);
92 return employees_read(&self->
data, *idx);
96 employees_delete(&self->
data);
98 employees_by_age_iter iter = employees_by_age_get_iter(&self->
by_age);
99 employees_by_age_kv
const* entry = NULL;
100 while ((entry = employees_by_age_iter_next(&iter))) {
101 same_age_employees_delete(entry->value);
104 employees_by_age_delete(&self->
by_age);
111 .age = (
age){.value = 22},
112 .email =
"veryverylongemail@someprovider.net",
126 .age = (
age){.value = 22},
127 .email =
"bib@cool.org",
employee const * hr_system_newest_of_age(hr_system const *self, age age)
bool age_eq(age const *age_1, age const *age_2)
bool name_eq(const name *name_1, const name *name_2)
void hr_system_delete(hr_system *self)
size_t age_hash(age const *age)
hr_system hr_system_new()
void hr_system_new_employee(hr_system *self, employee emp)