Commit: a63aa0524a2e7d0706983b5124d21fefc5b63c59
Author: Bastien Montagne
Date:   Mon Jun 16 16:57:27 2014 +0200
https://developer.blender.org/rBa63aa0524a2e7d0706983b5124d21fefc5b63c59

Modifications from Campbell's review, thanks! :)

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

M       source/blender/blenlib/BLI_string.h
M       source/blender/blenlib/intern/string.c
M       source/blender/python/generic/py_capi_utils.c
M       source/blender/python/generic/py_capi_utils.h
M       source/blender/python/intern/CMakeLists.txt
M       source/blender/python/intern/bpy_interface.c
D       source/blender/python/intern/bpy_interface.h
M       source/blender/python/intern/bpy_utils_units.c

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

diff --git a/source/blender/blenlib/BLI_string.h 
b/source/blender/blenlib/BLI_string.h
index 2cf9047..d3172fd 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -76,6 +76,8 @@ void BLI_ascii_strtolower(char *str, const size_t len) 
ATTR_NONNULL();
 void BLI_ascii_strtoupper(char *str, const size_t len) ATTR_NONNULL();
 int BLI_str_rstrip_float_zero(char *str, const char pad) ATTR_NONNULL();
 
+int BLI_str_index_in_array(const char *str, const char **str_array, const int 
len);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenlib/intern/string.c 
b/source/blender/blenlib/intern/string.c
index ab81c8f..8a4de00 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -639,3 +639,36 @@ int BLI_str_rstrip_float_zero(char *str, const char pad)
 
        return totstrip;
 }
+
+/**
+ * Return index of a string in a string array.
+ * Note it accepts a 'null' len value (-1), in which case it expects str_array 
to be NULL terminated.
+ *
+ * \param str The string to find.
+ * \param str_array The array of strings, must be NULL-terminated if len is -1.
+ * \param len the length of the array, or -1 for a NULL-terminated array.
+ * \return The index of str in str_array if found, else -1.
+ */
+int BLI_str_index_in_array(const char *str, const char **str_array, const int 
len)
+{
+       int idx;
+       char **arr = str_array;
+
+       if (len == -1) {
+               for (idx = 0; *arr; ++arr, ++idx) {
+                       if (STREQ(str, *arr)) {
+                               break;
+                       }
+               }
+               return *arr ? idx : -1;
+       }
+       else {
+               for (idx = 0; idx < len; ++arr, ++idx) {
+                       if (STREQ(str, *arr)) {
+                               break;
+                       }
+               }
+               return (idx == len) ? -1 : idx;
+       }
+}
+
diff --git a/source/blender/python/generic/py_capi_utils.c 
b/source/blender/python/generic/py_capi_utils.c
index c000478..680bd73 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -905,3 +905,71 @@ PyObject *PyC_FlagSet_FromBitfield(PyC_FlagSet *items, int 
flag)
 
        return ret;
 }
