39#include "private/private_tree_map.h"
83#define CCC_tree_map_default( \
84 type_name, type_intruder_field_name, type_key_field_name, comparator... \
86 CCC_private_tree_map_default( \
87 type_name, type_intruder_field_name, type_key_field_name, comparator \
97#define CCC_tree_map_for( \
98 type_name, type_intruder_field_name, type_key_field_name, comparator... \
100 CCC_private_tree_map_for( \
101 type_name, type_intruder_field_name, type_key_field_name, comparator \
120#define CCC_tree_map_from( \
121 type_intruder_field_name, \
122 type_key_field_name, \
126 compound_literal_array... \
128 CCC_private_tree_map_from( \
129 type_intruder_field_name, \
130 type_key_field_name, \
134 compound_literal_array \
201#define CCC_tree_map_swap_entry_wrap( \
203 type_intruder_pointer, \
204 temp_intruder_pointer, \
205 allocator_pointer... \
207 &(struct { CCC_Entry private; }){CCC_tree_map_swap_entry( \
209 (type_intruder_pointer), \
210 (temp_intruder_pointer), \
239#define CCC_tree_map_try_insert_wrap( \
240 map_pointer, type_intruder_pointer, allocator_pointer... \
242 &(struct { CCC_Entry private; }){ \
243 CCC_tree_map_try_insert( \
244 (map_pointer), (type_intruder_pointer), allocator_pointer \
262#define CCC_tree_map_try_insert_with( \
263 map_pointer, key, allocator_pointer, type_compound_literal... \
265 &(struct { CCC_Entry private; }){ \
266 CCC_private_tree_map_try_insert_with( \
267 map_pointer, key, allocator_pointer, type_compound_literal \
299#define CCC_tree_map_insert_or_assign_wrap( \
300 map_pointer, type_intruder_pointer, allocator_pointer... \
302 &(struct { CCC_Entry private; }){ \
303 CCC_tree_map_insert_or_assign( \
304 (map_pointer), (type_intruder_pointer), allocator_pointer \
322#define CCC_tree_map_insert_or_assign_with( \
323 map_pointer, key, allocator_pointer, type_compound_literal... \
325 &(struct { CCC_Entry private; }){ \
326 CCC_private_tree_map_insert_or_assign_with( \
327 map_pointer, key, allocator_pointer, type_compound_literal \
370#define CCC_tree_map_remove_key_value_wrap( \
371 map_pointer, output_intruder_pointer, allocator_pointer... \
373 &(struct { CCC_Entry private; }){ \
374 CCC_tree_map_remove_key_value( \
375 (map_pointer), (output_intruder_pointer), allocator_pointer \
412#define CCC_tree_map_entry_wrap(map_pointer, key_pointer...) \
413 &(struct { CCC_Tree_map_entry private; }){ \
414 CCC_tree_map_entry((map_pointer), key_pointer)} \
460#define CCC_tree_map_and_modify_with( \
461 map_pointer, closure_parameter, closure_over_closure_parameter... \
463 &(struct { CCC_Tree_map_entry private; }){ \
464 CCC_private_tree_map_and_modify_with( \
465 map_pointer, closure_parameter, closure_over_closure_parameter \
500#define CCC_tree_map_or_insert_with( \
501 map_pointer, allocator_pointer, type_compound_literal... \
503 CCC_private_tree_map_or_insert_with( \
504 map_pointer, allocator_pointer, type_compound_literal \
528#define CCC_tree_map_insert_entry_with( \
529 map_pointer, allocator_pointer, type_compound_literal... \
531 CCC_private_tree_map_insert_entry_with( \
532 map_pointer, allocator_pointer, type_compound_literal \
561#define CCC_tree_map_remove_entry_wrap(map_pointer, allocator_pointer...) \
562 &(struct { CCC_Entry private; }){ \
563 CCC_tree_map_remove_entry((map_pointer), allocator_pointer)} \
655#define CCC_tree_map_equal_range_wrap( \
656 map_pointer, begin_and_end_key_pointers... \
658 &(struct { CCC_Range private; }){ \
659 CCC_tree_map_equal_range((map_pointer), begin_and_end_key_pointers)} \
685 void const *reverse_begin_key,
686 void const *reverse_end_key
696#define CCC_tree_map_equal_range_reverse_wrap( \
697 map_pointer, reverse_begin_and_reverse_end_key_pointers... \
699 &(struct { CCC_Range_reverse private; }){ \
700 CCC_tree_map_equal_range_reverse( \
701 (map_pointer), reverse_begin_and_reverse_end_key_pointers \
774#ifdef TREE_MAP_USING_NAMESPACE_CCC
779# define tree_map_default(arguments...) CCC_tree_map_default(arguments)
780# define tree_map_for(arguments...) CCC_tree_map_for(arguments)
781# define tree_map_from(arguments...) CCC_tree_map_from(arguments)
782# define tree_map_and_modify(arguments...) CCC_tree_map_and_modify(arguments)
783# define tree_map_and_modify_with(arguments...) \
784 CCC_tree_map_and_modify_with(arguments)
785# define tree_map_and_modify_wrap(arguments...) \
786 CCC_tree_map_and_modify_wrap(arguments)
787# define tree_map_or_insert_with(arguments...) \
788 CCC_tree_map_or_insert_with(arguments)
789# define tree_map_insert_entry_with(arguments...) \
790 CCC_tree_map_insert_entry_with(arguments)
791# define tree_map_try_insert(arguments...) CCC_tree_map_try_insert(arguments)
792# define tree_map_try_insert_wrap(arguments...) \
793 CCC_tree_map_try_insert_wrap(arguments)
794# define tree_map_try_insert_with(arguments...) \
795 CCC_tree_map_try_insert_with(arguments)
796# define tree_map_insert_or_assign(arguments...) \
797 CCC_tree_map_insert_or_assign(arguments)
798# define tree_map_insert_or_assign_wrap(arguments...) \
799 CCC_tree_map_insert_or_assign_wrap(arguments)
800# define tree_map_insert_or_assign_with(arguments...) \
801 CCC_tree_map_insert_or_assign_with(arguments)
802# define tree_map_swap_entry_wrap(arguments...) \
803 CCC_tree_map_swap_entry_wrap(arguments)
804# define tree_map_remove_key_value_wrap(arguments...) \
805 CCC_tree_map_remove_key_value_wrap(arguments)
806# define tree_map_remove_entry_wrap(arguments...) \
807 CCC_tree_map_remove_entry_wrap(arguments)
808# define tree_map_entry_wrap(arguments...) CCC_tree_map_entry_wrap(arguments)
809# define tree_map_contains(arguments...) CCC_tree_map_contains(arguments)
810# define tree_map_get_key_value(arguments...) \
811 CCC_tree_map_get_key_value(arguments)
812# define tree_map_get_mut(arguments...) CCC_tree_map_get_mut(arguments)
813# define tree_map_swap_entry(arguments...) CCC_tree_map_swap_entry(arguments)
814# define tree_map_remove_key_value(arguments...) \
815 CCC_tree_map_remove_key_value(arguments)
816# define tree_map_entry(arguments...) CCC_tree_map_entry(arguments)
817# define tree_map_remove_entry(arguments...) \
818 CCC_tree_map_remove_entry(arguments)
819# define tree_map_or_insert(arguments...) CCC_tree_map_or_insert(arguments)
820# define tree_map_insert_entry(arguments...) \
821 CCC_tree_map_insert_entry(arguments)
822# define tree_map_unwrap(arguments...) CCC_tree_map_unwrap(arguments)
823# define tree_map_unwrap_mut(arguments...) CCC_tree_map_unwrap_mut(arguments)
824# define tree_map_begin(arguments...) CCC_tree_map_begin(arguments)
825# define tree_map_next(arguments...) CCC_tree_map_next(arguments)
826# define tree_map_reverse_begin(arguments...) \
827 CCC_tree_map_reverse_begin(arguments)
828# define tree_map_reverse_next(arguments...) \
829 CCC_tree_map_reverse_next(arguments)
830# define tree_map_end(arguments...) CCC_tree_map_end(arguments)
831# define tree_map_reverse_end(arguments...) \
832 CCC_tree_map_reverse_end(arguments)
833# define tree_map_equal_range(arguments...) \
834 CCC_tree_map_equal_range(arguments)
835# define tree_map_equal_range_wrap(arguments...) \
836 CCC_tree_map_equal_range_wrap(arguments)
837# define tree_map_equal_range_reverse(arguments...) \
838 CCC_tree_map_equal_range_reverse(arguments)
839# define tree_map_equal_range_reverse_wrap(arguments...) \
840 CCC_tree_map_equal_range_reverse_wrap(arguments)
841# define tree_map_count(arguments...) CCC_tree_map_count(arguments)
842# define tree_map_is_empty(arguments...) CCC_tree_map_is_empty(arguments)
843# define tree_map_clear(arguments...) CCC_tree_map_clear(arguments)
844# define tree_map_validate(arguments...) CCC_tree_map_validate(arguments)
845# define tree_map_entry_status(arguments...) \
846 CCC_tree_map_entry_status(arguments)
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:376
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:244
The type passed by reference to any container function that may need to destroy elements....
Definition: types.h:464
An Occupied or Vacant position in a searchable container.
Definition: types.h:135
The type passed by reference to any container function that may need to modify elements....
Definition: types.h:436
The result of a range_reverse query on iterable containers.
Definition: types.h:55
The result of a range query on iterable containers.
Definition: types.h:42
Definition: private_tree_map.h:70
CCC_Entry entry
Definition: private_tree_map.h:78
struct CCC_Tree_map * map
Definition: private_tree_map.h:72
Definition: private_tree_map.h:30
Definition: private_tree_map.h:51
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 CCC_tree_map_remove_key_value(CCC_Tree_map *map, CCC_Tree_map_node *output_intruder, CCC_Allocator const *allocator)
Removes the key value in the map storing the old value, if present, in the struct containing output_i...
CCC_Entry_status CCC_tree_map_entry_status(CCC_Tree_map_entry const *entry)
Obtain the entry status from a container entry.
CCC_Entry CCC_tree_map_try_insert(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder, CCC_Allocator const *allocator)
Attempts to insert the key value wrapping type_intruder.
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_Entry CCC_tree_map_insert_or_assign(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder, CCC_Allocator const *allocator)
Invariantly inserts or overwrites a user struct into the map.
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.
CCC_Result CCC_tree_map_clear(CCC_Tree_map *map, CCC_Destructor const *destructor, CCC_Allocator const *allocator)
Pops every element from the map calling destructor if destructor is non-NULL. O(N).
void * CCC_tree_map_or_insert(CCC_Tree_map_entry const *entry, CCC_Tree_map_node *type_intruder, CCC_Allocator const *allocator)
Inserts the struct with handle type_intruder if the entry is Vacant.
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).
void * CCC_tree_map_end(CCC_Tree_map const *map)
Return the end of an inorder traversal of the map. O(1).
void * CCC_tree_map_insert_entry(CCC_Tree_map_entry const *entry, CCC_Tree_map_node *type_intruder, CCC_Allocator const *allocator)
Inserts the provided entry invariantly.
CCC_Tree_map_entry * CCC_tree_map_and_modify(CCC_Tree_map_entry *entry, CCC_Modifier const *modifier)
Modifies the provided entry if it is Occupied.
CCC_Count CCC_tree_map_count(CCC_Tree_map const *map)
Returns the count of map occupied nodes.
CCC_Entry CCC_tree_map_swap_entry(CCC_Tree_map *map, CCC_Tree_map_node *type_intruder, CCC_Tree_map_node *temp_intruder, CCC_Allocator const *allocator)
Invariantly inserts the key value wrapping type_intruder.
CCC_Entry CCC_tree_map_remove_entry(CCC_Tree_map_entry const *entry, CCC_Allocator const *allocator)
Remove the entry from the map if 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).
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_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.
The C Container Collection Fundamental Types.
CCC_Entry_status
The status monitoring and entry state once it is obtained.
Definition: types.h:112
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:178
CCC_Result
A result of actions on containers.
Definition: types.h:192