26 const uint arr_stride_uint = (
uint)arr_stride;
27 const uint arr_half_stride = (arr_len / 2) * arr_stride_uint;
32 for (i = 0, i_end = (arr_len - 1) * arr_stride_uint; i < arr_half_stride;
33 i += arr_stride_uint, i_end -= arr_stride_uint) {
34 memcpy(buf, &arr[i], arr_stride);
35 memcpy(&arr[i], &arr[i_end], arr_stride);
36 memcpy(&arr[i_end], buf, arr_stride);
46 memcpy(buf, arr, arr_stride);
47 memmove(arr, arr + arr_stride, arr_stride * (arr_len - 1));
48 memcpy(arr + (arr_stride * (arr_len - 1)), buf, arr_stride);
51 memcpy(buf, arr + (arr_stride * (arr_len - 1)), arr_stride);
52 memmove(arr + arr_stride, arr, arr_stride * (arr_len - 1));
53 memcpy(arr, buf, arr_stride);
61 void *arr,
const uint arr_len,
const size_t arr_stride,
const uint *
order,
void *arr_temp)
63 const size_t len = arr_len * arr_stride;
64 const uint arr_stride_uint = (
uint)arr_stride;
68 if (arr_temp ==
NULL) {
75 memcpy(arr_orig, arr,
len);
77 for (i = 0; i < arr_len; i++) {
84 if (arr_temp ==
NULL) {
95 const uint arr_stride_uint = (
uint)arr_stride;
97 for (
uint i = 0; i < arr_len; i++) {
113 const char *arr_step = (
const char *)arr;
114 for (
uint i = 0; i < arr_len; i++, arr_step += arr_stride) {
115 if (memcmp(arr_step, p, arr_stride) == 0) {
124 const char *arr_step = (
const char *)arr + (arr_stride * arr_len);
125 for (
uint i = arr_len; i-- != 0;) {
126 arr_step -= arr_stride;
127 if (memcmp(arr_step, p, arr_stride) == 0) {
135 void *arr,
const void *arr_a,
const void *arr_b,
uint arr_len,
size_t arr_stride)
138 const char *src_a = arr_a;
139 const char *src_b = arr_b;
141 size_t i = arr_stride * arr_len;
143 *(dst++) = *(src_a++) & *(src_b++);
148 void *arr,
const void *arr_a,
const void *arr_b,
uint arr_len,
size_t arr_stride)
151 const char *src_a = arr_a;
152 const char *src_b = arr_b;
154 size_t i = arr_stride * arr_len;
156 *(dst++) = *(src_a++) | *(src_b++);
164 bool use_delimit_bounds,
165 bool (*test_fn)(
const void *arr_item,
void *
user_data),
173 if (use_wrap && (span_step[0] != arr_len) && (span_step[0] > span_step[1])) {
177 const uint arr_stride_uint = (
uint)arr_stride;
178 const void *item_prev;
183 if ((span_step[0] == arr_len) && (span_step[1] == arr_len)) {
187 test_prev = test_fn(item_prev,
user_data);
189 else if (use_delimit_bounds ==
false) {
192 test_prev = test_fn(item_prev,
user_data);
200 else if ((i_curr = span_step[1] + 2) < arr_len) {
201 item_prev =
POINTER_OFFSET(arr, (span_step[1] + 1) * arr_stride_uint);
202 test_prev = test_fn(item_prev,
user_data);
209 const void *item_curr =
POINTER_OFFSET(arr, i_curr * arr_stride_uint);
211 while (i_curr < arr_len) {
212 bool test_curr = test_fn(item_curr,
user_data);
213 if ((test_prev ==
false) && (test_curr ==
true)) {
215 uint i_step_prev = i_curr;
218 uint i_step = i_curr + 1;
223 i_step_prev = i_step;
230 if (i_step_prev < i_curr) {
231 span_len = (i_step_prev + (arr_len - i_curr)) + 1;
234 span_len = (i_step_prev - i_curr) + 1;
238 uint i_step = i_curr + 1;
239 while ((i_step != arr_len) &&
241 i_step_prev = i_step;
245 span_len = (i_step_prev - i_curr) + 1;
247 if ((use_delimit_bounds ==
false) && (i_step_prev == arr_len - 1)) {
252 span_step[0] = i_curr;
253 span_step[1] = i_step_prev;
254 *r_span_len = span_len;
259 test_prev = test_curr;
261 item_prev = item_curr;
271 const char *arr_step = (
const char *)arr_v;
272 size_t i = arr_stride * arr_len;
282 const int arr_shape[2],
285 bool (*test_fn)(
const void *arr_item,
void *
user_data),
289 center[1] < arr_shape[1]);
291 const char *arr = arr_v;
292 const int stride[2] = {arr_shape[0] * (int)elem_size, (
int)elem_size};
296 if (test_fn(arr + ofs[0] + ofs[1],
user_data)) {
302 int steps_in, steps_out;
305 int x_plus = arr_shape[0] -
center[0] - 1;
307 int y_plus = arr_shape[1] -
center[1] - 1;
309 steps_in = 2 *
min_iiii(x_minus, x_plus, y_minus, y_plus);
310 steps_out = 2 *
max_iiii(x_minus, x_plus, y_minus, y_plus);
317 while (
steps < steps_out) {
324 bool check_bounds =
steps > steps_in;
329 for (
int axis = 2; axis--;) {
330 int ofs_step =
stride[axis];
335 int ofs_iter = ofs[axis] + ofs_step;
336 int ofs_dest = ofs[axis] +
steps * ofs_step;
337 int ofs_other = ofs[!axis];
339 ofs[axis] = ofs_dest;
341 if (ofs_other < 0 || ofs_other > limits[!axis]) {
346 CLAMP(ofs_iter, 0, limits[axis]);
347 CLAMP(ofs_dest, 0, limits[axis]);
351 if (test_fn(arr + ofs_other + ofs_iter,
user_data)) {
354 if (ofs_iter == ofs_dest) {
357 ofs_iter += ofs_step;
#define BLI_array_alloca(arr, realsize)
Generic array manipulation API.
#define BLI_assert_unreachable()
MINLINE int max_iiii(int a, int b, int c, int d)
MINLINE int min_iiii(int a, int b, int c, int d)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
#define POINTER_OFFSET(v, ofs)
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 stride
_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
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
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)
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)
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)
void _bli_array_permute(void *arr, const uint arr_len, const size_t arr_stride, const uint *order, void *arr_temp)
void _bli_array_reverse(void *arr_v, uint arr_len, size_t arr_stride)
void _bli_array_binary_and(void *arr, const void *arr_a, const void *arr_b, uint arr_len, size_t arr_stride)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)