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 data_pointer, type_name, order, compare, allocate, context_data, capacity) \
102 CCC_private_flat_priority_queue_initialize(data_pointer, type_name, order, \
103 compare, allocate, \
104 context_data, capacity)
105
119#define CCC_flat_priority_queue_heapify_initialize( \
120 data_pointer, type_name, order, compare, allocate, context_data, capacity, \
121 size) \
122 CCC_private_flat_priority_queue_heapify_initialize( \
123 data_pointer, type_name, order, compare, allocate, context_data, \
124 capacity, size)
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
369 CCC_Flat_priority_queue const *source,
370 CCC_Allocator *allocate);
371
392 size_t to_add, CCC_Allocator *allocate);
393
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)
408
431 void *temp, void *type_array, size_t count,
432 size_t sizeof_type);
433
451 void *temp, size_t count);
452
465[[nodiscard]] void *
467 void const *type, void *temp);
468
479 void *temp);
480
497 void *type, void *temp);
498
515 void *type, void *temp,
516 CCC_Type_modifier *modify, void *context);
517
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)
542
559 void *type, void *temp,
560 CCC_Type_modifier *modify,
561 void *context);
562
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)
587
604 void *type, void *temp,
605 CCC_Type_modifier *modify,
606 void *context);
607
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)
632
667[[nodiscard]] CCC_Buffer
669 void *temp);
670
686 CCC_Type_destructor *destroy);
687
703 CCC_Type_destructor *destroy);
704
736 CCC_Flat_priority_queue *priority_queue, CCC_Type_destructor *destructor,
737 CCC_Allocator *allocate);
738
750[[nodiscard]] void *
752
757[[nodiscard]] CCC_Tribool
759
764[[nodiscard]] CCC_Count
766
772[[nodiscard]] CCC_Count
774
784[[nodiscard]] void *
786
791[[nodiscard]] CCC_Tribool
793
797[[nodiscard]] CCC_Order
799
804#ifdef FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC
805typedef CCC_Flat_priority_queue Flat_priority_queue;
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)
863#endif /* FLAT_PRIORITY_QUEUE_USING_NAMESPACE_CCC */
864
865#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