[Bf-blender-cvs] [e37c876cd77] master: PyAPI: support different int sizes for PyC_AsArray

Campbell Barton noreply at git.blender.org
Tue Jul 27 14:39:04 CEST 2021


Commit: e37c876cd77dd26d540597b3796621a4f22d1518
Author: Campbell Barton
Date:   Tue Jul 27 22:35:01 2021 +1000
Branches: master
https://developer.blender.org/rBe37c876cd77dd26d540597b3796621a4f22d1518

PyAPI: support different int sizes for PyC_AsArray

===================================================================

M	source/blender/python/generic/py_capi_utils.c

===================================================================

diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index 37b2849aa94..75d7ebd3ee2 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -103,6 +103,13 @@ int PyC_AsArray_FAST(void *array,
   }
   else if (type == &PyLong_Type) {
     switch (array_item_size) {
+      case sizeof(int64_t): {
+        int64_t *array_int = array;
+        for (i = 0; i < length; i++) {
+          array_int[i] = PyC_Long_AsI64(value_fast_items[i]);
+        }
+        break;
+      }
       case sizeof(int32_t): {
         int32_t *array_int = array;
         for (i = 0; i < length; i++) {
@@ -110,6 +117,20 @@ int PyC_AsArray_FAST(void *array,
         }
         break;
       }
+      case sizeof(int16_t): {
+        int16_t *array_int = array;
+        for (i = 0; i < length; i++) {
+          array_int[i] = PyC_Long_AsI16(value_fast_items[i]);
+        }
+        break;
+      }
+      case sizeof(int8_t): {
+        int8_t *array_int = array;
+        for (i = 0; i < length; i++) {
+          array_int[i] = PyC_Long_AsI8(value_fast_items[i]);
+        }
+        break;
+      }
       default: {
         /* Internal error. */
         BLI_assert_unreachable();
@@ -118,8 +139,29 @@ int PyC_AsArray_FAST(void *array,
   }
   else if (type == &PyBool_Type) {
     switch (array_item_size) {
-      case sizeof(bool): {
-        bool *array_bool = array;
+      case sizeof(int64_t): {
+        int64_t *array_bool = array;
+        for (i = 0; i < length; i++) {
+          array_bool[i] = (PyLong_AsLong(value_fast_items[i]) != 0);
+        }
+        break;
+      }
+      case sizeof(int32_t): {
+        int32_t *array_bool = array;
+        for (i = 0; i < length; i++) {
+          array_bool[i] = (PyLong_AsLong(value_fast_items[i]) != 0);
+        }
+        break;
+      }
+      case sizeof(int16_t): {
+        int16_t *array_bool = array;
+        for (i = 0; i < length; i++) {
+          array_bool[i] = (PyLong_AsLong(value_fast_items[i]) != 0);
+        }
+        break;
+      }
+      case sizeof(int8_t): {
+        int8_t *array_bool = array;
         for (i = 0; i < length; i++) {
           array_bool[i] = (PyLong_AsLong(value_fast_items[i]) != 0);
         }



More information about the Bf-blender-cvs mailing list