[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