+
+
+/* return -1 on error, else 0
+ * Note it is caller's responsibility to acquire & release GIL!
+ */
+int PyC_RunString_AsNumber(const char *expr, double *value, const char 
*filename)
+{
+       PyObject *py_dict, *mod, *retval;
+       int error_ret = 0;
+       PyObject *main_mod = NULL;
+
+       PyC_MainModule_Backup(&main_mod);
+
+       py_dict = PyC_DefaultNameSpace(filename);
+
+       mod = PyImport_ImportModule("math");
+       if (mod) {
+               PyDict_Merge(py_dict, PyModule_GetDict(mod), 0); /* 0 - don't 
overwrite existing values */
+               Py_DECREF(mod);
+       }
+       else { /* highly unlikely but possibly */
+               PyErr_Print();
+               PyErr_Clear();
+       }
+
+       retval = PyRun_String(expr, Py_eval_input, py_dict, py_dict);
+
+       if (retval == NULL) {
+               error_ret = -1;
+       }
+       else {
+               double val;
+
+               if (PyTuple_Check(retval)) {
+                       /* Users my have typed in 10km, 2m
+                        * add up all values */
+                       int i;
+                       val = 0.0;
+
+                       for (i = 0; i < PyTuple_GET_SIZE(retval); i++) {
+                               const double val_item = 
PyFloat_AsDouble(PyTuple_GET_ITEM(retval, i));
+                               if (val_item == -1 && PyErr_Occurred()) {
+                                       val = -1;
+                                       break;
+                               }
+                               val += val_item;
+                       }
+               }
+               else {
+                       val = PyFloat_AsDouble(retval);
+               }
+               Py_DECREF(retval);
+
+               if (val == -1 && PyErr_Occurred()) {
+                       error_ret = -1;
+               }
+               else if (!finite(val)) {
+                       *value = 0.0;
+               }
+               else {
+                       *value = val;
+               }
+       }
+
+       PyC_MainModule_Restore(main_mod);
+
+       return error_ret;
+}
diff --git a/source/blender/python/generic/py_capi_utils.h 
b/source/blender/python/generic/py_capi_utils.h
index 0afc4dd..559a8e1 100644
--- a/source/blender/python/generic/py_capi_utils.h
+++ b/source/blender/python/generic/py_capi_utils.h
@@ -73,4 +73,6 @@ int       PyC_FlagSet_ValueFromID(PyC_FlagSet *item, const 
char *identifier, int
 int       PyC_FlagSet_ToBitfield(PyC_FlagSet *items, PyObject *value, int 
*r_value, const char *error_prefix);
 PyObject *PyC_FlagSet_FromBitfield(PyC_FlagSet *items, int flag);
 
+int PyC_RunString_AsNumber(const char *expr, double *value, const char 
*filename);
+
 #endif  /* __PY_CAPI_UTILS_H__ */
diff --git a/source/blender/python/intern/CMakeLists.txt 
b/source/blender/python/intern/CMakeLists.txt
index d85ec18..70b4df7 100644
--- a/source/blender/python/intern/CMakeLists.txt
+++ b/source/blender/python/intern/CMakeLists.txt
@@ -81,7 +81,6 @@ set(SRC
        bpy_app_oiio.h
        bpy_app_translations.h
        bpy_driver.h
-       bpy_interface.h
        bpy_intern_string.h
        bpy_library.h
        bpy_operator.h
diff --git a/source/blender/python/intern/bpy_interface.c 
b/source/blender/python/intern/bpy_interface.c
index 69f376d..a29e7f6 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -59,7 +59,6 @@
 #include "bpy_path.h"
 #include "bpy_util.h"
 #include "bpy_traceback.h"
-#include "bpy_interface.h"
 #include "bpy_intern_string.h"
 
 #include "DNA_text_types.h"
@@ -567,73 +566,6 @@ void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr)
        PyGILState_Release(gilstate);
 }
 
