Use these convenience macros to cast a raw pointer into a multidimensional variable-length array, which lets us use []
notation instead of manually linearizing the index.
More...
|
#define | ARRAY_1D(TYPE, output_array_name, input_array_name) TYPE* output_array_name = (TYPE*)input_array_name |
|
#define | ARRAY_2D(TYPE, output_array_name, input_array_name, DIM_1) TYPE(*output_array_name)[DIM_1] = (TYPE(*)[DIM_1])input_array_name |
|
#define | ARRAY_3D(TYPE, output_array_name, input_array_name, DIM_1, DIM_2) |
|
#define | ARRAY_4D( TYPE, output_array_name, input_array_name, DIM_1, DIM_2, DIM_3) |
|
#define | ARRAY_5D( TYPE, output_array_name, input_array_name, DIM_1, DIM_2, DIM_3, DIM_4) |
|
#define | VEC_ARRAY_1D(TYPE, output_array_name, input_array_name) TYPE* output_array_name = (TYPE*)(input_array_name) |
|
#define | VEC_ARRAY_2D(TYPE, output_array_name, input_array_name, cols) |
|
#define | VEC_ARRAY_3D(TYPE, output_array_name, input_array_name, rows, cols) |
|
#define | VEC_ARRAY_4D( TYPE, output_array_name, input_array_name, height, rows, cols) |
|
Use these convenience macros to cast a raw pointer into a multidimensional variable-length array, which lets us use []
notation instead of manually linearizing the index.
Usage: Suppose we have an int* array
pointer.
To convert this into a multidimensional array, call the appropriate macro, providing the type, a new variable name (often the same as the original with an underscore prefixed), and then listing out all but the first dimension.
For example:
ARRAY_2D(int, _array, array, 4);
_array[0][1] = 1;
ARRAY_3D(int, _array, array, 4, 3);
_array[0][1][2] = 1;
ARRAY_4D(int, _array, array, 4, 3, 2);
_array[0][1][2][3] = 1;
◆ ARRAY_3D
#define ARRAY_3D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
DIM_1, |
|
|
|
DIM_2 |
|
) |
| |
Value: TYPE(*output_array_name)[DIM_1][DIM_2] = \
(TYPE(*)[DIM_1][DIM_2])input_array_name
Definition at line 436 of file common.h.
◆ ARRAY_4D
#define ARRAY_4D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
DIM_1, |
|
|
|
DIM_2, |
|
|
|
DIM_3 |
|
) |
| |
Value: TYPE(*output_array_name)[DIM_1][DIM_2][DIM_3] = \
(TYPE(*)[DIM_1][DIM_2][DIM_3])input_array_name
Definition at line 440 of file common.h.
◆ ARRAY_5D
#define ARRAY_5D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
DIM_1, |
|
|
|
DIM_2, |
|
|
|
DIM_3, |
|
|
|
DIM_4 |
|
) |
| |
Value: TYPE(*output_array_name)[DIM_1][DIM_2][DIM_3][DIM_4] = \
(TYPE(*)[DIM_1][DIM_2][DIM_3][DIM_4])input_array_name
Definition at line 445 of file common.h.
◆ VEC_ARRAY_2D
#define VEC_ARRAY_2D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
cols |
|
) |
| |
Value: TYPE(*output_array_name) \
Definition at line 453 of file common.h.
◆ VEC_ARRAY_3D
#define VEC_ARRAY_3D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
rows, |
|
|
|
cols |
|
) |
| |
Value: TYPE(*output_array_name) \
(TYPE(*)[(rows)][(cols) / (
VECTOR_SIZE)]) input_array_name
Definition at line 458 of file common.h.
◆ VEC_ARRAY_4D
#define VEC_ARRAY_4D |
( |
|
TYPE, |
|
|
|
output_array_name, |
|
|
|
input_array_name, |
|
|
|
height, |
|
|
|
rows, |
|
|
|
cols |
|
) |
| |
Value: TYPE(*output_array_name) \
input_array_name
Definition at line 463 of file common.h.