ClangFormat: apply to source, most of intern
[blender.git] / source / blender / blenlib / BLI_array_utils.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 #ifndef __BLI_ARRAY_UTILS_H__
18 #define __BLI_ARRAY_UTILS_H__
19
20 /** \file
21  * \ingroup bli
22  * \brief Generic array manipulation API.
23  */
24
25 #include "BLI_compiler_typecheck.h"
26
27 void _bli_array_reverse(void *arr, unsigned int arr_len, size_t arr_stride);
28 #define BLI_array_reverse(arr, arr_len) _bli_array_reverse(arr, arr_len, sizeof(*(arr)))
29
30 void _bli_array_wrap(void *arr, unsigned int arr_len, size_t arr_stride, int dir);
31 #define BLI_array_wrap(arr, arr_len, dir) _bli_array_wrap(arr, arr_len, sizeof(*(arr)), dir)
32
33 void _bli_array_permute(void *arr,
34                         const unsigned int arr_len,
35                         const size_t arr_stride,
36                         const unsigned int *index,
37                         void *arr_temp);
38 #define BLI_array_permute(arr, arr_len, order) \
39   _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, NULL)
40 #define BLI_array_permute_ex(arr, arr_len, order, arr_temp) \
41   _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, arr_temp)
42
43 int _bli_array_findindex(const void *arr, unsigned int arr_len, size_t arr_stride, const void *p);
44 #define BLI_array_findindex(arr, arr_len, p) _bli_array_findindex(arr, arr_len, sizeof(*(arr)), p)
45
46 int _bli_array_rfindindex(const void *arr, unsigned int arr_len, size_t arr_stride, const void *p);
47 #define BLI_array_rfindindex(arr, arr_len, p) \
48   _bli_array_rfindindex(arr, arr_len, sizeof(*(arr)), p)
49
50 void _bli_array_binary_and(
51     void *arr, const void *arr_a, const void *arr_b, unsigned int arr_len, size_t arr_stride);
52 #define BLI_array_binary_and(arr, arr_a, arr_b, arr_len) \
53   (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
54    CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
55    _bli_array_binary_and(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
56
57 void _bli_array_binary_or(
58     void *arr, const void *arr_a, const void *arr_b, unsigned int arr_len, size_t arr_stride);
59 #define BLI_array_binary_or(arr, arr_a, arr_b, arr_len) \
60   (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
61    CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
62    _bli_array_binary_or(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
63
64 bool _bli_array_iter_span(const void *arr,
65                           unsigned int arr_len,
66                           size_t arr_stride,
67                           bool use_wrap,
68                           bool use_delimit_bounds,
69                           bool (*test_fn)(const void *arr_item, void *user_data),
70                           void *user_data,
71                           unsigned int span_step[2],
72                           unsigned int *r_span_len);
73 #define BLI_array_iter_span( \
74     arr, arr_len, use_wrap, use_delimit_bounds, test_fn, user_data, span_step, r_span_len) \
75   _bli_array_iter_span(arr, \
76                        arr_len, \
77                        sizeof(*(arr)), \
78                        use_wrap, \
79                        use_delimit_bounds, \
80                        test_fn, \
81                        user_data, \
82                        span_step, \
83                        r_span_len)
84
85 bool _bli_array_is_zeroed(const void *arr, unsigned int arr_len, size_t arr_stride);
86 #define BLI_array_is_zeroed(arr, arr_len) _bli_array_is_zeroed(arr, arr_len, sizeof(*(arr)))
87
88 #endif /* __BLI_ARRAY_UTILS_H__ */