Array

A collection of array data types that are boxed in a struct. The struct holds the length of the array such that this can be passed as an argument and received from functions. The header also provides a makro to determine the size of arrays.

Reference

UZ_ARRAY_SIZE(x)

Standard macro to get the size of a array at compile time. See:

struct uz_array_float_t

Array of floats with length to pass and receive from functions.

Public Members

uint32_t length

length of the vector - use UZ_ARRAY_SIZE makro to determine

float *data

pointer to data

struct uz_array_uint32_t

Array of uint32_t with length to pass and receive from functions.

Public Members

uint32_t length

length of the vector - use UZ_ARRAY_SIZE makro to determine

uint32_t *data

pointer to data

struct uz_array_int32_t

Array of int32_t with length to pass and receive from functions.

Public Members

uint32_t length

length of the vector - use UZ_ARRAY_SIZE makro to determine

int32_t *data

pointer to data

struct uz_array_int16_t

Array of int16_t with length to pass and receive from functions.

Public Members

uint32_t length

length of the vector - use UZ_ARRAY_SIZE makro to determine

int16_t *data

pointer to data

struct uz_array_uint16_t

Array of uint16_t with length to pass and receive from functions.

Public Members

uint32_t length

length of the vector - use UZ_ARRAY_SIZE makro to determine

uint16_t *data

pointer to data

The structs are typedefed.

Example

Declare an array with data in it, then assign the first element of the array to the .data struct member. Pass the array to a function. Take the storage duration into account when assigning the pointer to .data.

void examplefunction(void){
    float data[5] = {1.12f, 2.87f, 3.3f, 4.6f, 51.5f};
    uz_array_float_t testarray = {
        .length = UZ_ARRAY_SIZE(data), // ALWAYS use the UZ_ARRAY_SIZE makro in the initialization of the length of the array
        .data = &data[0] // Pointer to the first element of the actual data of the array
    };
    float sum=sum_over_array(testarray); // enables to pass array with length of array
}

float sum_over_array(uz_array_float_t array){
    float sum=0.0f;
    for(uint32_t i=0;i<array.length;i++){
        sum+=array.data[i];
    }
    return sum;
}

Danger

If a variable is declared inside of a function and the pointer to this variable (automatic storage duration) is assigned to .data, the uz_array must not be returned to a calling function.

This leads to buggy code, do not do this:

void fcn(void){

uz_array_float_t var=a_buggy_function(void);
}

float a_buggy_function(void){
    float data[5]={1,2,3,4,5};
    uz_array_float_t array{
        .length=UZ_ARRAY_SIZE,
        .data=&data[0]
    };
    return array;
}