-/* return -1 on error, else 0
- * Note it is caller's responsibility to acquire & release GIL!
- */
-int bpy_button_exec(const char *expr, double *value)
-{
-       PyObject *py_dict, *mod, *retval;
-       int error_ret = 0;
-       PyObject *main_mod = NULL;
-
-       PyC_MainModule_Backup(&main_mod);
-
-       py_dict = PyC_DefaultNameSpace("<blender button>");
-
-       mod = PyImport_ImportModule("math");
-       if (mod) {
-               PyDict_Merge(py_dict, PyModule_GetDict(mod), 0); /* 0 - don't 
overwrite existing values */
-               Py_DECREF(mod);
-       }
-       else { /* highly unlikely but possibly */
-               PyErr_Print();
-               PyErr_Clear();
-       }
-
-       retval = PyRun_String(expr, Py_eval_input, py_dict, py_dict);
-
-       if (retval == NULL) {
-               error_ret = -1;
-       }
-       else {
-               double val;
-
-               if (PyTuple_Check(retval)) {
-                       /* Users my have typed in 10km, 2m
-                        * add up all values */
-                       int i;
-                       val = 0.0;
-
-                       for (i = 0; i < PyTuple_GET_SIZE(retval); i++) {
-                               const double val_item = 
PyFloat_AsDouble(PyTuple_GET_ITEM(retval, i));
-                               if (val_item == -1 && PyErr_Occurred()) {
-                                       val = -1;
-                                       break;
-                               }
-                               val += val_item;
-                       }
-               }
-               else {
-                       val = PyFloat_AsDouble(retval);
-               }
-               Py_DECREF(retval);
-
-               if (val == -1 && PyErr_Occurred()) {
-                       error_ret = -1;
-               }
-               else if (!finite(val)) {
-                       *value = 0.0;
-               }
-               else {
-                       *value = val;
-               }
-       }
-
-       PyC_MainModule_Restore(main_mod);
-
-       return error_ret;
-}
-
 /* return -1 on error, else 0 */
 int BPY_button_exec(bContext *C, const char *expr, double *value, const bool 
verbose)
 {
@@ -649,7 +581,7 @@ int BPY_button_exec(bContext *C, const char *expr, double 
*value, const bool ver
 
        bpy_context_set(C, &gilstate);
 
-       error_ret = bpy_button_exec(expr, value);
+       error_ret = PyC_RunString_AsNumber(expr, value, "<blender button>");
 
        if (error_ret) {
                if (verbose) {
diff --git a/source/blender/python/intern/bpy_interface.h 
b/source/blender/python/intern/bpy_interface.h
deleted file mode 100644
index 31e0ea2..0000000
--- a/source/blender/python/intern/bpy_interface.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contributor(s): Bastien Montagne
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef __BPY_INTERFACE_H__
-#define __BPY_INTERFACE_H__
-
-/** \file blender/python/intern/bpy_interface.h
- *  \ingroup pythonintern
- */
-
-int bpy_button_exec(const char *expr, double *value);
-
-#endif  /* __BPY_INTERFACE_H__ */
diff --git a/source/blender/python/intern/bpy_utils_units.c 
b/source/blender/python/intern/bpy_utils_units.c
index e37c2ff..b78e035 100644
--- a/source/blender/python/intern/bpy_utils_units.c
+++ b/source/blender/python/intern/bpy_utils_units.c
@@ -40,7 +40,8 @@
 
 #include "BPY_extern.h"
 #include "bpy_utils_units.h"
-#include "bpy_interface.h"
+
+#include "../generic/py_capi_utils.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -59,7 +60,7 @@ typedef struct
 } BlenderUtilsUnits;
 
 /* Our singleton instance pointer */
-static BlenderUtilsUnits *_units = NULL;
+static BlenderUtilsUnits *bpyunits_units = NULL;
 
 
 /***** C-defined systems and types *****/
@@ -68,14 +69,14 @@ static PyTypeObject BlenderUtilsUnitsSystemsType;
 static PyTypeObject BlenderUtilsUnitsCategoriesType;
 
 /* XXX Maybe better as externs of BKE_unit.h ? */
-static const char *_usystems[] = {
+static const char *bpyunits_usystems[] = {
        "NONE",
        "METRIC",
        "IMPERIAL",
        NULL,
 };
 
-static const char *_ucategories[] = {
+static const char *bpyunits_ucategories[] = {
        "NONE",
        "LENGTH",
        "AREA",
@@ -93,8 +94,8 @@ static const char *_ucategories[] = {
  * This allows us to avoid many handwriting, and above all, to keep all 
systems/categories definition stuff in
  * BKE_unit.h!
  */
-static PyStructSequence_Field utils_units_systems_fields[sizeof(_usystems) / 
sizeof(*_usystems)] = {{NULL}};
-static PyStructSequence_Field 
utils_units_categories_fields[sizeof(_ucategories) / sizeof(*_ucategories)] = 
{{NULL}};
+static PyStructSequence_Field 
utils_units_systems_fields[ARRAY_SIZE(bpyunits_usystems)] = {{NULL}};
+static PyStructSequence_Field 
utils_units_categories_fields[ARRAY_SIZE(bpyunits_ucategories)] = {{NULL}};
 
 static PyStructSequence_Desc utils_units_systems_desc = {
        (char *)"bpy.utils.units.systems",     /* name */
@@ -120,7 +121,7 @@ static PyObject *utils_units_systems_make(void)
                return NULL;
        }
 
-       for (sys = _usystems; *sys; sys++) {
+       for (sys = bpyunits_usystems; *sys; sys++) {
                PyStructSequence_SET_ITEM(units_systems, pos++, PyUnicode_F

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to