[Bf-blender-cvs] [5128637] master: BLI_array_utils: add binary and/or functions
Campbell Barton
noreply at git.blender.org
Mon Jan 18 23:31:05 CET 2016
Commit: 5128637d480a376711798858a1dbdb3302039426
Author: Campbell Barton
Date: Tue Jan 19 07:00:55 2016 +1100
Branches: master
https://developer.blender.org/rB5128637d480a376711798858a1dbdb3302039426
BLI_array_utils: add binary and/or functions
===================================================================
M source/blender/blenlib/BLI_array_utils.h
M source/blender/blenlib/intern/array_utils.c
===================================================================
diff --git a/source/blender/blenlib/BLI_array_utils.h b/source/blender/blenlib/BLI_array_utils.h
index ff7976d..c5359d5 100644
--- a/source/blender/blenlib/BLI_array_utils.h
+++ b/source/blender/blenlib/BLI_array_utils.h
@@ -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__ */
diff --git a/source/blender/blenlib/intern/array_utils.c b/source/blender/blenlib/intern/array_utils.c
index cef912e..52ca835 100644
--- a/source/blender/blenlib/intern/array_utils.c
+++ b/source/blender/blenlib/intern/array_utils.c
@@ -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++);
+ }
+}
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list