39#include "private/private_tree_map.h"
88#define CCC_tree_map_initialize(type_name, type_intruder_field_name, \
89 type_key_field_name, compare, allocate, \
91 CCC_private_tree_map_initialize(type_name, type_intruder_field_name, \
92 type_key_field_name, compare, allocate, \
115#define CCC_tree_map_from(type_intruder_field_name, type_key_field_name, \
116 compare, allocate, destroy, context_data, \
117 compound_literal_array...) \
118 CCC_private_tree_map_from(type_intruder_field_name, type_key_field_name, \
119 compare, allocate, destroy, context_data, \
120 compound_literal_array)
181#define CCC_tree_map_swap_entry_wrap(map_pointer, type_intruder_pointer, \
182 temp_intruder_pointer) \
185 CCC_tree_map_swap_entry((map_pointer), (type_intruder_pointer), \
186 (temp_intruder_pointer)) \
209#define CCC_tree_map_try_insert_wrap(map_pointer, type_intruder_pointer) \
212 CCC_tree_map_try_insert((map_pointer), (type_intruder_pointer)) \
229#define CCC_tree_map_try_insert_with(map_pointer, key, \
230 type_compound_literal...) \
233 CCC_private_tree_map_try_insert_with(map_pointer, key, \
234 type_compound_literal) \
261#define CCC_tree_map_insert_or_assign_wrap(map_pointer, \
262 type_intruder_pointer...) \
265 CCC_tree_map_insert_or_assign((map_pointer), type_intruder_pointer) \
282#define CCC_tree_map_insert_or_assign_with(map_pointer, key, \
283 type_compound_literal...) \
286 CCC_private_tree_map_insert_or_assign_with(map_pointer, key, \
287 type_compound_literal) \
325#define CCC_tree_map_remove_key_value_wrap(map_pointer, \
326 output_intruder_pointer) \
329 CCC_tree_map_remove_key_value((map_pointer), \
330 (output_intruder_pointer)) \
367#define CCC_tree_map_entry_wrap(map_pointer, key_pointer) \
368 &(CCC_Tree_map_entry) \
370 CCC_tree_map_entry((map_pointer), (key_pointer)).private \
433#define CCC_tree_map_and_modify_with(map_pointer, type_name, \
435 &(CCC_Tree_map_entry) \
437 CCC_private_tree_map_and_modify_with(map_pointer, type_name, \
467#define CCC_tree_map_or_insert_with(map_pointer, type_compound_literal...) \
468 CCC_private_tree_map_or_insert_with(map_pointer, type_compound_literal)
486#define CCC_tree_map_insert_entry_with(map_pointer, type_compound_literal...) \
487 CCC_private_tree_map_insert_entry_with(map_pointer, type_compound_literal)
512#define CCC_tree_map_remove_entry_wrap(map_pointer) \
515 CCC_tree_map_remove_entry((map_pointer)).private \
546[[nodiscard]] CCC_Entry_status
596 void const *begin_key,
597 void const *end_key);
606#define CCC_tree_map_equal_range_wrap(map_pointer, \
607 begin_and_end_key_pointers...) \
610 CCC_tree_map_equal_range((map_pointer), (begin_and_end_key_pointers)) \
637 void const *reverse_begin_key,
638 void const *reverse_end_key);
647#define CCC_tree_map_equal_range_reverse_wrap( \
648 map_pointer, reverse_begin_and_reverse_end_key_pointers...) \
649 &(CCC_Range_reverse) \
651 CCC_tree_map_equal_range_reverse( \
652 (map_pointer), (reverse_begin_and_reverse_end_key_pointers)) \
725#ifdef TREE_MAP_USING_NAMESPACE_CCC
729# define tree_map_initialize(args...) CCC_tree_map_initialize(args)
730# define tree_map_from(args...) CCC_tree_map_from(args)
731# define tree_map_and_modify_with(args...) CCC_tree_map_and_modify_with(args)
732# define tree_map_or_insert_with(args...) CCC_tree_map_or_insert_with(args)
733# define tree_map_insert_entry_with(args...) \
734 CCC_tree_map_insert_entry_with(args)
735# define tree_map_try_insert_with(args...) CCC_tree_map_try_insert_with(args)
736# define tree_map_insert_or_assign(args...) \
737 CCC_tree_map_insert_or_assign(args)
738# define tree_map_insert_or_assign_wrap(args...) \
739 CCC_tree_map_insert_or_assign_wrap(args)
740# define tree_map_insert_or_assign_with(args...) \
741 CCC_tree_map_insert_or_assign_with(args)
742# define tree_map_swap_entry_wrap(args...) CCC_tree_map_swap_entry_wrap(args)
743# define tree_map_remove_key_value_wrap(args...) \
744 CCC_tree_map_remove_key_value_wrap(args)
745# define tree_map_remove_entry_wrap(args...) \
746 CCC_tree_map_remove_entry_wrap(args)
747# define tree_map_entry_wrap(args...) CCC_tree_map_entry_wrap(args)
748# define tree_map_and_modify_wrap(args...) CCC_tree_map_and_modify_wrap(args)
749# define tree_map_and_modify_context_wrap(args...) \
750 CCC_tree_map_and_modify_context_wrap(args)
751# define tree_map_contains(args...) CCC_tree_map_contains(args)
752# define tree_map_get_key_value(args...) CCC_tree_map_get_key_value(args)
753# define tree_map_get_mut(args...) CCC_tree_map_get_mut(args)
754# define tree_map_swap_entry(args...) CCC_tree_map_swap_entry(args)
755# define tree_map_remove_key_value(args...) \
756 CCC_tree_map_remove_key_value(args)
757# define tree_map_entry(args...) CCC_tree_map_entry(args)
758# define tree_map_remove_entry(args...) CCC_tree_map_remove_entry(args)
759# define tree_map_or_insert(args...) CCC_tree_map_or_insert(args)
760# define tree_map_insert_entry(args...) CCC_tree_map_insert_entry(args)
761# define tree_map_unwrap(args...) CCC_tree_map_unwrap(args)
762# define tree_map_unwrap_mut(args...) CCC_tree_map_unwrap_mut(args)
763# define tree_map_begin(args...) CCC_tree_map_begin(args)
764# define tree_map_next(args...) CCC_tree_map_next(args)
765# define tree_map_reverse_begin(args...) CCC_tree_map_reverse_begin(args)
766# define tree_map_reverse_next(args...) CCC_tree_map_reverse_next(args)
767# define tree_map_end(args...) CCC_tree_map_end(args)
768# define tree_map_reverse_end(args...) CCC_tree_map_reverse_end(args)
769# define tree_map_count(args...) CCC_tree_map_count(args)
770# define tree_map_is_empty(args...) CCC_tree_map_is_empty(args)
771# define tree_map_clear(args...) CCC_tree_map_clear(args)
772# define tree_map_validate(args...) CCC_tree_map_validate(args)
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:202
Definition: private_types.h:53
Definition: private_types.h:112
Definition: private_tree_map.h:78
Definition: private_tree_map.h:32
Definition: private_tree_map.h:54
CCC_Tribool CCC_tree_map_is_empty(CCC_Tree_map const *map)
Returns the size status of the map.
CCC_Tribool CCC_tree_map_validate(CCC_Tree_map const *map)
Validation of invariants for the map.
void * CCC_tree_map_reverse_begin(CCC_Tree_map const *map)
Return the start of a reverse inorder traversal of the map. Amortized O(lg N).
CCC_Range CCC_tree_map_equal_range(CCC_Tree_map const *map, void const *begin_key, void const *end_key)
Return an iterable range of values from [begin_key, end_key). Amortized O(lg N).
CCC_Entry_status CCC_tree_map_entry_status(CCC_Tree_map_entry const *entry)
Obtain the entry status from a container entry.
CCC_Range_reverse CCC_tree_map_equal_range_reverse(CCC_Tree_map const *map, void const *reverse_begin_key, void const *reverse_end_key)
Return an iterable range_reverse of values from [begin_key, end_key). Amortized O(lg N).
CCC_Tribool CCC_tree_map_insert_error(CCC_Tree_map_entry const *entry)
Returns the Vacant or Occupied status of the entry.
CCC_Tree_map_entry CCC_tree_map_entry(CCC_Tree_map const *map, void const *key)
Obtains an entry for the provided key in the map for future use.
CCC_Tribool CCC_tree_map_contains(CCC_Tree_map const *map, void const *key)
Searches the map for the presence of key.
void * CCC_tree_map_next(CCC_Tree_map const *map, CCC_Tree_map_node const *iterator_intruder)
Return the next element in an inorder traversal of the map. O(1).
CCC_Entry CCC_tree_map_swap_entry(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder, CCC_Tree_map_node *temp_intruder)
Invariantly inserts the key value wrapping type_intruder.
void * CCC_tree_map_end(CCC_Tree_map const *map)
Return the end of an inorder traversal of the map. O(1).
CCC_Entry CCC_tree_map_remove_key_value(CCC_Tree_map *map, CCC_Tree_map_node *output_intruder)
Removes the key value in the map storing the old value, if present, in the struct containing output_i...
CCC_Count CCC_tree_map_count(CCC_Tree_map const *map)
Returns the count of map occupied nodes.
CCC_Result CCC_tree_map_clear(CCC_Tree_map *map, CCC_Type_destructor *destroy)
Pops every element from the map calling destructor if destructor is non-NULL. O(N).
CCC_Tree_map_entry * CCC_tree_map_and_modify_context(CCC_Tree_map_entry *entry, CCC_Type_modifier *modify, void *context)
Modifies the provided entry if it is Occupied.
void * CCC_tree_map_reverse_next(CCC_Tree_map const *map, CCC_Tree_map_node const *iterator_intruder)
Return the reverse_next element in a reverse inorder traversal of the map. O(1).
CCC_Entry CCC_tree_map_try_insert(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder)
Attempts to insert the key value wrapping type_intruder.
CCC_Entry CCC_tree_map_insert_or_assign(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder)
Invariantly inserts or overwrites a user struct into the map.
void * CCC_tree_map_insert_entry(CCC_Tree_map_entry const *entry, CCC_Tree_map_node *type_intruder)
Inserts the provided entry invariantly.
CCC_Tree_map_entry * CCC_tree_map_and_modify(CCC_Tree_map_entry *entry, CCC_Type_modifier *modify)
Modifies the provided entry if it is Occupied.
void * CCC_tree_map_reverse_end(CCC_Tree_map const *map)
Return the reverse_end of a reverse inorder traversal of the map. O(1).
CCC_Tribool CCC_tree_map_occupied(CCC_Tree_map_entry const *entry)
Provides the status of the entry should an insertion follow.
void * CCC_tree_map_or_insert(CCC_Tree_map_entry const *entry, CCC_Tree_map_node *type_intruder)
Inserts the struct with handle type_intruder if the entry is Vacant.
void * CCC_tree_map_unwrap(CCC_Tree_map_entry const *entry)
Unwraps the provided entry to obtain a view into the map element.
void * CCC_tree_map_begin(CCC_Tree_map const *map)
Return the start of an inorder traversal of the map. Amortized O(lg N).
void * CCC_tree_map_get_key_value(CCC_Tree_map const *map, void const *key)
Returns a reference into the map at entry key.
CCC_Entry CCC_tree_map_remove_entry(CCC_Tree_map_entry const *entry)
Remove the entry from the map if Occupied.
The C Container Collection Fundamental Types.
CCC_Tribool
A three state boolean to allow for an error state. Error is -1, False is 0, and True is 1.
Definition: types.h:133
void CCC_Type_destructor(CCC_Type_context)
A callback function for destroying an element in the container.
Definition: types.h:376
CCC_Result
A result of actions on containers.
Definition: types.h:148
void CCC_Type_modifier(CCC_Type_context)
A callback function for modifying an element in the container.
Definition: types.h:358
Definition: private_types.h:160
Definition: private_tree_map.h:94