dynamic_array.h v0.3.1
Reference-counted dynamic arrays for C
Loading...
Searching...
No Matches
Macros
Type-Safe Builder Macros

Convenient type-safe macros for builder operations. More...

Macros

#define DA_BUILDER_CREATE(T)   da_builder_create(sizeof(T))
 Type-safe builder creation.
 
#define DA_BUILDER_APPEND_TYPED(builder, val, T)   do { T _temp = (val); da_builder_append(builder, (void*)&_temp); } while(0)
 Type-safe element append to builder with explicit type parameter.
 
#define DA_BUILDER_PUT_TYPED(builder, i, val, T)   do { T _temp = (val); da_builder_set(builder, i, (void*)&_temp); } while(0)
 Type-safe element assignment in builder with explicit type parameter.
 
#define DA_BUILDER_APPEND(builder, val, T)   DA_BUILDER_APPEND_TYPED(builder, val, T)
 Type-safe element append to builder (adaptive macro)
 
#define DA_BUILDER_PUT(builder, i, val, T)   DA_BUILDER_PUT_TYPED(builder, i, val, T)
 Type-safe element assignment in builder (adaptive macro)
 
#define DA_BUILDER_AT(builder, i, T)   (*(T*)da_builder_get(builder, i))
 Type-safe element access by value from builder.
 
#define DA_BUILDER_LEN(builder)   da_builder_length(builder)
 Get builder length (shorthand for da_builder_length)
 
#define DA_BUILDER_CAP(builder)   da_builder_capacity(builder)
 Get builder capacity (shorthand for da_builder_capacity)
 
#define DA_BUILDER_CLEAR(builder)   da_builder_clear(builder)
 Clear builder (shorthand for da_builder_clear)
 
#define DA_BUILDER_TO_ARRAY(builder)   da_builder_to_array(builder, NULL, NULL)
 Convert builder to array (shorthand for da_builder_to_array)
 

Detailed Description

Convenient type-safe macros for builder operations.

Macro Definition Documentation

◆ DA_BUILDER_APPEND

#define DA_BUILDER_APPEND (   builder,
  val,
 
)    DA_BUILDER_APPEND_TYPED(builder, val, T)

Type-safe element append to builder (adaptive macro)

Parameters
builderBuilder to modify
valValue to append
TType parameter (only when DA_SUPPORT_TYPE_INFERENCE=0 or DA_NOT_USE_TYPE_GENERIC is defined)
Note
When DA_SUPPORT_TYPE_INFERENCE=1 and DA_NOT_USE_TYPE_GENERIC is not defined: DA_BUILDER_APPEND(builder, 42)
When DA_SUPPORT_TYPE_INFERENCE=0 or DA_NOT_USE_TYPE_GENERIC is defined: DA_BUILDER_APPEND(builder, 42, int)
Automatically chooses between inferred and typed versions
// With type inference support:
DA_BUILDER_APPEND(builder, 42);
// Without type inference or with DA_NOT_USE_TYPE_GENERIC:
DA_BUILDER_APPEND(builder, 42, int);
#define DA_BUILDER_APPEND(builder, val, T)
Type-safe element append to builder (adaptive macro)
Definition dynamic_array.h:1439

◆ DA_BUILDER_APPEND_TYPED

#define DA_BUILDER_APPEND_TYPED (   builder,
  val,
 
)    do { T _temp = (val); da_builder_append(builder, (void*)&_temp); } while(0)

Type-safe element append to builder with explicit type parameter.

Parameters
builderBuilder to modify
valValue to append
TExplicit type of the value
Note
Always requires explicit type parameter
DA_BUILDER_APPEND_TYPED(builder, 42, int);
#define DA_BUILDER_APPEND_TYPED(builder, val, T)
Type-safe element append to builder with explicit type parameter.
Definition dynamic_array.h:1425

◆ DA_BUILDER_AT

#define DA_BUILDER_AT (   builder,
  i,
 
)    (*(T*)da_builder_get(builder, i))

Type-safe element access by value from builder.

Parameters
builderBuilder to access
iIndex to get
TElement type
Returns
Element value at index i
int value = DA_BUILDER_AT(builder, 0, int);
#define DA_BUILDER_AT(builder, i, T)
Type-safe element access by value from builder.
Definition dynamic_array.h:1447

◆ DA_BUILDER_CREATE

#define DA_BUILDER_CREATE (   T)    da_builder_create(sizeof(T))

Type-safe builder creation.

Parameters
TElement type (e.g., int, float, struct mytype)
Returns
New da_builder sized for type T
#define DA_BUILDER_CREATE(T)
Type-safe builder creation.
Definition dynamic_array.h:1423
ArrayBuffer-style builder for efficient array construction.
Definition dynamic_array.h:208

◆ DA_BUILDER_PUT

#define DA_BUILDER_PUT (   builder,
  i,
  val,
 
)    DA_BUILDER_PUT_TYPED(builder, i, val, T)

Type-safe element assignment in builder (adaptive macro)

Parameters
builderBuilder to modify
iIndex to set
valValue to assign
TType parameter (only when DA_SUPPORT_TYPE_INFERENCE=0 or DA_NOT_USE_TYPE_GENERIC is defined)
Note
When DA_SUPPORT_TYPE_INFERENCE=1 and DA_NOT_USE_TYPE_GENERIC is not defined: DA_BUILDER_PUT(builder, 0, 42)
When DA_SUPPORT_TYPE_INFERENCE=0 or DA_NOT_USE_TYPE_GENERIC is defined: DA_BUILDER_PUT(builder, 0, 42, int)
Automatically chooses between inferred and typed versions
// With type inference support:
DA_BUILDER_PUT(builder, 0, 42);
// Without type inference or with DA_NOT_USE_TYPE_GENERIC:
DA_BUILDER_PUT(builder, 0, 42, int);
#define DA_BUILDER_PUT(builder, i, val, T)
Type-safe element assignment in builder (adaptive macro)
Definition dynamic_array.h:1440

◆ DA_BUILDER_PUT_TYPED

#define DA_BUILDER_PUT_TYPED (   builder,
  i,
  val,
 
)    do { T _temp = (val); da_builder_set(builder, i, (void*)&_temp); } while(0)

Type-safe element assignment in builder with explicit type parameter.

Parameters
builderBuilder to modify
iIndex to set
valValue to assign
TExplicit type of the value
Note
Always requires explicit type parameter
DA_BUILDER_PUT_TYPED(builder, 0, 42, int);
#define DA_BUILDER_PUT_TYPED(builder, i, val, T)
Type-safe element assignment in builder with explicit type parameter.
Definition dynamic_array.h:1426