59#ifndef CCC_FLAT_PRIORITY_QUEUE_H
60#define CCC_FLAT_PRIORITY_QUEUE_H
67#include "private/private_flat_priority_queue.h"
100#define CCC_flat_priority_queue_initialize( \
101 data_pointer, type_name, order, compare, allocate, context_data, capacity) \
102 CCC_private_flat_priority_queue_initialize(data_pointer, type_name, order, \
104 context_data, capacity)
119#define CCC_flat_priority_queue_heapify_initialize( \
120 data_pointer, type_name, order, compare, allocate, context_data, capacity, \
122 CCC_private_flat_priority_queue_heapify_initialize( \
123 data_pointer, type_name, order, compare, allocate, context_data, \
183#define CCC_flat_priority_queue_from(order, compare, allocate, context_data, \
185 compound_literal_array...) \
186 CCC_private_flat_priority_queue_from(order, compare, allocate, \
187 context_data, optional_capacity, \
188 compound_literal_array)
224#define CCC_flat_priority_queue_with_capacity( \
225 type_name, order, compare, allocate, context_data, capacity) \
226 CCC_private_flat_priority_queue_with_capacity( \
227 type_name, order, compare, allocate, context_data, capacity)
238#define CCC_flat_priority_queue_with_compound_literal(order, compare, \
239 compound_literal_array) \
240 CCC_private_flat_priority_queue_with_compound_literal( \
241 order, compare, compound_literal_array)
253#define CCC_flat_priority_queue_with_context_compound_literal( \
254 order, compare, context, compound_literal_array) \
255 CCC_private_flat_priority_queue_with_context_compound_literal( \
256 order, compare, context, compound_literal_array)
404#define CCC_flat_priority_queue_emplace(priority_queue_pointer, \
405 type_compound_literal...) \
406 CCC_private_flat_priority_queue_emplace(priority_queue_pointer, \
407 type_compound_literal)
431 void *temp,
void *type_array,
size_t count,
451 void *temp,
size_t count);
467 void const *type,
void *temp);
497 void *type,
void *temp);
515 void *type,
void *temp,
538#define CCC_flat_priority_queue_update_with( \
539 priority_queue_pointer, type_pointer, update_closure_over_T...) \
540 CCC_private_flat_priority_queue_update_with( \
541 priority_queue_pointer, type_pointer, update_closure_over_T)
559 void *type,
void *temp,
583#define CCC_flat_priority_queue_increase_with( \
584 flat_priority_queue_pointer, type_pointer, increase_closure_over_T...) \
585 CCC_private_flat_priority_queue_increase_with( \
586 flat_priority_queue_pointer, type_pointer, increase_closure_over_T)
604 void *type,
void *temp,
628#define CCC_flat_priority_queue_decrease_with( \
629 flat_priority_queue_pointer, type_pointer, decrease_closure_over_T...) \
630 CCC_private_flat_priority_queue_decrease_with( \
631 flat_priority_queue_pointer, type_pointer, decrease_closure_over_T)
804#ifdef FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC
806# define flat_priority_queue_initialize(args...) \
807 CCC_flat_priority_queue_initialize(args)
808# define flat_priority_queue_from(args...) CCC_flat_priority_queue_from(args)
809# define flat_priority_queue_with_capacity(args...) \
810 CCC_flat_priority_queue_with_capacity(args)
811# define flat_priority_queue_with_compound_literal(args...) \
812 CCC_flat_priority_queue_with_compound_literal(args)
813# define flat_priority_queue_with_context_compound_literal(args...) \
814 CCC_flat_priority_queue_with_context_compound_literal(args)
815# define flat_priority_queue_heapify_initialize(args...) \
816 CCC_flat_priority_queue_heapify_initialize(args)
817# define flat_priority_queue_copy(args...) CCC_flat_priority_queue_copy(args)
818# define flat_priority_queue_reserve(args...) \
819 CCC_flat_priority_queue_reserve(args)
820# define flat_priority_queue_heapify(args...) \
821 CCC_flat_priority_queue_heapify(args)
822# define flat_priority_queue_heapify_inplace(args...) \
823 CCC_flat_priority_queue_heapify_inplace(args)
824# define flat_priority_queue_heapsort(args...) \
825 CCC_flat_priority_queue_heapsort(args)
826# define flat_priority_queue_emplace(args...) \
827 CCC_flat_priority_queue_emplace(args)
828# define flat_priority_queue_push(args...) CCC_flat_priority_queue_push(args)
829# define flat_priority_queue_front(args...) \
830 CCC_flat_priority_queue_front(args)
831# define flat_priority_queue_pop(args...) CCC_flat_priority_queue_pop(args)
832# define flat_priority_queue_extract(args...) \
833 CCC_flat_priority_queue_extract(args)
834# define flat_priority_queue_update(args...) \
835 CCC_flat_priority_queue_update(args)
836# define flat_priority_queue_increase(args...) \
837 CCC_flat_priority_queue_increase(args)
838# define flat_priority_queue_decrease(args...) \
839 CCC_flat_priority_queue_decrease(args)
840# define flat_priority_queue_update_with(args...) \
841 CCC_flat_priority_queue_update_with(args)
842# define flat_priority_queue_increase_with(args...) \
843 CCC_flat_priority_queue_increase_with(args)
844# define flat_priority_queue_decrease_with(args...) \
845 CCC_flat_priority_queue_decrease_with(args)
846# define flat_priority_queue_clear(args...) \
847 CCC_flat_priority_queue_clear(args)
848# define flat_priority_queue_clear_and_free(args...) \
849 CCC_flat_priority_queue_clear_and_free(args)
850# define flat_priority_queue_clear_and_free_reserve(args...) \
851 CCC_flat_priority_queue_clear_and_free_reserve(args)
852# define flat_priority_queue_is_empty(args...) \
853 CCC_flat_priority_queue_is_empty(args)
854# define flat_priority_queue_count(args...) \
855 CCC_flat_priority_queue_count(args)
856# define flat_priority_queue_capacity(args...) \
857 CCC_flat_priority_queue_capacity(args)
858# define flat_priority_queue_data(args...) CCC_flat_priority_queue_data(args)
859# define flat_priority_queue_validate(args...) \
860 CCC_flat_priority_queue_validate(args)
861# define flat_priority_queue_order(args...) \
862 CCC_flat_priority_queue_order(args)
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_Result CCC_flat_priority_queue_clear_and_free_reserve(CCC_Flat_priority_queue *priority_queue, CCC_Type_destructor *destructor, CCC_Allocator *allocate)
Frees all slots in the priority_queue and frees the underlying Buffer that was previously dynamically...
CCC_Result CCC_flat_priority_queue_copy(CCC_Flat_priority_queue *destination, CCC_Flat_priority_queue const *source, CCC_Allocator *allocate)
Copy the priority_queue from source to newly initialized destination.
CCC_Result CCC_flat_priority_queue_clear_and_free(CCC_Flat_priority_queue *priority_queue, CCC_Type_destructor *destroy)
Clears the priority_queue calling destroy on every element if provided and frees the underlying buffe...
CCC_Result CCC_flat_priority_queue_heapify(CCC_Flat_priority_queue *priority_queue, void *temp, void *type_array, size_t count, size_t sizeof_type)
Copy input array into the flat_priority_queue, organizing into heap. O(N).
CCC_Result CCC_flat_priority_queue_clear(CCC_Flat_priority_queue *priority_queue, CCC_Type_destructor *destroy)
Clears the priority_queue calling destroy on every element if provided. O(1)-O(N).
CCC_Result CCC_flat_priority_queue_heapify_inplace(CCC_Flat_priority_queue *priority_queue, void *temp, size_t count)
Order count elements of the underlying priority_queue Buffer as an flat_priority_queue.
void * CCC_flat_priority_queue_push(CCC_Flat_priority_queue *priority_queue, void const *type, void *temp)
Pushes element pointed to at e into flat_priority_queue. O(lgN).
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).
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 *priority_queue, void *type, void *temp, CCC_Type_modifier *modify, void *context)
Decrease e that is a handle to the stored flat_priority_queue element. O(lgN).
void * CCC_flat_priority_queue_increase(CCC_Flat_priority_queue *priority_queue, void *type, void *temp, CCC_Type_modifier *modify, void *context)
Increase e that is a handle to the stored flat_priority_queue element. 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.
CCC_Buffer CCC_flat_priority_queue_heapsort(CCC_Flat_priority_queue *priority_queue, void *temp)
Destroys the priority_queue by sorting its data and returning the underlying buffer....
void * CCC_flat_priority_queue_update(CCC_Flat_priority_queue *priority_queue, void *type, void *temp, CCC_Type_modifier *modify, void *context)
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.
CCC_Result CCC_flat_priority_queue_reserve(CCC_Flat_priority_queue *priority_queue, size_t to_add, CCC_Allocator *allocate)
Reserves space for at least to_add more elements.
Definition: private_buffer.h:34
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:202
Definition: private_flat_priority_queue.h:36
The C Container Collection Fundamental Types.
CCC_Order
A three-way comparison for comparison functions.
Definition: types.h:171
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_Allocator(CCC_Allocator_context)
An allocation function at the core of all containers.
Definition: types.h:340
void CCC_Type_modifier(CCC_Type_context)
A callback function for modifying an element in the container.
Definition: types.h:358