16#ifndef CCC_PRIVATE_BUFFER_H
17#define CCC_PRIVATE_BUFFER_H
44#define CCC_private_buffer_default(private_type_name) \
45 (struct CCC_Buffer) { \
46 .sizeof_type = sizeof(private_type_name), \
53#define CCC_private_buffer_for( \
54 private_type_name, private_capacity, private_count, private_data... \
56 (struct CCC_Buffer) { \
57 .data = (private_data), .sizeof_type = sizeof(private_type_name), \
58 .count = (private_count), .capacity = (private_capacity), \
63#define CCC_private_buffer_from( \
65 private_optional_capacity, \
66 private_compound_literal_array... \
68 (struct { struct CCC_Buffer private; }){(__extension__({ \
69 typeof(*private_compound_literal_array) \
70 *private_buffer_initializer_list = private_compound_literal_array; \
71 struct CCC_Buffer private_buf = CCC_private_buffer_default( \
72 typeof(*private_buffer_initializer_list) \
74 size_t const private_n = sizeof(private_compound_literal_array) \
75 / sizeof(*private_buffer_initializer_list); \
76 size_t const private_cap = private_optional_capacity; \
77 if (CCC_buffer_reserve( \
79 (private_n > private_cap ? private_n : private_cap), \
80 &(private_allocator) \
85 private_buffer_initializer_list, \
86 private_n * sizeof(*private_buffer_initializer_list) \
88 private_buf.count = private_n; \
95#define CCC_private_buffer_with_capacity( \
96 private_type_name, private_allocator, private_capacity \
98 (struct { struct CCC_Buffer private; }){(__extension__({ \
99 struct CCC_Buffer private_buf \
100 = CCC_private_buffer_default(private_type_name); \
101 (void)CCC_buffer_reserve( \
102 &private_buf, (private_capacity), &(private_allocator) \
111#if defined(__clang__) || defined(__llvm__)
113# define CCC_private_buffer_with_storage( \
114 private_count, private_compound_literal_array... \
118 sizeof(private_compound_literal_array), \
119 "provide non-zero capacity compound literal array" \
123 <= (sizeof(private_compound_literal_array) \
124 / sizeof(*private_compound_literal_array)), \
125 "provide count less than or equal to capacity of " \
126 "compound literal array" \
128 CCC_Buffer private; \
130 .data = (private_compound_literal_array), \
131 .sizeof_type = sizeof(*private_compound_literal_array), \
132 .count = private_count, \
133 .capacity = sizeof(private_compound_literal_array) \
134 / sizeof(*private_compound_literal_array), \
139# define CCC_private_buffer_with_storage( \
140 private_count, private_compound_literal_array... \
142 (struct CCC_Buffer) { \
143 .data = (private_compound_literal_array), \
144 .sizeof_type = sizeof(*private_compound_literal_array), \
145 .count = private_count, \
146 .capacity = sizeof(private_compound_literal_array) \
147 / sizeof(*private_compound_literal_array), \
152#define CCC_private_buffer_emplace( \
153 private_buffer_pointer, index, private_type_compound_literal... \
156 typeof(private_type_compound_literal) *private_buffer_res = NULL; \
157 __auto_type private_i = (index); \
159 = CCC_buffer_at((private_buffer_pointer), private_i); \
160 if (private_buffer_res) { \
161 *private_buffer_res = private_type_compound_literal; \
163 private_buffer_res; \
167#define CCC_private_buffer_emplace_back( \
168 private_buffer_pointer, \
169 private_allocator_pointer, \
170 private_type_compound_literal... \
173 typeof(private_type_compound_literal) *private_buffer_res = NULL; \
174 private_buffer_res = CCC_buffer_allocate_back( \
175 (private_buffer_pointer), (private_allocator_pointer) \
177 if (private_buffer_res) { \
178 *private_buffer_res = private_type_compound_literal; \
180 private_buffer_res; \
Definition: private_buffer.h:32
size_t capacity
Definition: private_buffer.h:38
size_t count
Definition: private_buffer.h:36
size_t sizeof_type
Definition: private_buffer.h:40
void * data
Definition: private_buffer.h:34