C Container Collection (CCC)
Loading...
Searching...
No Matches
private_flat_double_ended_queue.h
1
16#ifndef CCC_PRIVATE_FLAT_DOUBLE_ENDED_QUEUE_H
17#define CCC_PRIVATE_FLAT_DOUBLE_ENDED_QUEUE_H
18
20#include <stddef.h>
23#include "../flat_buffer.h"
24#include "../types.h"
25
26/* NOLINTBEGIN(readability-identifier-naming) */
27
39 size_t front;
40};
41
42/*======================= Private Interface ============================*/
43
45void *CCC_private_flat_double_ended_queue_allocate_front(
47);
49void *CCC_private_flat_double_ended_queue_allocate_back(
51);
52
53/*======================= Macro Implementations ==========================*/
54
56#define CCC_private_flat_double_ended_queue_default(private_type_name) \
57 (struct CCC_Flat_double_ended_queue) { \
58 .buffer = CCC_flat_buffer_default(private_type_name), .front = 0, \
59 }
60
62#define CCC_private_flat_double_ended_queue_for( \
63 private_type_name, \
64 private_capacity, \
65 private_count, \
66 private_data_pointer... \
67) \
68 (struct CCC_Flat_double_ended_queue) { \
69 .buffer = CCC_flat_buffer_for( \
70 private_type_name, \
71 private_capacity, \
72 private_count, \
73 private_data_pointer \
74 ), \
75 .front = 0, \
76 }
77
79#define CCC_private_flat_double_ended_queue_from( \
80 private_allocator, \
81 private_optional_capacity, \
82 private_compound_literal_array... \
83) \
84 (struct { CCC_Flat_double_ended_queue private; }){(__extension__({ \
85 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
86 .buffer = CCC_flat_buffer_from( \
87 private_allocator, \
88 private_optional_capacity, \
89 private_compound_literal_array \
90 ), \
91 .front = 0, \
92 }; \
93 private_flat_double_ended_queue; \
94 }))}.private
95
97#define CCC_private_flat_double_ended_queue_with_capacity( \
98 private_type_name, private_allocator, private_capacity \
99) \
100 (struct { CCC_Flat_double_ended_queue private; }){(__extension__({ \
101 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
102 .buffer = CCC_flat_buffer_with_capacity( \
103 private_type_name, private_allocator, private_capacity \
104 ), \
105 .front = 0, \
106 }; \
107 private_flat_double_ended_queue; \
108 }))}.private
109
111#define CCC_private_flat_double_ended_queue_with_storage( \
112 private_count, private_compound_literal... \
113) \
114 (struct CCC_Flat_double_ended_queue) { \
115 .buffer = CCC_flat_buffer_with_storage( \
116 private_count, private_compound_literal \
117 ), \
118 .front = 0, \
119 }
120
122#define CCC_private_flat_double_ended_queue_emplace_back( \
123 flat_double_ended_queue_pointer, private_allocator_pointer, value... \
124) \
125 (__extension__({ \
126 struct CCC_Flat_double_ended_queue *const \
127 private_flat_double_ended_queue_pointer \
128 = (flat_double_ended_queue_pointer); \
129 void *private_flat_double_ended_queue_emplace_ret = NULL; \
130 if (private_flat_double_ended_queue_pointer) { \
131 private_flat_double_ended_queue_emplace_ret \
132 = CCC_private_flat_double_ended_queue_allocate_back( \
133 private_flat_double_ended_queue_pointer, \
134 private_allocator_pointer \
135 ); \
136 if (private_flat_double_ended_queue_emplace_ret) { \
137 *((typeof(value) *) \
138 private_flat_double_ended_queue_emplace_ret) = value; \
139 } \
140 } \
141 private_flat_double_ended_queue_emplace_ret; \
142 }))
143
145#define CCC_private_flat_double_ended_queue_emplace_front( \
146 flat_double_ended_queue_pointer, private_allocator_pointer, value... \
147) \
148 (__extension__({ \
149 struct CCC_Flat_double_ended_queue *const \
150 private_flat_double_ended_queue_pointer \
151 = (flat_double_ended_queue_pointer); \
152 void *private_flat_double_ended_queue_emplace_ret = NULL; \
153 if (private_flat_double_ended_queue_pointer) { \
154 private_flat_double_ended_queue_emplace_ret \
155 = CCC_private_flat_double_ended_queue_allocate_front( \
156 private_flat_double_ended_queue_pointer, \
157 private_allocator_pointer \
158 ); \
159 if (private_flat_double_ended_queue_emplace_ret) { \
160 *((typeof(value) *) \
161 private_flat_double_ended_queue_emplace_ret) = value; \
162 } \
163 } \
164 private_flat_double_ended_queue_emplace_ret; \
165 }))
166
167/* NOLINTEND(readability-identifier-naming) */
168
169#endif /* CCC_PRIVATE_FLAT_DOUBLE_ENDED_QUEUE_H */
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:369
Definition: private_flat_buffer.h:32
Definition: private_flat_double_ended_queue.h:35
size_t front
Definition: private_flat_double_ended_queue.h:39
CCC_Flat_buffer buffer
Definition: private_flat_double_ended_queue.h:37