59#ifndef CCC_FLAT_PRIORITY_QUEUE_H
60#define CCC_FLAT_PRIORITY_QUEUE_H
96#define CCC_flat_priority_queue_default(type_name, order, comparator...) \
97 CCC_private_flat_priority_queue_default(type_name, order, comparator)
108#define CCC_flat_priority_queue_for( \
109 type_name, order, comparator, capacity, data_pointer \
111 CCC_private_flat_priority_queue_for( \
112 type_name, order, comparator, capacity, data_pointer \
128#define CCC_flat_priority_queue_heapify( \
129 type_name, order, comparator, capacity, count, data_pointer... \
131 CCC_private_flat_priority_queue_heapify( \
132 type_name, order, comparator, capacity, count, data_pointer \
192#define CCC_flat_priority_queue_from( \
193 order, comparator, allocator, optional_capacity, compound_literal_array... \
195 CCC_private_flat_priority_queue_from( \
200 compound_literal_array \
235#define CCC_flat_priority_queue_with_capacity( \
236 type_name, order, comparator, allocator, capacity \
238 CCC_private_flat_priority_queue_with_capacity( \
239 type_name, order, comparator, allocator, capacity \
253#define CCC_flat_priority_queue_with_storage( \
254 order, comparator, compound_literal_array \
256 CCC_private_flat_priority_queue_with_storage( \
257 order, comparator, compound_literal_array \
361#define CCC_flat_priority_queue_emplace( \
362 priority_queue_pointer, allocator_pointer, type_compound_literal... \
364 CCC_private_flat_priority_queue_emplace( \
365 priority_queue_pointer, allocator_pointer, type_compound_literal \
530#define CCC_flat_priority_queue_update_with( \
531 priority_queue_pointer, \
533 update_closure_over_closure_parameter... \
535 CCC_private_flat_priority_queue_update_with( \
536 priority_queue_pointer, \
538 update_closure_over_closure_parameter \
586#define CCC_flat_priority_queue_increase_with( \
587 priority_queue_pointer, \
589 increase_closure_over_closure_parameter... \
591 CCC_private_flat_priority_queue_increase_with( \
592 priority_queue_pointer, \
594 increase_closure_over_closure_parameter \
641#define CCC_flat_priority_queue_decrease_with( \
642 priority_queue_pointer, \
644 decrease_closure_over_closure_parameter... \
646 CCC_private_flat_priority_queue_decrease_with( \
647 priority_queue_pointer, \
649 decrease_closure_over_closure_parameter \
762#ifdef FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC
765# define flat_priority_queue_default(arguments...) \
766 CCC_flat_priority_queue_default(arguments)
767# define flat_priority_queue_for(arguments...) \
768 CCC_flat_priority_queue_for(arguments)
769# define flat_priority_queue_from(arguments...) \
770 CCC_flat_priority_queue_from(arguments)
771# define flat_priority_queue_with_capacity(arguments...) \
772 CCC_flat_priority_queue_with_capacity(arguments)
773# define flat_priority_queue_with_storage(arguments...) \
774 CCC_flat_priority_queue_with_storage(arguments)
775# define flat_priority_queue_heapify(arguments...) \
776 CCC_flat_priority_queue_heapify(arguments)
777# define flat_priority_queue_copy(arguments...) \
778 CCC_flat_priority_queue_copy(arguments)
779# define flat_priority_queue_reserve(arguments...) \
780 CCC_flat_priority_queue_reserve(arguments)
781# define flat_priority_queue_copy_heapify(arguments...) \
782 CCC_flat_priority_queue_copy_heapify(arguments)
783# define flat_priority_queue_in_place_heapify(arguments...) \
784 CCC_flat_priority_queue_in_place_heapify(arguments)
785# define flat_priority_queue_emplace(arguments...) \
786 CCC_flat_priority_queue_emplace(arguments)
787# define flat_priority_queue_push(arguments...) \
788 CCC_flat_priority_queue_push(arguments)
789# define flat_priority_queue_front(arguments...) \
790 CCC_flat_priority_queue_front(arguments)
791# define flat_priority_queue_pop(arguments...) \
792 CCC_flat_priority_queue_pop(arguments)
793# define flat_priority_queue_extract(arguments...) \
794 CCC_flat_priority_queue_extract(arguments)
795# define flat_priority_queue_update(arguments...) \
796 CCC_flat_priority_queue_update(arguments)
797# define flat_priority_queue_increase(arguments...) \
798 CCC_flat_priority_queue_increase(arguments)
799# define flat_priority_queue_decrease(arguments...) \
800 CCC_flat_priority_queue_decrease(arguments)
801# define flat_priority_queue_update_with(arguments...) \
802 CCC_flat_priority_queue_update_with(arguments)
803# define flat_priority_queue_increase_with(arguments...) \
804 CCC_flat_priority_queue_increase_with(arguments)
805# define flat_priority_queue_decrease_with(arguments...) \
806 CCC_flat_priority_queue_decrease_with(arguments)
807# define flat_priority_queue_clear(arguments...) \
808 CCC_flat_priority_queue_clear(arguments)
809# define flat_priority_queue_clear_and_free(arguments...) \
810 CCC_flat_priority_queue_clear_and_free(arguments)
811# define flat_priority_queue_is_empty(arguments...) \
812 CCC_flat_priority_queue_is_empty(arguments)
813# define flat_priority_queue_count(arguments...) \
814 CCC_flat_priority_queue_count(arguments)
815# define flat_priority_queue_capacity(arguments...) \
816 CCC_flat_priority_queue_capacity(arguments)
817# define flat_priority_queue_data(arguments...) \
818 CCC_flat_priority_queue_data(arguments)
819# define flat_priority_queue_validate(arguments...) \
820 CCC_flat_priority_queue_validate(arguments)
821# define flat_priority_queue_order(arguments...) \
822 CCC_flat_priority_queue_order(arguments)
The Flat_buffer Interface.
CCC_Result CCC_flat_priority_queue_clear(CCC_Flat_priority_queue *priority_queue, CCC_Destructor const *destructor)
Clears the priority_queue calling destroy on every element if provided. O(1)-O(N).
CCC_Tribool CCC_flat_priority_queue_is_empty(CCC_Flat_priority_queue const *priority_queue)
Returns true if the priority_queue is empty false if not. O(1).
CCC_Count CCC_flat_priority_queue_capacity(CCC_Flat_priority_queue const *priority_queue)
Returns the capacity of the priority_queue representing total possible slots.
CCC_Count CCC_flat_priority_queue_count(CCC_Flat_priority_queue const *priority_queue)
Returns the count of the priority_queue active slots.
CCC_Result CCC_flat_priority_queue_erase(CCC_Flat_priority_queue *priority_queue, void *type, void *temp)
Erase element e that is a handle to the stored flat_priority_queue element.
CCC_Flat_priority_queue CCC_flat_priority_queue_in_place_heapify(CCC_Flat_buffer *buffer, void *temp, CCC_Order order, CCC_Comparator const *comparator)
Order count elements of the input Flat_buffer as a flat priority queue, destroying the input metadata...
CCC_Result CCC_flat_priority_queue_clear_and_free(CCC_Flat_priority_queue *priority_queue, CCC_Destructor const *destructor, CCC_Allocator const *allocator)
Clears the priority_queue calling destroy on every element if provided. O(1)-O(N).
CCC_Result CCC_flat_priority_queue_copy(CCC_Flat_priority_queue *destination, CCC_Flat_priority_queue const *source, CCC_Allocator const *allocator)
Copy the priority_queue from source to newly initialized destination.
CCC_Result CCC_flat_priority_queue_copy_heapify(CCC_Flat_priority_queue *priority_queue, CCC_Flat_buffer const *buffer, void *temp, CCC_Allocator const *allocator)
Copy input buffer into the flat priority queue, organizing into data into heap order in O(N) time.
void * CCC_flat_priority_queue_front(CCC_Flat_priority_queue const *priority_queue)
Return a pointer to the front (min or max) element in the flat_priority_queue. O(1).
CCC_Result CCC_flat_priority_queue_reserve(CCC_Flat_priority_queue *priority_queue, size_t to_add, CCC_Allocator const *allocator)
Reserves space for at least to_add more elements.
void * CCC_flat_priority_queue_increase(CCC_Flat_priority_queue const *priority_queue, void *type, void *temp, CCC_Modifier const *modifier)
Increase type that is a handle to the stored flat_priority_queue element. O(lgN).
void * CCC_flat_priority_queue_data(CCC_Flat_priority_queue const *priority_queue)
Return a pointer to the base of the backing array. O(1).
CCC_Result CCC_flat_priority_queue_pop(CCC_Flat_priority_queue *priority_queue, void *temp)
Pop the front element (min or max) element in the flat_priority_queue. O(lgN).
void * CCC_flat_priority_queue_decrease(CCC_Flat_priority_queue const *priority_queue, void *type, void *temp, CCC_Modifier const *modifier)
Decrease e that is a handle to the stored flat_priority_queue element. O(lgN).
void * CCC_flat_priority_queue_push(CCC_Flat_priority_queue *priority_queue, void const *type, void *temp, CCC_Allocator const *allocator)
Pushes element pointed to at e into flat_priority_queue. O(lgN).
CCC_Tribool CCC_flat_priority_queue_validate(CCC_Flat_priority_queue const *priority_queue)
Verifies the internal invariants of the priority_queue hold.
void * CCC_flat_priority_queue_update(CCC_Flat_priority_queue const *priority_queue, void *type, void *temp, CCC_Modifier const *modifier)
Update e that is a handle to the stored priority_queue element. O(lgN).
CCC_Order CCC_flat_priority_queue_order(CCC_Flat_priority_queue const *priority_queue)
Return the order used to initialize the flat_priority_queue.
The Private Flat Priority Queue Types and Interface.
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:384
The type passed by reference to any container function that may need to compare elements....
Definition: types.h:424
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:243
The type passed by reference to any container function that may need to destroy elements....
Definition: types.h:472
Definition: private_flat_buffer.h:40
Definition: private_flat_priority_queue.h:45
CCC_Comparator comparator
Definition: private_flat_priority_queue.h:53
CCC_Flat_buffer buffer
Definition: private_flat_priority_queue.h:48
CCC_Order order
Definition: private_flat_priority_queue.h:51
The type passed by reference to any container function that may need to modify elements....
Definition: types.h:444
The C Container Collection Fundamental Types.
CCC_Order
A three-way comparison for comparison functions.
Definition: types.h:213
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