priority_queue.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2013-2014 Freie Universität Berlin
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
18 #include <stddef.h>
19 #include <stdint.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
28 typedef struct priority_queue_node {
30  uint32_t priority;
31  uintptr_t data;
33 
37 typedef struct {
40 
44 #define PRIORITY_QUEUE_NODE_INIT { NULL, 0, 0 }
45 
49 #define PRIORITY_QUEUE_DATA_SIGNALING (UINTPTR_MAX)
50 
59 static inline void priority_queue_node_init(
61 {
63 
64  *priority_queue_node = qn;
65 }
66 
70 #define PRIORITY_QUEUE_INIT { NULL }
71 
80 static inline void priority_queue_init(priority_queue_t *priority_queue)
81 {
83 
84  *priority_queue = q;
85 }
86 
95 
108 
116 
117 #if ENABLE_DEBUG
124 
131 #endif
132 
133 #ifdef __cplusplus
134 }
135 #endif
136 
#define PRIORITY_QUEUE_INIT
Static initializer for priority_queue_t.
void priority_queue_print(priority_queue_t *root)
print the data and priority of every node in the given priority queue
static void priority_queue_init(priority_queue_t *priority_queue)
Initialize a priority queue object.
struct priority_queue_node priority_queue_node_t
data type for priority queue nodes
priority_queue_node_t * priority_queue_remove_head(priority_queue_t *root)
remove the priority queue's head
void priority_queue_print_node(priority_queue_t *root)
print the data, priority, and successor of a given node
void priority_queue_remove(priority_queue_t *root, priority_queue_node_t *node)
remove node from root
#define PRIORITY_QUEUE_NODE_INIT
Static initializer for priority_queue_node_t.
void priority_queue_add(priority_queue_t *root, priority_queue_node_t *new_obj)
insert new_obj into root based on its priority
static void priority_queue_node_init(priority_queue_node_t *priority_queue_node)
Initialize a priority queue node object.
data type for priority queue nodes
uintptr_t data
queue node data
struct priority_queue_node * next
next queue node
uint32_t priority
queue node priority
data type for priority queues
priority_queue_node_t * first
first queue node