Update call-rcu.h and defer.h comments and include guards
[urcu.git] / src / wfcqueue.c
1 /*
2 * wfcqueue.c
3 *
4 * Userspace RCU library - Concurrent Queue with Wait-Free Enqueue/Blocking Dequeue
5 *
6 * Copyright 2010-2012 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
7 * Copyright 2011-2012 - Lai Jiangshan <laijs@cn.fujitsu.com>
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
25 #include "urcu/wfcqueue.h"
26 #include "urcu/static/wfcqueue.h"
27
28 /*
29 * library wrappers to be used by non-LGPL compatible source code.
30 */
31
32 void cds_wfcq_node_init(struct cds_wfcq_node *node)
33 {
34 _cds_wfcq_node_init(node);
35 }
36
37 void cds_wfcq_init(struct cds_wfcq_head *head,
38 struct cds_wfcq_tail *tail)
39 {
40 _cds_wfcq_init(head, tail);
41 }
42
43 void cds_wfcq_destroy(struct cds_wfcq_head *head,
44 struct cds_wfcq_tail *tail)
45 {
46 _cds_wfcq_destroy(head, tail);
47 }
48
49 void __cds_wfcq_init(struct __cds_wfcq_head *head,
50 struct cds_wfcq_tail *tail)
51 {
52 ___cds_wfcq_init(head, tail);
53 }
54
55 bool cds_wfcq_empty(cds_wfcq_head_ptr_t head,
56 struct cds_wfcq_tail *tail)
57
58 {
59 return _cds_wfcq_empty(head, tail);
60 }
61
62 bool cds_wfcq_enqueue(cds_wfcq_head_ptr_t head,
63 struct cds_wfcq_tail *tail,
64 struct cds_wfcq_node *node)
65 {
66 return _cds_wfcq_enqueue(head, tail, node);
67 }
68
69 void cds_wfcq_dequeue_lock(struct cds_wfcq_head *head,
70 struct cds_wfcq_tail *tail)
71 {
72 _cds_wfcq_dequeue_lock(head, tail);
73 }
74
75 void cds_wfcq_dequeue_unlock(struct cds_wfcq_head *head,
76 struct cds_wfcq_tail *tail)
77 {
78 _cds_wfcq_dequeue_unlock(head, tail);
79 }
80
81 struct cds_wfcq_node *cds_wfcq_dequeue_blocking(
82 struct cds_wfcq_head *head,
83 struct cds_wfcq_tail *tail)
84 {
85 return _cds_wfcq_dequeue_blocking(head, tail);
86 }
87
88 struct cds_wfcq_node *cds_wfcq_dequeue_with_state_blocking(
89 struct cds_wfcq_head *head,
90 struct cds_wfcq_tail *tail,
91 int *state)
92 {
93 return _cds_wfcq_dequeue_with_state_blocking(head, tail, state);
94 }
95
96 enum cds_wfcq_ret cds_wfcq_splice_blocking(
97 struct cds_wfcq_head *dest_q_head,
98 struct cds_wfcq_tail *dest_q_tail,
99 struct cds_wfcq_head *src_q_head,
100 struct cds_wfcq_tail *src_q_tail)
101 {
102 return _cds_wfcq_splice_blocking(dest_q_head, dest_q_tail,
103 src_q_head, src_q_tail);
104 }
105
106 struct cds_wfcq_node *__cds_wfcq_dequeue_blocking(
107 cds_wfcq_head_ptr_t head,
108 struct cds_wfcq_tail *tail)
109 {
110 return ___cds_wfcq_dequeue_blocking(head, tail);
111 }
112
113 struct cds_wfcq_node *__cds_wfcq_dequeue_with_state_blocking(
114 cds_wfcq_head_ptr_t head,
115 struct cds_wfcq_tail *tail,
116 int *state)
117 {
118 return ___cds_wfcq_dequeue_with_state_blocking(head, tail, state);
119 }
120
121 struct cds_wfcq_node *__cds_wfcq_dequeue_nonblocking(
122 cds_wfcq_head_ptr_t head,
123 struct cds_wfcq_tail *tail)
124 {
125 return ___cds_wfcq_dequeue_nonblocking(head, tail);
126 }
127
128 struct cds_wfcq_node *__cds_wfcq_dequeue_with_state_nonblocking(
129 cds_wfcq_head_ptr_t head,
130 struct cds_wfcq_tail *tail,
131 int *state)
132 {
133 return ___cds_wfcq_dequeue_with_state_nonblocking(head, tail, state);
134 }
135
136 enum cds_wfcq_ret __cds_wfcq_splice_blocking(
137 cds_wfcq_head_ptr_t dest_q_head,
138 struct cds_wfcq_tail *dest_q_tail,
139 cds_wfcq_head_ptr_t src_q_head,
140 struct cds_wfcq_tail *src_q_tail)
141 {
142 return ___cds_wfcq_splice_blocking(dest_q_head, dest_q_tail,
143 src_q_head, src_q_tail);
144 }
145
146 enum cds_wfcq_ret __cds_wfcq_splice_nonblocking(
147 cds_wfcq_head_ptr_t dest_q_head,
148 struct cds_wfcq_tail *dest_q_tail,
149 cds_wfcq_head_ptr_t src_q_head,
150 struct cds_wfcq_tail *src_q_tail)
151 {
152 return ___cds_wfcq_splice_nonblocking(dest_q_head, dest_q_tail,
153 src_q_head, src_q_tail);
154 }
155
156 struct cds_wfcq_node *__cds_wfcq_first_blocking(
157 cds_wfcq_head_ptr_t head,
158 struct cds_wfcq_tail *tail)
159 {
160 return ___cds_wfcq_first_blocking(head, tail);
161 }
162
163 struct cds_wfcq_node *__cds_wfcq_first_nonblocking(
164 cds_wfcq_head_ptr_t head,
165 struct cds_wfcq_tail *tail)
166 {
167 return ___cds_wfcq_first_nonblocking(head, tail);
168 }
169
170 struct cds_wfcq_node *__cds_wfcq_next_blocking(
171 cds_wfcq_head_ptr_t head,
172 struct cds_wfcq_tail *tail,
173 struct cds_wfcq_node *node)
174 {
175 return ___cds_wfcq_next_blocking(head, tail, node);
176 }
177
178 struct cds_wfcq_node *__cds_wfcq_next_nonblocking(
179 cds_wfcq_head_ptr_t head,
180 struct cds_wfcq_tail *tail,
181 struct cds_wfcq_node *node)
182 {
183 return ___cds_wfcq_next_nonblocking(head, tail, node);
184 }
This page took 0.031953 seconds and 4 git commands to generate.