59#ifndef CCC_FLAT_PRIORITY_QUEUE_H
60#define CCC_FLAT_PRIORITY_QUEUE_H
67#include "private/private_flat_priority_queue.h"
95#define CCC_flat_priority_queue_default(type_name, order, comparator...) \
96 CCC_private_flat_priority_queue_default(type_name, order, comparator)
107#define CCC_flat_priority_queue_for( \
108 type_name, order, comparator, capacity, data_pointer \
110 CCC_private_flat_priority_queue_for( \
111 type_name, order, comparator, capacity, data_pointer \
127#define CCC_flat_priority_queue_heapify( \
128 type_name, order, comparator, capacity, count, data_pointer... \
130 CCC_private_flat_priority_queue_heapify( \
131 type_name, order, comparator, capacity, count, data_pointer \
191#define CCC_flat_priority_queue_from( \
192 order, comparator, allocator, optional_capacity, compound_literal_array... \
194 CCC_private_flat_priority_queue_from( \
199 compound_literal_array \
234#define CCC_flat_priority_queue_with_capacity( \
235 type_name, order, comparator, allocator, capacity \
237 CCC_private_flat_priority_queue_with_capacity( \
238 type_name, order, comparator, allocator, capacity \
252#define CCC_flat_priority_queue_with_storage( \
253 order, comparator, compound_literal_array \
255 CCC_private_flat_priority_queue_with_storage( \
256 order, comparator, compound_literal_array \
360#define CCC_flat_priority_queue_emplace( \
361 priority_queue_pointer, allocator_pointer, type_compound_literal... \
363 CCC_private_flat_priority_queue_emplace( \
364 priority_queue_pointer, allocator_pointer, type_compound_literal \
525#define CCC_flat_priority_queue_update_with( \
526 priority_queue_pointer, \
528 update_closure_over_closure_parameter... \
530 CCC_private_flat_priority_queue_update_with( \
531 priority_queue_pointer, \
533 update_closure_over_closure_parameter \
577#define CCC_flat_priority_queue_increase_with( \
578 flat_priority_queue_pointer, \
580 increase_closure_over_closure_parameter... \
582 CCC_private_flat_priority_queue_increase_with( \
583 flat_priority_queue_pointer, \
585 increase_closure_over_closure_parameter \
628#define CCC_flat_priority_queue_decrease_with( \
629 flat_priority_queue_pointer, \
631 decrease_closure_over_closure_parameter... \
633 CCC_private_flat_priority_queue_decrease_with( \
634 flat_priority_queue_pointer, \
636 decrease_closure_over_closure_parameter \
749#ifdef FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC
752# define flat_priority_queue_default(arguments...) \
753 CCC_flat_priority_queue_default(arguments)
754# define flat_priority_queue_for(arguments...) \
755 CCC_flat_priority_queue_for(arguments)
756# define flat_priority_queue_from(arguments...) \
757 CCC_flat_priority_queue_from(arguments)
758# define flat_priority_queue_with_capacity(arguments...) \
759 CCC_flat_priority_queue_with_capacity(arguments)
760# define flat_priority_queue_with_storage(arguments...) \
761 CCC_flat_priority_queue_with_storage(arguments)
762# define flat_priority_queue_heapify(arguments...) \
763 CCC_flat_priority_queue_heapify(arguments)
764# define flat_priority_queue_copy(arguments...) \
765 CCC_flat_priority_queue_copy(arguments)
766# define flat_priority_queue_reserve(arguments...) \
767 CCC_flat_priority_queue_reserve(arguments)
768# define flat_priority_queue_copy_heapify(arguments...) \
769 CCC_flat_priority_queue_copy_heapify(arguments)
770# define flat_priority_queue_in_place_heapify(arguments...) \
771 CCC_flat_priority_queue_in_place_heapify(arguments)
772# define flat_priority_queue_emplace(arguments...) \
773 CCC_flat_priority_queue_emplace(arguments)
774# define flat_priority_queue_push(arguments...) \
775 CCC_flat_priority_queue_push(arguments)
776# define flat_priority_queue_front(arguments...) \
777 CCC_flat_priority_queue_front(arguments)
778# define flat_priority_queue_pop(arguments...) \
779 CCC_flat_priority_queue_pop(arguments)
780# define flat_priority_queue_extract(arguments...) \
781 CCC_flat_priority_queue_extract(arguments)
782# define flat_priority_queue_update(arguments...) \
783 CCC_flat_priority_queue_update(arguments)
784# define flat_priority_queue_increase(arguments...) \
785 CCC_flat_priority_queue_increase(arguments)
786# define flat_priority_queue_decrease(arguments...) \
787 CCC_flat_priority_queue_decrease(arguments)
788# define flat_priority_queue_update_with(arguments...) \
789 CCC_flat_priority_queue_update_with(arguments)
790# define flat_priority_queue_increase_with(arguments...) \
791 CCC_flat_priority_queue_increase_with(arguments)
792# define flat_priority_queue_decrease_with(arguments...) \
793 CCC_flat_priority_queue_decrease_with(arguments)
794# define flat_priority_queue_clear(arguments...) \
795 CCC_flat_priority_queue_clear(arguments)
796# define flat_priority_queue_clear_and_free(arguments...) \
797 CCC_flat_priority_queue_clear_and_free(arguments)
798# define flat_priority_queue_is_empty(arguments...) \
799 CCC_flat_priority_queue_is_empty(arguments)
800# define flat_priority_queue_count(arguments...) \
801 CCC_flat_priority_queue_count(arguments)
802# define flat_priority_queue_capacity(arguments...) \
803 CCC_flat_priority_queue_capacity(arguments)
804# define flat_priority_queue_data(arguments...) \
805 CCC_flat_priority_queue_data(arguments)
806# define flat_priority_queue_validate(arguments...) \
807 CCC_flat_priority_queue_validate(arguments)
808# define flat_priority_queue_order(arguments...) \
809 CCC_flat_priority_queue_order(arguments)
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_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_Flat_priority_queue CCC_flat_priority_queue_in_place_heapify(CCC_Buffer *buffer, void *temp, CCC_Order order, CCC_Comparator const *comparator)
Order count elements of the input Buffer as a flat priority queue, destroying the input metadata Buff...
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.
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_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).
CCC_Result CCC_flat_priority_queue_copy_heapify(CCC_Flat_priority_queue *priority_queue, CCC_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_update(CCC_Flat_priority_queue *priority_queue, void *type, void *temp, CCC_Modifier const *modifier)
Update e that is a handle to the stored 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_increase(CCC_Flat_priority_queue *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).
CCC_Order CCC_flat_priority_queue_order(CCC_Flat_priority_queue const *priority_queue)
Return the order used to initialize the flat_priority_queue.
void * CCC_flat_priority_queue_decrease(CCC_Flat_priority_queue *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).
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:376
Definition: private_buffer.h:32
The type passed by reference to any container function that may need to compare elements....
Definition: types.h:416
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
Definition: private_flat_priority_queue.h:34
CCC_Comparator comparator
Definition: private_flat_priority_queue.h:41
CCC_Buffer buffer
Definition: private_flat_priority_queue.h:36
CCC_Order order
Definition: private_flat_priority_queue.h:39
The type passed by reference to any container function that may need to modify elements....
Definition: types.h:436
The C Container Collection Fundamental Types.
CCC_Order
A three-way comparison for comparison functions.
Definition: types.h:214
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