C Container Collection (CCC)
Loading...
Searching...
No Matches
flat_priority_queue.h
Go to the documentation of this file.
1
59#ifndef CCC_FLAT_PRIORITY_QUEUE_H
60#define CCC_FLAT_PRIORITY_QUEUE_H
61
63#include <stddef.h>
66#include "buffer.h"
67#include "private/private_flat_priority_queue.h"
68#include "types.h"
69
81
100#define CCC_flat_priority_queue_initialize( \
101 type_name, order, compare, allocate, context_data, capacity, data_pointer) \
102 CCC_private_flat_priority_queue_initialize(type_name, order, compare, \
103 allocate, context_data, \
104 capacity, data_pointer)
105
119#define CCC_flat_priority_queue_heapify_initialize( \
120 type_name, order, compare, allocate, context_data, capacity, size, \
121 data_pointer) \
122 CCC_private_flat_priority_queue_heapify_initialize( \
123 type_name, order, compare, allocate, context_data, capacity, size, \
124 data_pointer)
125
183#define CCC_flat_priority_queue_from(order, compare, allocate, context_data, \
184 optional_capacity, \
185 compound_literal_array...) \
186 CCC_private_flat_priority_queue_from(order, compare, allocate, \
187 context_data, optional_capacity, \
188 compound_literal_array)
189
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)
228
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)
242
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)
257
268#define CCC_flat_priority_queue_with_allocator(type_name, order, compare, \
269 allocate) \
270 CCC_private_flat_priority_queue_with_allocator(type_name, order, compare, \
271 allocate)
272
284#define CCC_flat_priority_queue_with_context_allocator( \
285 type_name, order, compare, allocate, context) \
286 CCC_private_flat_priority_queue_with_context_allocator( \
287 type_name, order, compare, allocate, context)
288
400 CCC_Flat_priority_queue const *source,
401 CCC_Allocator *allocate);
402
423 size_t to_add, CCC_Allocator *allocate);
424
435#define CCC_flat_priority_queue_emplace(priority_queue_pointer, \
436 type_compound_literal...) \
437 CCC_private_flat_priority_queue_emplace(priority_queue_pointer, \
438 type_compound_literal)
439
462 void *temp, void *type_array, size_t count,
463 size_t sizeof_type);
464
482 void *temp, size_t count);
483
496[[nodiscard]] void *
498 void const *type, void *temp);
499
510 void *temp);
511
528 void *type, void *temp);
529
546 void *type, void *temp,
547 CCC_Type_modifier *modify, void *context);
548
569#define CCC_flat_priority_queue_update_with( \
570 priority_queue_pointer, type_pointer, update_closure_over_T...) \
571 CCC_private_flat_priority_queue_update_with( \
572 priority_queue_pointer, type_pointer, update_closure_over_T)
573
590 void *type, void *temp,
591 CCC_Type_modifier *modify,
592 void *context);
593
614#define CCC_flat_priority_queue_increase_with( \
615 flat_priority_queue_pointer, type_pointer, increase_closure_over_T...) \
616 CCC_private_flat_priority_queue_increase_with( \
617 flat_priority_queue_pointer, type_pointer, increase_closure_over_T)
618
635 void *type, void *temp,
636 CCC_Type_modifier *modify,
637 void *context);
638
659#define CCC_flat_priority_queue_decrease_with( \
660 flat_priority_queue_pointer, type_pointer, decrease_closure_over_T...) \
661 CCC_private_flat_priority_queue_decrease_with( \
662 flat_priority_queue_pointer, type_pointer, decrease_closure_over_T)
663
698[[nodiscard]] CCC_Buffer
700 void *temp);
701
717 CCC_Type_destructor *destroy);
718
734 CCC_Type_destructor *destroy);
735
767 CCC_Flat_priority_queue *priority_queue, CCC_Type_destructor *destructor,
768 CCC_Allocator *allocate);
769
781[[nodiscard]] void *
783
788[[nodiscard]] CCC_Tribool
790
795[[nodiscard]] CCC_Count
797
803[[nodiscard]] CCC_Count
805
815[[nodiscard]] void *
817
822[[nodiscard]] CCC_Tribool
824
828[[nodiscard]] CCC_Order
830
835#ifdef FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC
836typedef CCC_Flat_priority_queue Flat_priority_queue;
837# define flat_priority_queue_initialize(arguments...) \
838 CCC_flat_priority_queue_initialize(arguments)
839# define flat_priority_queue_from(arguments...) \
840 CCC_flat_priority_queue_from(arguments)
841# define flat_priority_queue_with_capacity(arguments...) \
842 CCC_flat_priority_queue_with_capacity(arguments)
843# define flat_priority_queue_with_compound_literal(arguments...) \
844 CCC_flat_priority_queue_with_compound_literal(arguments)
845# define flat_priority_queue_with_context_compound_literal(arguments...) \
846 CCC_flat_priority_queue_with_context_compound_literal(arguments)
847# define flat_priority_queue_with_allocator(arguments...) \
848 CCC_flat_priority_queue_with_allocator(arguments)
849# define flat_priority_queue_with_context_allocator(arguments...) \
850 CCC_flat_priority_queue_with_context_allocator(arguments)
851# define flat_priority_queue_heapify_initialize(arguments...) \
852 CCC_flat_priority_queue_heapify_initialize(arguments)
853# define flat_priority_queue_copy(arguments...) \
854 CCC_flat_priority_queue_copy(arguments)
855# define flat_priority_queue_reserve(arguments...) \
856 CCC_flat_priority_queue_reserve(arguments)
857# define flat_priority_queue_heapify(arguments...) \
858 CCC_flat_priority_queue_heapify(arguments)
859# define flat_priority_queue_heapify_inplace(arguments...) \
860 CCC_flat_priority_queue_heapify_inplace(arguments)
861# define flat_priority_queue_heapsort(arguments...) \
862 CCC_flat_priority_queue_heapsort(arguments)
863# define flat_priority_queue_emplace(arguments...) \
864 CCC_flat_priority_queue_emplace(arguments)
865# define flat_priority_queue_push(arguments...) \
866 CCC_flat_priority_queue_push(arguments)
867# define flat_priority_queue_front(arguments...) \
868 CCC_flat_priority_queue_front(arguments)
869# define flat_priority_queue_pop(arguments...) \
870 CCC_flat_priority_queue_pop(arguments)
871# define flat_priority_queue_extract(arguments...) \
872 CCC_flat_priority_queue_extract(arguments)
873# define flat_priority_queue_update(arguments...) \
874 CCC_flat_priority_queue_update(arguments)
875# define flat_priority_queue_increase(arguments...) \
876 CCC_flat_priority_queue_increase(arguments)
877# define flat_priority_queue_decrease(arguments...) \
878 CCC_flat_priority_queue_decrease(arguments)
879# define flat_priority_queue_update_with(arguments...) \
880 CCC_flat_priority_queue_update_with(arguments)
881# define flat_priority_queue_increase_with(arguments...) \
882 CCC_flat_priority_queue_increase_with(arguments)
883# define flat_priority_queue_decrease_with(arguments...) \
884 CCC_flat_priority_queue_decrease_with(arguments)
885# define flat_priority_queue_clear(arguments...) \
886 CCC_flat_priority_queue_clear(arguments)
887# define flat_priority_queue_clear_and_free(arguments...) \
888 CCC_flat_priority_queue_clear_and_free(arguments)
889# define flat_priority_queue_clear_and_free_reserve(arguments...) \
890 CCC_flat_priority_queue_clear_and_free_reserve(arguments)
891# define flat_priority_queue_is_empty(arguments...) \
892 CCC_flat_priority_queue_is_empty(arguments)
893# define flat_priority_queue_count(arguments...) \
894 CCC_flat_priority_queue_count(arguments)
895# define flat_priority_queue_capacity(arguments...) \
896 CCC_flat_priority_queue_capacity(arguments)
897# define flat_priority_queue_data(arguments...) \
898 CCC_flat_priority_queue_data(arguments)
899# define flat_priority_queue_validate(arguments...) \
900 CCC_flat_priority_queue_validate(arguments)
901# define flat_priority_queue_order(arguments...) \
902 CCC_flat_priority_queue_order(arguments)
903#endif /* FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC */
904
905#endif /* CCC_FLAT_PRIORITY_QUEUE_H */
The Buffer Interface.
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