The following implements maps from integers to pointers, represented as binary trees with a structure based on the bit-pattern of the integer keys. The implementation is more compact than a trie due to the omission of single-choice branches. Some key features are
| size_t cucon_ucmap_card | ( | cucon_ucmap_t | map | ) |
Returns the number of elements in map.
| int cucon_ucmap_cmp | ( | cucon_ucmap_t | map0, | |
| cucon_ucmap_t | map1 | |||
| ) |
Return -1, 0, or 1 when map0 is less, equal, or greater than map1, where the value slots are compared as integers or by pointer equality.
| int cucon_ucmap_cmp_ptr | ( | cu_clop(f, int, void const *, void const *) | , | |
| cucon_ucmap_t | map0, | |||
| cucon_ucmap_t | map1 | |||
| ) |
Return -1, 0, or 1 when map0 is less, equal, or greater than map1, where the value solts are compared according to f.
| cu_bool_t cucon_ucmap_conj_int | ( | cucon_ucmap_t | map, | |
| cu_clop(cb, cu_bool_t, uintptr_t, int) | ||||
| ) |
Sequential conjunction over mappings in order of increasing keys.
| cu_bool_t cucon_ucmap_conj_ptr | ( | cucon_ucmap_t | map, | |
| cu_clop(f, cu_bool_t, uintptr_t, void *) | ||||
| ) |
Sequential conjunction over mappings in order of increasing keys.
| cu_bool_t cucon_ucmap_contains | ( | cucon_ucmap_t | map, | |
| uintptr_t | key | |||
| ) |
True iff map has a mapping from key.
| void cucon_ucmap_dump | ( | cucon_ucmap_t | map, | |
| FILE * | out | |||
| ) |
Debug dump of map.
| cucon_ucmap_t cucon_ucmap_empty | ( | ) |
The empty map.
| cu_bool_t cucon_ucmap_eq | ( | cucon_ucmap_t | map0, | |
| cucon_ucmap_t | map1 | |||
| ) |
True iff map0 and map1 are equal, where values are compared as integers or by pointer comparison.
| cu_bool_t cucon_ucmap_eq_ptr | ( | cu_clop(f, cu_bool_t, void const *, void const *) | , | |
| cucon_ucmap_t | map0, | |||
| cucon_ucmap_t | map1 | |||
| ) |
True iff map0 and map1 are equal, where f compares the values.
| cucon_ucmap_t cucon_ucmap_erase | ( | cucon_ucmap_t | map, | |
| uintptr_t | key | |||
| ) |
If map has a mapping from key, returns the result of erasing it, otherwise returns map.
| cu_bool_t cucon_ucmap_find | ( | cucon_ucmap_t | map, | |
| uintptr_t | key, | |||
| uintptr_t * | v_out | |||
| ) |
If key is found in map, assign its value to v_out and return true, else return false.
| int cucon_ucmap_find_int | ( | cucon_ucmap_t | map, | |
| uintptr_t | key | |||
| ) |
The mapping for key in map, or cucon_ucmap_int_none if not found.
| void* cucon_ucmap_find_ptr | ( | cucon_ucmap_t | map, | |
| uintptr_t | key | |||
| ) |
The mapping for key in map or NULL if none.
| cucon_ucmap_t cucon_ucmap_insert | ( | cucon_ucmap_t | , | |
| uintptr_t | , | |||
| uintptr_t | ||||
| ) |
Return a map which agrees with map everywhere, except that key maps to val.
| cucon_ucmap_t cucon_ucmap_insert_int | ( | cucon_ucmap_t | map, | |
| uintptr_t | key, | |||
| int | val | |||
| ) |
Return a map which agrees with map everywhere, except that key maps to val.
| cucon_ucmap_t cucon_ucmap_insert_ptr | ( | cucon_ucmap_t | map, | |
| uintptr_t | key, | |||
| void * | val | |||
| ) |
Return a map which agrees with map everywhere, except that key maps to val.
| cu_bool_t cucon_ucmap_is_empty | ( | cucon_ucmap_t | map | ) |
True iff map is the empty map.
| cu_bool_t cucon_ucmap_is_singleton | ( | cucon_ucmap_t | map | ) |
True iff the domain of map is a singleton.
| void cucon_ucmap_iter_int | ( | cucon_ucmap_t | M, | |
| cu_clop(f, void, uintptr_t, int) | ||||
| ) |
Call f for each key and value pair in M, assuming values are integers.
| void cucon_ucmap_iter_ptr | ( | cucon_ucmap_t | M, | |
| cu_clop(f, void, uintptr_t, void *) | ||||
| ) |
Call f for each key and value pair in M, assuming values are pointers.
| cu_bool_t cucon_ucmap_iterA | ( | cu_clop(f, cu_bool_t, uintptr_t, uintptr_t) | , | |
| cucon_ucmap_t | M | |||
| ) |
Call f for each key and value pair in M.
| cucon_ucmap_t cucon_ucmap_left_union | ( | cucon_ucmap_t | M0, | |
| cucon_ucmap_t | M1 | |||
| ) |
Return a map with co-range equal to the union of the co-ranges of M0 and M1, and the mappings agree with M0 on its co-range and with M1 elsewhere.
| uintptr_t cucon_ucmap_max_ukey | ( | cucon_ucmap_t | map | ) |
The maximum key in map when keys are interpreted as unsigned.
| uintptr_t cucon_ucmap_min_ukey | ( | cucon_ucmap_t | map | ) |
The minimum key in map when keys are interpreted as unsigned.
| cucon_ucmap_t cucon_ucmap_singleton | ( | uintptr_t | key, | |
| uintptr_t | val | |||
| ) |
Return the map {key ↦ val}.
| cucon_ucmap_t cucon_ucmap_singleton_ptr | ( | uintptr_t | key, | |
| void * | val | |||
| ) |
Return the map {key ↦ val}.