forked from bartvdbraak/blender
BLI_array_utils: add binary and/or functions
This commit is contained in:
parent
3d4b8922fc
commit
5128637d48
@ -26,6 +26,8 @@
|
||||
* \brief Generic array manipulation API.
|
||||
*/
|
||||
|
||||
#include "BLI_compiler_typecheck.h"
|
||||
|
||||
void _bli_array_reverse(void *arr, unsigned int arr_len, size_t arr_stride);
|
||||
#define BLI_array_reverse(arr, arr_len) \
|
||||
_bli_array_reverse(arr, arr_len, sizeof(*(arr)))
|
||||
@ -46,4 +48,20 @@ int _bli_array_findindex(const void *arr, unsigned int arr_len, size_t arr_strid
|
||||
#define BLI_array_findindex(arr, arr_len, p) \
|
||||
_bli_array_findindex(arr, arr_len, sizeof(*(arr)), p)
|
||||
|
||||
void _bli_array_binary_and(
|
||||
void *arr, const void *arr_a, const void *arr_b,
|
||||
unsigned int arr_len, size_t arr_stride);
|
||||
#define BLI_array_binary_and(arr, arr_a, arr_b, arr_len) \
|
||||
(CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
|
||||
CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
|
||||
_bli_array_binary_and(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
|
||||
|
||||
void _bli_array_binary_or(
|
||||
void *arr, const void *arr_a, const void *arr_b,
|
||||
unsigned int arr_len, size_t arr_stride);
|
||||
#define BLI_array_binary_or(arr, arr_a, arr_b, arr_len) \
|
||||
(CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_a)), \
|
||||
CHECK_TYPE_PAIR_INLINE(*(arr), *(arr_b)), \
|
||||
_bli_array_binary_or(arr, arr_a, arr_b, arr_len, sizeof(*(arr))))
|
||||
|
||||
#endif /* __BLI_ARRAY_UTILS_H__ */
|
||||
|
@ -142,3 +142,31 @@ int _bli_array_findindex(const void *arr, unsigned int arr_len, size_t arr_strid
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void _bli_array_binary_and(
|
||||
void *arr, const void *arr_a, const void *arr_b,
|
||||
unsigned int arr_len, size_t arr_stride)
|
||||
{
|
||||
char *dst = arr;
|
||||
const char *src_a = arr_a;
|
||||
const char *src_b = arr_b;
|
||||
|
||||
size_t i = arr_stride * arr_len;
|
||||
while (i--) {
|
||||
*(dst++) = *(src_a++) & *(src_b++);
|
||||
}
|
||||
}
|
||||
|
||||
void _bli_array_binary_or(
|
||||
void *arr, const void *arr_a, const void *arr_b,
|
||||
unsigned int arr_len, size_t arr_stride)
|
||||
{
|
||||
char *dst = arr;
|
||||
const char *src_a = arr_a;
|
||||
const char *src_b = arr_b;
|
||||
|
||||
size_t i = arr_stride * arr_len;
|
||||
while (i--) {
|
||||
*(dst++) = *(src_a++) | *(src_b++);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user