diff --git a/example/ex-bptree01.c b/example/ex-bptree01.c new file mode 100644 index 00000000..209c3b81 --- /dev/null +++ b/example/ex-bptree01.c @@ -0,0 +1,60 @@ +#include "m-bptree.h" +#include "m-string.h" + +// Define a map int -> string +BPTREE_DEF2(map_employee_id, 5, int, string_t) +#define M_OPL_map_employee_id_t() BPTREE_OPLIST2(map_employee_id, M_DEFAULT_OPLIST, STRING_OPLIST) + +// Define a map string -> int +BPTREE_DEF2(map_employee_name, 5, string_t, int) +#define M_OPL_map_employee_name_t() BPTREE_OPLIST2(map_employee_name, STRING_OPLIST, M_DEFAULT_OPLIST) + +int main(void) +{ + map_employee_id_t Employees; + map_employee_id_init(Employees); + + // Assign + map_employee_id_set_at(Employees, 17425, STRING_CTE("Mike")); + map_employee_id_set_at(Employees, 7147, STRING_CTE("Tango")); + map_employee_id_set_at(Employees, 841, STRING_CTE("Charlie")); + map_employee_id_set_at(Employees, 11632, STRING_CTE("John Do")); + map_employee_id_set_at(Employees, 852, STRING_CTE("Peter")); + map_employee_id_set_at(Employees, 530, STRING_CTE("Amanda")); + map_employee_id_set_at(Employees, 4258, STRING_CTE("Elisabeth")); + + printf("Number of employees: %zu\n", map_employee_id_size(Employees)); + + // Iterate over the employee list + printf("\nList of employees (sorted by id):\n"); + map_employee_id_it_t it; + for(map_employee_id_it(it, Employees); !map_employee_id_end_p(it); map_employee_id_next(it)) { + // Get a pointer to this employee from the iterator + const map_employee_id_type_t *e = map_employee_id_cref(it); + // Print it + printf ("%d: %s\n", *(e->key_ptr), string_get_cstr(*(e->value_ptr))); + } + + // Let's create a reverse map + M_LET(Employees_r, map_employee_name_t) { + + // Let's fill in the reverse map with each employee + // (using macro M_EACH) + for M_EACH(e, Employees, map_employee_id_t) { + map_employee_name_set_at(Employees_r, *(e->value_ptr), *(e->key_ptr)); + } + + // Iterate over the employee list + printf("\nList of employees (sorted by name):\n"); + for M_EACH(e, Employees_r, map_employee_name_t) { + printf ("%d: %s\n", *(e->value_ptr), string_get_cstr(*(e->key_ptr))); + } + + // Print + printf("\nElisabeth has id = %d\n", *map_employee_name_get(Employees_r, STRING_CTE("Elisabeth"))); + + } + + map_employee_id_clear(Employees); + return 0; +}