33#ifndef CCC_PRIORITY_QUEUE_H
34#define CCC_PRIORITY_QUEUE_H
40#include "private/private_priority_queue.h"
85#define CCC_priority_queue_initialize(struct_name, type_intruder_field, order, \
86 compare, allocate, context_data) \
87 CCC_private_priority_queue_initialize(struct_name, type_intruder_field, \
88 order, compare, allocate, \
103#define CCC_priority_queue_with_allocator(struct_name, type_intruder_field, \
104 order, compare, allocate) \
105 CCC_private_priority_queue_with_allocator( \
106 struct_name, type_intruder_field, order, compare, allocate)
122#define CCC_priority_queue_with_context_allocator( \
123 struct_name, type_intruder_field, order, compare, allocate, context) \
124 CCC_private_priority_queue_with_context_allocator( \
125 struct_name, type_intruder_field, order, compare, allocate, context)
140#define CCC_priority_queue_from(type_intruder_field, order, compare, allocate, \
141 destroy, context_data, \
142 compound_literal_array...) \
143 CCC_private_priority_queue_from(type_intruder_field, order, compare, \
144 allocate, destroy, context_data, \
145 compound_literal_array)
178#define CCC_priority_queue_emplace(Priority_queue_pointer, \
179 type_compound_literal...) \
180 CCC_private_priority_queue_emplace(Priority_queue_pointer, \
181 type_compound_literal)
256#define CCC_priority_queue_update_with(priority_queue_pointer, type_pointer, \
257 update_closure_over_T...) \
258 CCC_private_priority_queue_update_with( \
259 priority_queue_pointer, type_pointer, update_closure_over_T)
319#define CCC_priority_queue_increase_with(priority_queue_pointer, type_pointer, \
320 increase_closure_over_T...) \
321 CCC_private_priority_queue_increase_with( \
322 priority_queue_pointer, type_pointer, increase_closure_over_T)
380#define CCC_priority_queue_decrease_with(priority_queue_pointer, type_pointer, \
381 decrease_closure_over_T...) \
382 CCC_private_priority_queue_decrease_with( \
383 priority_queue_pointer, type_pointer, decrease_closure_over_T)
450#ifdef PRIORITY_QUEUE_USING_NAMESPACE_CCC
453# define priority_queue_initialize(arguments...) \
454 CCC_priority_queue_initialize(arguments)
455# define priority_queue_from(arguments...) CCC_priority_queue_from(arguments)
456# define priority_queue_front(arguments...) \
457 CCC_priority_queue_front(arguments)
458# define priority_queue_push(arguments...) CCC_priority_queue_push(arguments)
459# define priority_queue_emplace(arguments...) \
460 CCC_priority_queue_emplace(arguments)
461# define priority_queue_pop(arguments...) CCC_priority_queue_pop(arguments)
462# define priority_queue_extract(arguments...) \
463 CCC_priority_queue_extract(arguments)
464# define priority_queue_is_empty(arguments...) \
465 CCC_priority_queue_is_empty(arguments)
466# define priority_queue_count(arguments...) \
467 CCC_priority_queue_count(arguments)
468# define priority_queue_update(arguments...) \
469 CCC_priority_queue_update(arguments)
470# define priority_queue_increase(arguments...) \
471 CCC_priority_queue_increase(arguments)
472# define priority_queue_decrease(arguments...) \
473 CCC_priority_queue_decrease(arguments)
474# define priority_queue_update_with(arguments...) \
475 CCC_priority_queue_update_with(arguments)
476# define priority_queue_increase_with(arguments...) \
477 CCC_priority_queue_increase_with(arguments)
478# define priority_queue_decrease_with(arguments...) \
479 CCC_priority_queue_decrease_with(arguments)
480# define priority_queue_order(arguments...) \
481 CCC_priority_queue_order(arguments)
482# define priority_queue_clear(arguments...) \
483 CCC_priority_queue_clear(arguments)
484# define priority_queue_validate(arguments...) \
485 CCC_priority_queue_validate(arguments)
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.
CCC_Result CCC_priority_queue_erase(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder)
Erase type_intruder from the priority_queue. Amortized O(lgN).
CCC_Result CCC_priority_queue_clear(CCC_Priority_queue *priority_queue, CCC_Type_destructor *destroy)
Removes all elements from the priority_queue, freeing if needed.
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_increase(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Type_modifier *modify, void *context)
Increases the priority of the type_intruder wrapping elem. O(1) or O(lgN)
void * CCC_priority_queue_push(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder)
Adds an element to the priority queue in correct total order. O(1).
void * CCC_priority_queue_extract(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder)
void * CCC_priority_queue_update(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Type_modifier *modify, void *context)
Update the priority in the user type_intruder wrapping elem.
CCC_Result CCC_priority_queue_pop(CCC_Priority_queue *priority_queue)
Pops the front element from the priority queue. Amortized O(lgN).
void * CCC_priority_queue_decrease(CCC_Priority_queue *priority_queue, CCC_Priority_queue_node *type_intruder, CCC_Type_modifier *modify, void *context)
Decreases the value of the type_intruder wrapping elem. O(1) or 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_Order CCC_priority_queue_order(CCC_Priority_queue const *priority_queue)
Return the order used to initialize the priority_queue.
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:202
Definition: private_priority_queue.h:34
Definition: private_priority_queue.h:87
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_Type_modifier(CCC_Type_context)
A callback function for modifying an element in the container.
Definition: types.h:358