33#ifndef CCC_PRIORITY_QUEUE_H
34#define CCC_PRIORITY_QUEUE_H
40#include "private/private_priority_queue.h"
83#define CCC_priority_queue_default( \
84 type_name, type_intruder_field, order, comparator \
86 CCC_private_priority_queue_for( \
87 type_name, type_intruder_field, order, comparator \
99#define CCC_priority_queue_for( \
100 type_name, type_intruder_field, order, comparator... \
102 CCC_private_priority_queue_for( \
103 type_name, type_intruder_field, order, comparator \
115#define CCC_priority_queue_from( \
116 type_intruder_field, \
121 compound_literal_array... \
123 CCC_private_priority_queue_from( \
124 type_intruder_field, \
129 compound_literal_array \
166#define CCC_priority_queue_emplace( \
167 priority_queue_pointer, allocator_pointer, type_compound_literal... \
169 CCC_private_priority_queue_emplace( \
170 priority_queue_pointer, allocator_pointer, type_compound_literal \
251#define CCC_priority_queue_update_with( \
252 priority_queue_pointer, \
254 update_closure_over_closure_parameter... \
256 CCC_private_priority_queue_update_with( \
257 priority_queue_pointer, \
259 update_closure_over_closure_parameter \
317#define CCC_priority_queue_increase_with( \
318 priority_queue_pointer, \
320 increase_closure_over_closure_parameter... \
322 CCC_private_priority_queue_increase_with( \
323 priority_queue_pointer, \
325 increase_closure_over_closure_parameter \
381#define CCC_priority_queue_decrease_with( \
382 priority_queue_pointer, \
384 decrease_closure_over_closure_parameter... \
386 CCC_private_priority_queue_decrease_with( \
387 priority_queue_pointer, \
389 decrease_closure_over_closure_parameter \
452#ifdef PRIORITY_QUEUE_USING_NAMESPACE_CCC
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)
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