C Container Collection (CCC)
Loading...
Searching...
No Matches
priority_queue.h
Go to the documentation of this file.
1
33#ifndef CCC_PRIORITY_QUEUE_H
34#define CCC_PRIORITY_QUEUE_H
35
37#include <stddef.h>
40#include "private/private_priority_queue.h"
41#include "types.h"
42
54
65
83#define CCC_priority_queue_default( \
84 type_name, type_intruder_field, order, comparator \
85) \
86 CCC_private_priority_queue_for( \
87 type_name, type_intruder_field, order, comparator \
88 )
89
99#define CCC_priority_queue_for( \
100 type_name, type_intruder_field, order, comparator... \
101) \
102 CCC_private_priority_queue_for( \
103 type_name, type_intruder_field, order, comparator \
104 )
105
115#define CCC_priority_queue_from( \
116 type_intruder_field, \
117 order, \
118 comparator, \
119 allocator, \
120 destructor, \
121 compound_literal_array... \
122) \
123 CCC_private_priority_queue_from( \
124 type_intruder_field, \
125 order, \
126 comparator, \
127 allocator, \
128 destructor, \
129 compound_literal_array \
130 )
131
150[[nodiscard]] void *CCC_priority_queue_push(
151 CCC_Priority_queue *priority_queue,
152 CCC_Priority_queue_node *type_intruder,
153 CCC_Allocator const *allocator
154);
155
166#define CCC_priority_queue_emplace( \
167 priority_queue_pointer, allocator_pointer, type_compound_literal... \
168) \
169 CCC_private_priority_queue_emplace( \
170 priority_queue_pointer, allocator_pointer, type_compound_literal \
171 )
172
179 CCC_Priority_queue *priority_queue, CCC_Allocator const *allocator
180);
181
189[[nodiscard]] void *CCC_priority_queue_extract(
190 CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder
191);
192
202 CCC_Priority_queue *priority_queue,
203 CCC_Priority_queue_node *type_intruder,
204 CCC_Allocator const *allocator
205);
206
219 CCC_Priority_queue *priority_queue,
220 CCC_Priority_queue_node *type_intruder,
221 CCC_Modifier const *modifier
222);
223
251#define CCC_priority_queue_update_with( \
252 priority_queue_pointer, \
253 closure_parameter, \
254 update_closure_over_closure_parameter... \
255) \
256 CCC_private_priority_queue_update_with( \
257 priority_queue_pointer, \
258 closure_parameter, \
259 update_closure_over_closure_parameter \
260 )
261
279 CCC_Priority_queue *priority_queue,
280 CCC_Priority_queue_node *type_intruder,
281 CCC_Modifier const *modifier
282);
283
317#define CCC_priority_queue_increase_with( \
318 priority_queue_pointer, \
319 closure_parameter, \
320 increase_closure_over_closure_parameter... \
321) \
322 CCC_private_priority_queue_increase_with( \
323 priority_queue_pointer, \
324 closure_parameter, \
325 increase_closure_over_closure_parameter \
326 )
327
343 CCC_Priority_queue *priority_queue,
344 CCC_Priority_queue_node *type_intruder,
345 CCC_Modifier const *modifier
346);
347
381#define CCC_priority_queue_decrease_with( \
382 priority_queue_pointer, \
383 closure_parameter, \
384 decrease_closure_over_closure_parameter... \
385) \
386 CCC_private_priority_queue_decrease_with( \
387 priority_queue_pointer, \
388 closure_parameter, \
389 decrease_closure_over_closure_parameter \
390 )
391
404 CCC_Priority_queue *priority_queue,
405 CCC_Destructor const *destructor,
406 CCC_Allocator const *allocator
407);
408
418[[nodiscard]] void *
420
425[[nodiscard]] CCC_Tribool
427
432[[nodiscard]] CCC_Count
434
439[[nodiscard]] CCC_Tribool
441
445[[nodiscard]] CCC_Order
447
452#ifdef PRIORITY_QUEUE_USING_NAMESPACE_CCC
453/* NOLINTBEGIN(readability-identifier-naming) */
454typedef CCC_Priority_queue_node Priority_queue_node;
455typedef CCC_Priority_queue Priority_queue;
456# define priority_queue_default(arguments...) \
457 CCC_priority_queue_default(arguments)
458# define priority_queue_for(arguments...) CCC_priority_queue_for(arguments)
459# define priority_queue_from(arguments...) CCC_priority_queue_from(arguments)
460# define priority_queue_front(arguments...) \
461 CCC_priority_queue_front(arguments)
462# define priority_queue_push(arguments...) CCC_priority_queue_push(arguments)
463# define priority_queue_emplace(arguments...) \
464 CCC_priority_queue_emplace(arguments)
465# define priority_queue_pop(arguments...) CCC_priority_queue_pop(arguments)
466# define priority_queue_extract(arguments...) \
467 CCC_priority_queue_extract(arguments)
468# define priority_queue_is_empty(arguments...) \
469 CCC_priority_queue_is_empty(arguments)
470# define priority_queue_count(arguments...) \
471 CCC_priority_queue_count(arguments)
472# define priority_queue_update(arguments...) \
473 CCC_priority_queue_update(arguments)
474# define priority_queue_increase(arguments...) \
475 CCC_priority_queue_increase(arguments)
476# define priority_queue_decrease(arguments...) \
477 CCC_priority_queue_decrease(arguments)
478# define priority_queue_update_with(arguments...) \
479 CCC_priority_queue_update_with(arguments)
480# define priority_queue_increase_with(arguments...) \
481 CCC_priority_queue_increase_with(arguments)
482# define priority_queue_decrease_with(arguments...) \
483 CCC_priority_queue_decrease_with(arguments)
484# define priority_queue_order(arguments...) \
485 CCC_priority_queue_order(arguments)
486# define priority_queue_clear(arguments...) \
487 CCC_priority_queue_clear(arguments)
488# define priority_queue_validate(arguments...) \
489 CCC_priority_queue_validate(arguments)
490/* NOLINTEND(readability-identifier-naming) */
491#endif /* PRIORITY_QUEUE_USING_NAMESPACE_CCC */
492
493#endif /* CCC_PRIORITY_QUEUE_H */
void * CCC_priority_queue_update(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Modifier const *modifier)
Update the priority in the user type_intruder wrapping elem.
CCC_Result CCC_priority_queue_erase(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Allocator const *allocator)
Erase type_intruder from the priority_queue. Amortized O(lgN).
CCC_Count CCC_priority_queue_count(CCC_Priority_queue const *priority_queue)
Returns the count of priority queue occupied nodes.
CCC_Tribool CCC_priority_queue_validate(CCC_Priority_queue const *priority_queue)
Verifies the internal invariants of the priority_queue hold.
void * CCC_priority_queue_front(CCC_Priority_queue const *priority_queue)
Obtain a reference to the front of the priority queue. O(1).
void * CCC_priority_queue_extract(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder)
void * CCC_priority_queue_push(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Allocator const *allocator)
Adds an element to the priority queue in correct total order. O(1).
void * CCC_priority_queue_decrease(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Modifier const *modifier)
Decreases the value of the type_intruder wrapping elem. O(1) or O(lgN)
void * CCC_priority_queue_increase(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Modifier const *modifier)
Increases the priority of the type_intruder wrapping elem. O(1) or O(lgN)
CCC_Result CCC_priority_queue_pop(CCC_Priority_queue *priority_queue, CCC_Allocator const *allocator)
Pops the front element from the priority queue. Amortized O(lgN).
CCC_Tribool CCC_priority_queue_is_empty(CCC_Priority_queue const *priority_queue)
Returns true if the priority queue is empty false if not. O(1).
CCC_Result CCC_priority_queue_clear(CCC_Priority_queue *priority_queue, CCC_Destructor const *destructor, CCC_Allocator const *allocator)
Removes all elements from the priority_queue, freeing if needed.
CCC_Order CCC_priority_queue_order(CCC_Priority_queue const *priority_queue)
Return the order used to initialize the priority_queue.
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:376
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
The type passed by reference to any container function that may need to modify elements....
Definition: types.h:436
Definition: private_priority_queue.h:33
Definition: private_priority_queue.h:85
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