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),
68 .by_age = employees_by_age_new(),
74 employees_index idx = employees_insert(&self->
data, emp);
75 same_age_employees* idxes = employees_by_age_try_write(&self->
by_age, emp.
age);
77 idxes = employees_by_age_insert(&self->
by_age, emp.
age, same_age_employees_new());
79 same_age_employees_push(idxes, idx);
83 same_age_employees
const* idxes = employees_by_age_try_read(&self->
by_age,
age);
87 if (same_age_employees_size(idxes) == 0) {
90 employees_index
const* idx = same_age_employees_read(idxes, same_age_employees_size(idxes) - 1);
91 return employees_read(&self->
data, *idx);
95 employees_delete(&self->
data);
97 employees_by_age_iter iter = employees_by_age_get_iter(&self->
by_age);
98 while (!employees_by_age_iter_empty(&iter)) {
99 employees_by_age_kv kv = employees_by_age_iter_next(&iter);
100 same_age_employees_delete(kv.value);
103 employees_by_age_delete(&self->
by_age);
110 .age = (
age){.value = 22},
111 .email =
"veryverylongemail@someprovider.net",
125 .age = (
age){.value = 22},
126 .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)