Blender V4.3
BLI_array_utils.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
13#include "BLI_sys_types.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
24void _bli_array_reverse(void *arr_v, uint arr_len, size_t arr_stride);
25#define BLI_array_reverse(arr, arr_len) _bli_array_reverse(arr, arr_len, sizeof(*(arr)))
26
33void _bli_array_wrap(void *arr_v, uint arr_len, size_t arr_stride, int dir);
34#define BLI_array_wrap(arr, arr_len, dir) _bli_array_wrap(arr, arr_len, sizeof(*(arr)), dir)
35
43 void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp);
44#define BLI_array_permute(arr, arr_len, order) \
45 _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, NULL)
46#define BLI_array_permute_ex(arr, arr_len, order, arr_temp) \
47 _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, arr_temp)
48
56uint _bli_array_deduplicate_ordered(void *arr, uint arr_len, size_t arr_stride);
57#define BLI_array_deduplicate_ordered(arr, arr_len) \
58 _bli_array_deduplicate_ordered(arr, arr_len, sizeof(*(arr)))
59
67int _bli_array_findindex(const void *arr, uint arr_len, size_t arr_stride, const void *p);
68#define BLI_array_findindex(arr, arr_len, p) _bli_array_findindex(arr, arr_len, sizeof(*(arr)), p)
69
73int _bli_array_rfindindex(const void *arr, uint arr_len, size_t arr_stride, const void *p);
74#define BLI_array_rfindindex(arr, arr_len, p) \
75 _bli_array_rfindindex(arr, arr_len, sizeof(*(arr)), p)
76
78 void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride);
79#define BLI_array_binary_and(arr, arr_a, arr_b, arr_len) \
80 (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
81 CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
82 _bli_array_binary_and(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
83
85 void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride);
86#define BLI_array_binary_or(arr, arr_a, arr_b, arr_len) \
87 (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
88 CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
89 _bli_array_binary_or(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
90
107bool _bli_array_iter_span(const void *arr,
108 uint arr_len,
109 size_t arr_stride,
110 bool use_wrap,
111 bool use_delimit_bounds,
112 bool (*test_fn)(const void *arr_item, void *user_data),
113 void *user_data,
114 uint span_step[2],
115 uint *r_span_len);
116#define BLI_array_iter_span( \
117 arr, arr_len, use_wrap, use_delimit_bounds, test_fn, user_data, span_step, r_span_len) \
118 _bli_array_iter_span(arr, \
119 arr_len, \
120 sizeof(*(arr)), \
121 use_wrap, \
122 use_delimit_bounds, \
123 test_fn, \
124 user_data, \
125 span_step, \
126 r_span_len)
127
131bool _bli_array_is_zeroed(const void *arr_v, uint arr_len, size_t arr_stride);
132#define BLI_array_is_zeroed(arr, arr_len) _bli_array_is_zeroed(arr, arr_len, sizeof(*(arr)))
133
141bool _bli_array_iter_spiral_square(const void *arr_v,
142 const int arr_shape[2],
143 size_t elem_size,
144 const int center[2],
145 bool (*test_fn)(const void *arr_item, void *user_data),
146 void *user_data);
147#define BLI_array_iter_spiral_square(arr, arr_shape, center, test_fn, user_data) \
148 _bli_array_iter_spiral_square(arr, arr_shape, sizeof(*(arr)), center, test_fn, user_data)
149#ifdef __cplusplus
150}
151#endif
void _bli_array_binary_or(void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride)
int _bli_array_rfindindex(const void *arr, uint arr_len, size_t arr_stride, const void *p)
uint _bli_array_deduplicate_ordered(void *arr, uint arr_len, size_t arr_stride)
Definition array_utils.c:93
bool _bli_array_is_zeroed(const void *arr_v, uint 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)
void _bli_array_permute(void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp)
Definition array_utils.c:64
int _bli_array_findindex(const void *arr, uint arr_len, size_t arr_stride, const void *p)
bool _bli_array_iter_span(const void *arr, uint 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, uint span_step[2], uint *r_span_len)
void _bli_array_wrap(void *arr_v, uint arr_len, size_t arr_stride, int dir)
Definition array_utils.c:44
void _bli_array_reverse(void *arr_v, uint arr_len, size_t arr_stride)
Definition array_utils.c:27
void _bli_array_binary_and(void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride)
unsigned int uint