Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_list.h
Go to the documentation of this file.
1 // See the 'COPYING' file in the project root for licensing information.
2 /*
3  * Adaptive Framework afw_list interface helper header
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
9 #ifndef __AFW_LIST_H__
10 #define __AFW_LIST_H__
11 
12 #include "afw_interface.h"
13 
28 
29 #define AFW_LIST_ERROR_OBJECT_IMMUTABLE \
30 AFW_THROW_ERROR_Z(read_only, "List immutable", xctx)
31 
32 
45 AFW_DECLARE(const afw_list_t *)
47  int options,
48  const afw_data_type_t *data_type,
49  const afw_pool_t *p,
50  afw_xctx_t *xctx);
51 
52 
64 #define afw_list_of_create(data_type, p, xctx) \
65  afw_list_create_with_options(0, data_type, p, xctx)
66 
67 
68 
81 #define afw_list_create_generic(p, xctx) \
82  afw_list_create_with_options(0, NULL, p, xctx)
83 
84 
85 
94 AFW_DECLARE(const afw_list_t *)
96  const afw_object_t *const *objects,
97  afw_size_t count,
98  const afw_pool_t *p,
99  afw_xctx_t *xctx);
100 
101 
102 
111 AFW_DECLARE(const afw_list_t *)
113  const afw_value_t *const *values,
114  afw_size_t count,
115  const afw_pool_t *p,
116  afw_xctx_t *xctx);
117 
118 
119 
127 AFW_DECLARE(const afw_list_t *)
129  const afw_object_t *const *objects,
130  const afw_pool_t *p,
131  afw_xctx_t *xctx);
132 
133 
134 
142 AFW_DECLARE(const afw_list_t *)
144  const afw_value_t *const *values,
145  const afw_pool_t *p,
146  afw_xctx_t *xctx);
147 
148 
149 
161 AFW_DECLARE(const afw_list_t *)
163  const afw_list_t *list,
164  const afw_data_type_t *data_type,
165  afw_boolean_t clone_values,
166  const afw_pool_t *p, afw_xctx_t *xctx);
167 
168 
169 
178 AFW_DECLARE(const afw_list_t *)
180  const afw_data_type_t *data_type,
181  const afw_value_t *value,
182  const afw_pool_t *p, afw_xctx_t *xctx);
183 
184 
185 
193 AFW_DECLARE(const afw_list_t *)
195  const afw_list_t *list,
196  const afw_pool_t *p,
197  afw_xctx_t *xctx);
198 
199 
217 AFW_DEFINE(const afw_list_t *)
219  const void *array,
220  afw_boolean_t indirect,
221  const afw_data_type_t *data_type,
222  afw_size_t count,
223  const afw_pool_t *p,
224  afw_xctx_t *xctx);
225 
226 
227 
238  const afw_list_inf_t *inf;
239  const afw_data_type_t *data_type;
240  afw_size_t count;
241  const void *internal;
242  const afw_pool_t *p;
243  afw_boolean_t indirect;
245 
246 
247 
255 
256 
257 
276 #define AFW_LIST_INITIALIZE_WRAPPER_FOR_ARRAY( \
277 instance, _internal, _indirect, _data_type, _count) \
278  (instance)->inf = &afw_list_wrapper_for_array_inf; \
279  (instance)->p = NULL; \
280  (instance)->internal = _internal; \
281  (instance)->indirect = _indirect; \
282  (instance)->data_type = _data_type; \
283  (instance)->count = _count
284 
285 
297 #define AFW_LIST_INITIALIZE_WRAPPER_FOR_ARRAY_P(instance, \
298 _internal, _indirect, _data_type, _count, _p) \
299  (instance)->inf = &afw_list_wrapper_for_array_inf; \
300  (instance)->p = _p; \
301  (instance)->internal = _internal; \
302  (instance)->indirect = _indirect; \
303  (instance)->data_type = _data_type; \
304  (instance)->count = _count
305 
306 
307 
318 AFW_DEFINE(const afw_utf8_t *)
320  const afw_list_t *instance,
321  const afw_iterator_t * *iterator,
322  afw_xctx_t *xctx);
323 
324 
325 
334 AFW_DECLARE(void)
336  const afw_list_t *instance,
337  afw_xctx_t *xctx);
338 
339 
340 
357  const afw_list_t *instance,
358  afw_xctx_t *xctx);
359 
360 
361 
369 AFW_DECLARE(void)
371  const afw_list_t *instance,
372  const afw_data_type_t *data_type,
373  const void *internal,
374  afw_xctx_t *xctx);
375 
376 
377 
384 AFW_DECLARE(void)
386  const afw_list_t *instance,
387  const afw_value_t *value,
388  afw_xctx_t *xctx);
389 
390 
391 
397 AFW_DECLARE(void)
399  const afw_list_t *instance,
400  afw_xctx_t *xctx);
401 
402 
403 
411 AFW_DECLARE(void)
413  const afw_list_t *instance,
414  const afw_data_type_t *data_type,
415  const void *internal,
416  afw_xctx_t *xctx);
417 
418 
419 
426 AFW_DECLARE(void)
428  const afw_list_t *instance,
429  const afw_value_t *value,
430  afw_xctx_t *xctx);
431 
432 
440 AFW_DECLARE(void)
442  const afw_list_t *instance,
443  afw_size_t index,
444  const afw_value_t *value,
445  afw_xctx_t *xctx);
446 
447 
454 #define afw_list_is_immutable(list, xctx) \
455 (afw_list_get_setter(list, xctx) == NULL)
456 
457 
458 
459 AFW_END_DECLARES
460 
463 #endif /* __AFW_LIST_H__ */
AFW_DEFINE(const afw_object_t *)
#define AFW_BEGIN_DECLARES
#define AFW_DECLARE(type)
Declare a public afw function.
Interfaceafw_interface header.
AFW_DECLARE_CONST_DATA(afw_utf8_t) afw_s_200
afw_utf8_t for string 200
struct afw_iterator_s afw_iterator_t
_Bool afw_boolean_t
Definition: afw_common.h:373
apr_size_t afw_size_t
size_t.
Definition: afw_common.h:151
void afw_list_remove_all_values(const afw_list_t *instance, afw_xctx_t *xctx)
Call method remove_all_values of interface afw_list_setter.
Definition: afw_list.c:128
const afw_list_t * afw_list_const_create_null_terminated_array_of_objects(const afw_object_t *const *objects, const afw_pool_t *p, afw_xctx_t *xctx)
Create an immutable list from NULL terminated array of objects.
const afw_data_type_t * afw_list_determine_data_type_and_set_immutable(const afw_list_t *instance, afw_xctx_t *xctx)
Set list to immutable and determine data type of entries.
Definition: afw_list.c:60
afw_list_create_wrapper_for_array(const void *array, afw_boolean_t indirect, const afw_data_type_t *data_type, afw_size_t count, const afw_pool_t *p, afw_xctx_t *xctx)
Create a immutable list wrapper for an array.
void afw_list_set_value_by_index(const afw_list_t *instance, afw_size_t index, const afw_value_t *value, afw_xctx_t *xctx)
Call method set_value_by_index of interface afw_list_setter.
Definition: afw_list.c:188
void afw_list_remove_value(const afw_list_t *instance, const afw_value_t *value, afw_xctx_t *xctx)
Call method remove_value of interface afw_list_setter.
Definition: afw_list.c:168
afw_list_wrapper_for_array_inf
inf for afw_list_wrapper_for_array afw_list implementation.
Definition: afw_list.h:254
const afw_list_t * afw_list_create_or_clone(const afw_list_t *list, const afw_data_type_t *data_type, afw_boolean_t clone_values, const afw_pool_t *p, afw_xctx_t *xctx)
Create a clone of a list in memory.
void afw_list_remove_internal(const afw_list_t *instance, const afw_data_type_t *data_type, const void *internal, afw_xctx_t *xctx)
Call method remove of interface afw_list_setter.
Definition: afw_list.c:147
const afw_list_t * afw_list_const_create_null_terminated_array_of_values(const afw_value_t *const *values, const afw_pool_t *p, afw_xctx_t *xctx)
Create an immutable list from NULL terminated array of values.
const afw_list_t * afw_list_convert_to_list_of_strings(const afw_list_t *list, const afw_pool_t *p, afw_xctx_t *xctx)
Convert a list to a list of strings.
afw_list_of_utf8_get_next(const afw_list_t *instance, const afw_iterator_t **iterator, afw_xctx_t *xctx)
Get next value from list whose data type cType is afw_utf8_t.
Definition: afw_list.c:19
const afw_list_t * afw_list_of_create_from_value(const afw_data_type_t *data_type, const afw_value_t *value, const afw_pool_t *p, afw_xctx_t *xctx)
Create a typed list from a value.
void afw_list_add_internal(const afw_list_t *instance, const afw_data_type_t *data_type, const void *internal, afw_xctx_t *xctx)
Call method add of interface afw_list_setter.
Definition: afw_list.c:78
const afw_list_t * afw_list_const_create_array_of_objects(const afw_object_t *const *objects, afw_size_t count, const afw_pool_t *p, afw_xctx_t *xctx)
Create an immutable list from an array of objects.
const afw_list_t * afw_list_const_create_array_of_values(const afw_value_t *const *values, afw_size_t count, const afw_pool_t *p, afw_xctx_t *xctx)
Create an immutable list from an array of values.
void afw_list_add_value(const afw_list_t *instance, const afw_value_t *value, afw_xctx_t *xctx)
Call method add_value of interface afw_list_setter.
Definition: afw_list.c:104
const afw_list_t * afw_list_create_with_options(int options, const afw_data_type_t *data_type, const afw_pool_t *p, afw_xctx_t *xctx)
Create an list in memory with options.
struct afw_list_wrapper_for_array_self_s afw_list_wrapper_for_array_self_t
Self for immutable list wrapper for a array.
void afw_list_set_immutable(const afw_list_t *instance, afw_xctx_t *xctx)
Set a list to immutable if not already.
Definition: afw_list.c:44
Interface afw_data_type public struct.
Interface afw_list_inf_s struct.
Interface afw_list public struct.
Self for immutable list wrapper for a array.
Definition: afw_list.h:237
Interface afw_object public struct.
Interface afw_pool public struct.
NFC normalized UTF-8 string.
Definition: afw_common.h:545
Interface afw_value public struct.
Interface afw_xctx public struct.