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
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, \
89 context_data)
90
104#define CCC_priority_queue_from(type_intruder_field, order, compare, allocate, \
105 destroy, context_data, \
106 compound_literal_array...) \
107 CCC_private_priority_queue_from(type_intruder_field, order, compare, \
108 allocate, destroy, context_data, \
109 compound_literal_array)
110
128[[nodiscard]] void *
130 CCC_Priority_queue_node *type_intruder);
131
142#define CCC_priority_queue_emplace(Priority_queue_pointer, \
143 type_compound_literal...) \
144 CCC_private_priority_queue_emplace(Priority_queue_pointer, \
145 type_compound_literal)
146
152
160[[nodiscard]] void *
162 CCC_Priority_queue_node *type_intruder);
163
172 CCC_Priority_queue_node *type_intruder);
173
187 CCC_Priority_queue_node *type_intruder,
188 CCC_Type_modifier *modify, void *context);
189
220#define CCC_priority_queue_update_with(priority_queue_pointer, type_pointer, \
221 update_closure_over_T...) \
222 CCC_private_priority_queue_update_with( \
223 priority_queue_pointer, type_pointer, update_closure_over_T)
224
244 CCC_Priority_queue_node *type_intruder,
245 CCC_Type_modifier *modify, void *context);
246
283#define CCC_priority_queue_increase_with(priority_queue_pointer, type_pointer, \
284 increase_closure_over_T...) \
285 CCC_private_priority_queue_increase_with( \
286 priority_queue_pointer, type_pointer, increase_closure_over_T)
287
305 CCC_Priority_queue_node *type_intruder,
306 CCC_Type_modifier *modify, void *context);
307
344#define CCC_priority_queue_decrease_with(priority_queue_pointer, type_pointer, \
345 decrease_closure_over_T...) \
346 CCC_private_priority_queue_decrease_with( \
347 priority_queue_pointer, type_pointer, decrease_closure_over_T)
348
369 CCC_Type_destructor *destroy);
370
380[[nodiscard]] void *
382
387[[nodiscard]] CCC_Tribool
389
394[[nodiscard]] CCC_Count
396
401[[nodiscard]] CCC_Tribool
403
407[[nodiscard]] CCC_Order
409
414#ifdef PRIORITY_QUEUE_USING_NAMESPACE_CCC
415typedef CCC_Priority_queue_node priority_queue_node;
416typedef CCC_Priority_queue Priority_queue;
417# define priority_queue_initialize(args...) \
418 CCC_priority_queue_initialize(args)
419# define priority_queue_from(args...) CCC_priority_queue_from(args)
420# define priority_queue_front(args...) CCC_priority_queue_front(args)
421# define priority_queue_push(args...) CCC_priority_queue_push(args)
422# define priority_queue_emplace(args...) CCC_priority_queue_emplace(args)
423# define priority_queue_pop(args...) CCC_priority_queue_pop(args)
424# define priority_queue_extract(args...) CCC_priority_queue_extract(args)
425# define priority_queue_is_empty(args...) CCC_priority_queue_is_empty(args)
426# define priority_queue_count(args...) CCC_priority_queue_count(args)
427# define priority_queue_update(args...) CCC_priority_queue_update(args)
428# define priority_queue_increase(args...) CCC_priority_queue_increase(args)
429# define priority_queue_decrease(args...) CCC_priority_queue_decrease(args)
430# define priority_queue_update_with(args...) \
431 CCC_priority_queue_update_with(args)
432# define priority_queue_increase_with(args...) \
433 CCC_priority_queue_increase_with(args)
434# define priority_queue_decrease_with(args...) \
435 CCC_priority_queue_decrease_with(args)
436# define priority_queue_order(args...) CCC_priority_queue_order(args)
437# define priority_queue_clear(args...) CCC_priority_queue_clear(args)
438# define priority_queue_validate(args...) CCC_priority_queue_validate(args)
439#endif /* PRIORITY_QUEUE_USING_NAMESPACE_CCC */
440
441#endif /* CCC_PRIORITY_QUEUE_H */
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