20 if (!name_1 || !name_2)
49#define ITEM employees_index_t
50#define NAME same_age_employees
55#define KEY_HASH age_hash
56#define VALUE same_age_employees
57#define NAME 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_t 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_t
const* idx =
92 same_age_employees_read(idxes, same_age_employees_size(idxes) - 1);
93 return employees_read(&self->
data, *idx);
97 employees_delete(&self->
data);
99 employees_by_age_iter iter = employees_by_age_get_iter(&self->
by_age);
100 employees_by_age_kv
const* entry = NULL;
101 while ((entry = employees_by_age_iter_next(&iter))) {
102 same_age_employees_delete(entry->value);
105 employees_by_age_delete(&self->
by_age);
112 .age = (
age){.value = 22},
113 .email =
"veryverylongemail@someprovider.net",
127 .age = (
age){.value = 22},
128 .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)