Blender  V2.93
Functions
array_utils.c File Reference

Generic array manipulation API. More...

#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_alloca.h"
#include "BLI_math_base.h"
#include "BLI_strict_flags.h"
#include "BLI_sys_types.h"
#include "BLI_utildefines.h"
#include "BLI_array_utils.h"

Go to the source code of this file.

Functions

void _bli_array_reverse (void *arr_v, unsigned int arr_len, size_t arr_stride)
 
void _bli_array_wrap (void *arr_v, unsigned int arr_len, size_t arr_stride, int dir)
 
void _bli_array_permute (void *arr, const unsigned int arr_len, const size_t arr_stride, const unsigned int *order, void *arr_temp)
 
int _bli_array_findindex (const void *arr, unsigned int arr_len, size_t arr_stride, const void *p)
 
int _bli_array_rfindindex (const void *arr, unsigned int arr_len, size_t arr_stride, const void *p)
 
void _bli_array_binary_and (void *arr, const void *arr_a, const void *arr_b, unsigned int arr_len, size_t arr_stride)
 
void _bli_array_binary_or (void *arr, const void *arr_a, const void *arr_b, unsigned int arr_len, size_t arr_stride)
 
bool _bli_array_iter_span (const void *arr, unsigned int arr_len, size_t arr_stride, bool use_wrap, bool use_delimit_bounds, bool(*test_fn)(const void *arr_item, void *user_data), void *user_data, unsigned int span_step[2], unsigned int *r_span_len)
 
bool _bli_array_is_zeroed (const void *arr_v, unsigned int arr_len, size_t arr_stride)
 
bool _bli_array_iter_spiral_square (const void *arr_v, const int arr_shape[2], size_t elem_size, const int center[2], bool(*test_fn)(const void *arr_item, void *user_data), void *user_data)
 

Detailed Description

Generic array manipulation API.

Warning
Some array operations here are inherently inefficient, and only included for the cases where the performance is acceptable. Use with care.

Definition in file array_utils.c.

Function Documentation

◆ _bli_array_binary_and()

void _bli_array_binary_and ( void *  arr,
const void *  arr_a,
const void *  arr_b,
unsigned int  arr_len,
size_t  arr_stride 
)

Definition at line 156 of file array_utils.c.

◆ _bli_array_binary_or()

void _bli_array_binary_or ( void *  arr,
const void *  arr_a,
const void *  arr_b,
unsigned int  arr_len,
size_t  arr_stride 
)

Definition at line 169 of file array_utils.c.

◆ _bli_array_findindex()

int _bli_array_findindex ( const void *  arr,
unsigned int  arr_len,
size_t  arr_stride,
const void *  p 
)

Find the first index of an item in an array.

Access via BLI_array_findindex

Note
Not efficient, use for error checks/asserts.

Definition at line 130 of file array_utils.c.

◆ _bli_array_is_zeroed()

bool _bli_array_is_zeroed ( const void *  arr_v,
unsigned int  arr_len,
size_t  arr_stride 
)

Simple utility to check memory is zeroed.

Definition at line 310 of file array_utils.c.

◆ _bli_array_iter_span()

bool _bli_array_iter_span ( const void *  arr,
unsigned int  arr_len,
size_t  arr_stride,
bool  use_wrap,
bool  use_delimit_bounds,
bool(*)(const void *arr_item, void *user_data test_fn,
void *  user_data,
unsigned int  span_step[2],
unsigned int *  r_span_len 
)

Utility function to iterate over contiguous items in an array.

Parameters
use_wrapDetect contiguous ranges across the first/last points. In this case the second index of span_step may be lower than the first, which indicates the values are wrapped.
use_delimit_boundsWhen false, ranges that defined by the start/end indices are excluded. This option has no effect when use_wrap is enabled.
test_fnFunction to test if the item should be included in the range.
user_dataUser data for test_fn.
span_stepIndices to iterate over, initialize both values to the array length to initialize iteration.
r_span_lenThe length of the span, useful when use_wrap is enabled, where calculating the length isn't a simple subtraction.

Definition at line 198 of file array_utils.c.

References BLI_assert, NULL, POINTER_OFFSET, UNLIKELY, and user_data.

◆ _bli_array_iter_spiral_square()

bool _bli_array_iter_spiral_square ( const void *  arr_v,
const int  arr_shape[2],
size_t  elem_size,
const int  center[2],
bool(*)(const void *arr_item, void *user_data test_fn,
void *  user_data 
)

Smart function to sample a rect spiraling outside. Nice for selection ID.

Parameters
arr_shapedimensions [w, h].
centercoordinates [x, y] indicating where to start traversing.

Definition at line 329 of file array_utils.c.

References BLI_assert, center, CLAMP, max_iiii(), min_iiii(), KDL::sign(), steps, stride, and user_data.

◆ _bli_array_permute()

void _bli_array_permute ( void *  arr,
const unsigned int  arr_len,
const size_t  arr_stride,
const unsigned int *  order,
void *  arr_temp 
)

In-place array permute. (re-arrange elements based on an array of indices).

Access via BLI_array_wrap

Definition at line 91 of file array_utils.c.

References BLI_assert, len, MEM_freeN, MEM_mallocN, NULL, order, and POINTER_OFFSET.

◆ _bli_array_reverse()

void _bli_array_reverse ( void *  arr_v,
unsigned int  arr_len,
size_t  arr_stride 
)

In-place array reverse.

Access via BLI_array_reverse

Definition at line 43 of file array_utils.c.

References BLI_array_alloca.

◆ _bli_array_rfindindex()

int _bli_array_rfindindex ( const void *  arr,
unsigned int  arr_len,
size_t  arr_stride,
const void *  p 
)

A version of BLI_array_findindex that searches from the end of the list.

Definition at line 144 of file array_utils.c.

◆ _bli_array_wrap()

void _bli_array_wrap ( void *  arr_v,
unsigned int  arr_len,
size_t  arr_stride,
int  dir 
)

In-place array wrap. (rotate the array one step forward or backwards).

Access via BLI_array_wrap

Definition at line 65 of file array_utils.c.

References BLI_array_alloca, and BLI_assert.

Referenced by testbuffer_list_state_random_data().