Blender  V3.3
BLI_array_utils.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
10 #include "BLI_compiler_typecheck.h"
11 #include "BLI_sys_types.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
22 void _bli_array_reverse(void *arr, uint arr_len, size_t arr_stride);
23 #define BLI_array_reverse(arr, arr_len) _bli_array_reverse(arr, arr_len, sizeof(*(arr)))
24 
31 void _bli_array_wrap(void *arr, uint arr_len, size_t arr_stride, int dir);
32 #define BLI_array_wrap(arr, arr_len, dir) _bli_array_wrap(arr, arr_len, sizeof(*(arr)), dir)
33 
41  void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp);
42 #define BLI_array_permute(arr, arr_len, order) \
43  _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, NULL)
44 #define BLI_array_permute_ex(arr, arr_len, order, arr_temp) \
45  _bli_array_permute(arr, arr_len, sizeof(*(arr)), order, arr_temp)
46 
54 uint _bli_array_deduplicate_ordered(void *arr, uint arr_len, size_t arr_stride);
55 #define BLI_array_deduplicate_ordered(arr, arr_len) \
56  _bli_array_deduplicate_ordered(arr, arr_len, sizeof(*(arr)))
57 
65 int _bli_array_findindex(const void *arr, uint arr_len, size_t arr_stride, const void *p);
66 #define BLI_array_findindex(arr, arr_len, p) _bli_array_findindex(arr, arr_len, sizeof(*(arr)), p)
67 
71 int _bli_array_rfindindex(const void *arr, uint arr_len, size_t arr_stride, const void *p);
72 #define BLI_array_rfindindex(arr, arr_len, p) \
73  _bli_array_rfindindex(arr, arr_len, sizeof(*(arr)), p)
74 
76  void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride);
77 #define BLI_array_binary_and(arr, arr_a, arr_b, arr_len) \
78  (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
79  CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
80  _bli_array_binary_and(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
81 
83  void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride);
84 #define BLI_array_binary_or(arr, arr_a, arr_b, arr_len) \
85  (CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
86  CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
87  _bli_array_binary_or(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
88 
105 bool _bli_array_iter_span(const void *arr,
106  uint arr_len,
107  size_t arr_stride,
108  bool use_wrap,
109  bool use_delimit_bounds,
110  bool (*test_fn)(const void *arr_item, void *user_data),
111  void *user_data,
112  uint span_step[2],
113  uint *r_span_len);
114 #define BLI_array_iter_span( \
115  arr, arr_len, use_wrap, use_delimit_bounds, test_fn, user_data, span_step, r_span_len) \
116  _bli_array_iter_span(arr, \
117  arr_len, \
118  sizeof(*(arr)), \
119  use_wrap, \
120  use_delimit_bounds, \
121  test_fn, \
122  user_data, \
123  span_step, \
124  r_span_len)
125 
129 bool _bli_array_is_zeroed(const void *arr, uint arr_len, size_t arr_stride);
130 #define BLI_array_is_zeroed(arr, arr_len) _bli_array_is_zeroed(arr, arr_len, sizeof(*(arr)))
131 
139 bool _bli_array_iter_spiral_square(const void *arr_v,
140  const int arr_shape[2],
141  size_t elem_size,
142  const int center[2],
143  bool (*test_fn)(const void *arr_item, void *user_data),
144  void *user_data);
145 #define BLI_array_iter_spiral_square(arr, arr_shape, center, test_fn, user_data) \
146  _bli_array_iter_spiral_square(arr, arr_shape, sizeof(*(arr)), center, test_fn, user_data)
147 #ifdef __cplusplus
148 }
149 #endif
void _bli_array_wrap(void *arr, uint arr_len, size_t arr_stride, int dir)
Definition: array_utils.c:40
void _bli_array_binary_or(void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride)
Definition: array_utils.c:147
bool _bli_array_is_zeroed(const void *arr, uint arr_len, size_t arr_stride)
Definition: array_utils.c:269
int _bli_array_rfindindex(const void *arr, uint arr_len, size_t arr_stride, const void *p)
Definition: array_utils.c:122
uint _bli_array_deduplicate_ordered(void *arr, uint arr_len, size_t arr_stride)
Definition: array_utils.c:89
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)
Definition: array_utils.c:281
void _bli_array_permute(void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp)
Definition: array_utils.c:60
int _bli_array_findindex(const void *arr, uint arr_len, size_t arr_stride, const void *p)
Definition: array_utils.c:111
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)
Definition: array_utils.c:160
void _bli_array_reverse(void *arr, uint arr_len, size_t arr_stride)
Definition: array_utils.c:24
void _bli_array_binary_and(void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride)
Definition: array_utils.c:134
unsigned int uint
Definition: BLI_sys_types.h:67
NSNotificationCenter * center
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint order
void * user_data