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 "../buffer.h"
24#include "../types.h"
25
26/* NOLINTBEGIN(readability-identifier-naming) */
27
38 size_t front;
39};
40
41/*======================= Private Interface ============================*/
42
44void *CCC_private_flat_double_ended_queue_allocate_front(
46);
48void *CCC_private_flat_double_ended_queue_allocate_back(
50);
51
52/*======================= Macro Implementations ==========================*/
53
55#define CCC_private_flat_double_ended_queue_default(private_type_name) \
56 (struct CCC_Flat_double_ended_queue) { \
57 .buffer = CCC_buffer_default(private_type_name), .front = 0, \
58 }
59
61#define CCC_private_flat_double_ended_queue_for( \
62 private_type_name, \
63 private_capacity, \
64 private_count, \
65 private_data_pointer... \
66) \
67 (struct CCC_Flat_double_ended_queue) { \
68 .buffer = CCC_buffer_for( \
69 private_type_name, \
70 private_capacity, \
71 private_count, \
72 private_data_pointer \
73 ), \
74 .front = 0, \
75 }
76
78#define CCC_private_flat_double_ended_queue_from( \
79 private_allocator, \
80 private_optional_capacity, \
81 private_compound_literal_array... \
82) \
83 (struct { CCC_Flat_double_ended_queue private; }){(__extension__({ \
84 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
85 .buffer = CCC_buffer_from( \
86 private_allocator, \
87 private_optional_capacity, \
88 private_compound_literal_array \
89 ), \
90 .front = 0, \
91 }; \
92 private_flat_double_ended_queue; \
93 }))}.private
94
96#define CCC_private_flat_double_ended_queue_with_capacity( \
97 private_type_name, private_allocator, private_capacity \
98) \
99 (struct { CCC_Flat_double_ended_queue private; }){(__extension__({ \
100 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
101 .buffer = CCC_buffer_with_capacity( \
102 private_type_name, private_allocator, private_capacity \
103 ), \
104 .front = 0, \
105 }; \
106 private_flat_double_ended_queue; \
107 }))}.private
108
110#define CCC_private_flat_double_ended_queue_with_storage( \
111 private_count, private_compound_literal... \
112) \
113 (struct CCC_Flat_double_ended_queue) { \
114 .buffer = CCC_buffer_with_storage( \
115 private_count, private_compound_literal \
116 ), \
117 .front = 0, \
118 }
119
121#define CCC_private_flat_double_ended_queue_emplace_back( \
122 flat_double_ended_queue_pointer, private_allocator_pointer, value... \
123) \
124 (__extension__({ \
125 __auto_type private_flat_double_ended_queue_pointer \
126 = (flat_double_ended_queue_pointer); \
127 void *private_flat_double_ended_queue_emplace_ret = NULL; \
128 if (private_flat_double_ended_queue_pointer) { \
129 private_flat_double_ended_queue_emplace_ret \
130 = CCC_private_flat_double_ended_queue_allocate_back( \
131 private_flat_double_ended_queue_pointer, \
132 private_allocator_pointer \
133 ); \
134 if (private_flat_double_ended_queue_emplace_ret) { \
135 *((typeof(value) *) \
136 private_flat_double_ended_queue_emplace_ret) = value; \
137 } \
138 } \
139 private_flat_double_ended_queue_emplace_ret; \
140 }))
141
143#define CCC_private_flat_double_ended_queue_emplace_front( \
144 flat_double_ended_queue_pointer, private_allocator_pointer, value... \
145) \
146 (__extension__({ \
147 __auto_type private_flat_double_ended_queue_pointer \
148 = (flat_double_ended_queue_pointer); \
149 void *private_flat_double_ended_queue_emplace_ret = NULL; \
150 if (private_flat_double_ended_queue_pointer) { \
151 private_flat_double_ended_queue_emplace_ret \
152 = CCC_private_flat_double_ended_queue_allocate_front( \
153 private_flat_double_ended_queue_pointer, \
154 private_allocator_pointer \
155 ); \
156 if (private_flat_double_ended_queue_emplace_ret) { \
157 *((typeof(value) *) \
158 private_flat_double_ended_queue_emplace_ret) = value; \
159 } \
160 } \
161 private_flat_double_ended_queue_emplace_ret; \
162 }))
163
164/* NOLINTEND(readability-identifier-naming) */
165
166#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:376
Definition: private_buffer.h:32
Definition: private_flat_double_ended_queue.h:34
size_t front
Definition: private_flat_double_ended_queue.h:38
CCC_Buffer buffer
Definition: private_flat_double_ended_queue.h:36