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
25/* NOLINTBEGIN(readability-identifier-naming) */
26
34{
41 size_t front;
42};
43
44/*======================= Private Interface ============================*/
45
47void *CCC_private_flat_double_ended_queue_allocate_front(
50void *CCC_private_flat_double_ended_queue_allocate_back(
52
53/*======================= Macro Implementations ==========================*/
54
56#define CCC_private_flat_double_ended_queue_initialize( \
57 private_type_name, private_allocate, private_context_data, \
58 private_capacity, private_count, private_data_pointer...) \
59 { \
60 .buffer = CCC_buffer_initialize( \
61 private_type_name, private_allocate, private_context_data, \
62 private_capacity, private_count, private_data_pointer), \
63 .front = 0, \
64 }
65
67#define CCC_private_flat_double_ended_queue_with_allocator(private_type_name, \
68 private_allocate) \
69 { \
70 .buffer \
71 = CCC_buffer_with_allocator(private_type_name, private_allocate), \
72 .front = 0, \
73 }
74
76#define CCC_private_flat_double_ended_queue_with_context_allocator( \
77 private_type_name, private_allocate, private_context) \
78 { \
79 .buffer = CCC_buffer_with_context_allocator( \
80 private_type_name, private_allocate, private_context), \
81 .front = 0, \
82 }
83
85#define CCC_private_flat_double_ended_queue_from( \
86 private_allocate, private_context_data, private_optional_capacity, \
87 private_compound_literal_array...) \
88 (__extension__({ \
89 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
90 .buffer = CCC_buffer_from(private_allocate, private_context_data, \
91 private_optional_capacity, \
92 private_compound_literal_array), \
93 .front = 0, \
94 }; \
95 private_flat_double_ended_queue; \
96 }))
97
98#define CCC_private_flat_double_ended_queue_with_capacity( \
99 private_type_name, private_allocate, private_context_data, \
100 private_capacity) \
101 (__extension__({ \
102 struct CCC_Flat_double_ended_queue private_flat_double_ended_queue = { \
103 .buffer = CCC_buffer_with_capacity( \
104 private_type_name, private_allocate, private_context_data, \
105 private_capacity), \
106 .front = 0, \
107 }; \
108 private_flat_double_ended_queue; \
109 }))
110
112#define CCC_private_flat_double_ended_queue_with_compound_literal( \
113 private_count, private_compound_literal...) \
114 { \
115 .buffer = CCC_buffer_with_compound_literal(private_count, \
116 private_compound_literal), \
117 .front = 0, \
118 }
119
121#define CCC_private_flat_double_ended_queue_with_context_compound_literal( \
122 private_context, private_count, private_compound_literal...) \
123 { \
124 .buffer = CCC_buffer_with_context_compound_literal( \
125 private_context, private_count, private_compound_literal), \
126 .front = 0, \
127 }
128
130#define CCC_private_flat_double_ended_queue_emplace_back( \
131 flat_double_ended_queue_pointer, value...) \
132 (__extension__({ \
133 __auto_type private_flat_double_ended_queue_pointer \
134 = (flat_double_ended_queue_pointer); \
135 void *const private_flat_double_ended_queue_emplace_ret = NULL; \
136 if (private_flat_double_ended_queue_pointer) \
137 { \
138 void *const private_flat_double_ended_queue_emplace_ret \
139 = CCC_private_flat_double_ended_queue_allocate_back( \
140 private_flat_double_ended_queue_pointer); \
141 if (private_flat_double_ended_queue_emplace_ret) \
142 { \
143 *((typeof(value) *) \
144 private_flat_double_ended_queue_emplace_ret) \
145 = value; \
146 } \
147 } \
148 private_flat_double_ended_queue_emplace_ret; \
149 }))
150
152#define CCC_private_flat_double_ended_queue_emplace_front( \
153 flat_double_ended_queue_pointer, value...) \
154 (__extension__({ \
155 __auto_type private_flat_double_ended_queue_pointer \
156 = (flat_double_ended_queue_pointer); \
157 void *const private_flat_double_ended_queue_emplace_ret = NULL; \
158 if (private_flat_double_ended_queue_pointer) \
159 { \
160 void *const private_flat_double_ended_queue_emplace_ret \
161 = CCC_private_flat_double_ended_queue_allocate_front( \
162 private_flat_double_ended_queue_pointer); \
163 if (private_flat_double_ended_queue_emplace_ret) \
164 { \
165 *((typeof(value) *) \
166 private_flat_double_ended_queue_emplace_ret) \
167 = value; \
168 } \
169 } \
170 private_flat_double_ended_queue_emplace_ret; \
171 }))
172
173/* NOLINTEND(readability-identifier-naming) */
174
175#endif /* CCC_PRIVATE_FLAT_DOUBLE_ENDED_QUEUE_H */
Definition: private_buffer.h:34
Definition: private_flat_double_ended_queue.h:34
size_t front
Definition: private_flat_double_ended_queue.h:41
CCC_Buffer buffer
Definition: private_flat_double_ended_queue.h:38