[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40590] trunk/blender: py api
Campbell Barton
ideasman42 at gmail.com
Tue Sep 27 07:28:07 CEST 2011
Revision: 40590
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40590
Author: campbellbarton
Date: 2011-09-27 05:28:06 +0000 (Tue, 27 Sep 2011)
Log Message:
-----------
py api
- use Py_ssize_t when dealing with python sequence sizes
- dont call PySequence_Size(py_b) in a loop (its slow).
- use faster sequence/float parsing in aud.Factory.filter
Modified Paths:
--------------
trunk/blender/intern/audaspace/Python/AUD_PyAPI.cpp
trunk/blender/source/blender/python/generic/IDProp.c
trunk/blender/source/blender/python/generic/bgl.c
trunk/blender/source/blender/python/intern/bpy_rna.c
trunk/blender/source/blender/python/intern/bpy_rna_array.c
Modified: trunk/blender/intern/audaspace/Python/AUD_PyAPI.cpp
===================================================================
--- trunk/blender/intern/audaspace/Python/AUD_PyAPI.cpp 2011-09-27 04:07:48 UTC (rev 40589)
+++ trunk/blender/intern/audaspace/Python/AUD_PyAPI.cpp 2011-09-27 05:28:06 UTC (rev 40590)
@@ -848,6 +848,8 @@
{
PyObject* py_b;
PyObject* py_a = NULL;
+ Py_ssize_t py_a_len;
+ Py_ssize_t py_b_len;
if(!PyArg_ParseTuple(args, "O|O:filter", &py_b, &py_a))
return NULL;
@@ -858,7 +860,10 @@
return NULL;
}
- if(!PySequence_Size(py_b) || (py_a != NULL && !PySequence_Size(py_a)))
+ py_a_len= py_a ? PySequence_Size(py_a) : 0;
+ py_b_len= PySequence_Size(py_b);
+
+ if(!py_b_len || ((py_a != NULL) && !py_b_len))
{
PyErr_SetString(PyExc_ValueError, "The sequence has to contain at least one value!");
return NULL;
@@ -867,30 +872,31 @@
std::vector<float> a, b;
PyObject* py_value;
float value;
- int result;
- for(int i = 0; i < PySequence_Size(py_b); i++)
+ for(Py_ssize_t i = 0; i < py_b_len; i++)
{
py_value = PySequence_GetItem(py_b, i);
- result = PyArg_Parse(py_value, "f:filter", &value);
+ value= (float)PyFloat_AsDouble(py_value);
Py_DECREF(py_value);
- if(!result)
+ if (value==-1.0f && PyErr_Occurred()) {
return NULL;
+ }
b.push_back(value);
}
if(py_a)
{
- for(int i = 0; i < PySequence_Size(py_a); i++)
+ for(Py_ssize_t i = 0; i < py_a_len; i++)
{
py_value = PySequence_GetItem(py_a, i);
- result = PyArg_Parse(py_value, "f:filter", &value);
+ value= (float)PyFloat_AsDouble(py_value);
Py_DECREF(py_value);
- if(!result)
+ if (value==-1.0f && PyErr_Occurred()) {
return NULL;
+ }
a.push_back(value);
}
Modified: trunk/blender/source/blender/python/generic/IDProp.c
===================================================================
--- trunk/blender/source/blender/python/generic/IDProp.c 2011-09-27 04:07:48 UTC (rev 40589)
+++ trunk/blender/source/blender/python/generic/IDProp.c 2011-09-27 05:28:06 UTC (rev 40590)
@@ -269,7 +269,7 @@
PyObject *item;
int type= IDP_INT;
- int i, len = PySequence_Size(seq);
+ Py_ssize_t i, len = PySequence_Size(seq);
for (i=0; i < len; i++) {
item = PySequence_GetItem(seq, i);
if (PyFloat_Check(item)) {
Modified: trunk/blender/source/blender/python/generic/bgl.c
===================================================================
--- trunk/blender/source/blender/python/generic/bgl.c 2011-09-27 04:07:48 UTC (rev 40589)
+++ trunk/blender/source/blender/python/generic/bgl.c 2011-09-27 05:28:06 UTC (rev 40590)
@@ -286,8 +286,8 @@
Buffer *buffer;
int dimensions[MAX_DIMENSIONS];
- int i, type;
- int ndimensions = 0;
+ int type;
+ Py_ssize_t i, ndimensions = 0;
if(kwds && PyDict_Size(kwds)) {
PyErr_SetString(PyExc_TypeError,
Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c 2011-09-27 04:07:48 UTC (rev 40589)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c 2011-09-27 05:28:06 UTC (rev 40590)
@@ -1718,7 +1718,7 @@
}
case PROP_COLLECTION:
{
- int seq_len, i;
+ Py_ssize_t seq_len, i;
PyObject *item;
PointerRNA itemptr;
ListBase *lb;
@@ -1736,7 +1736,7 @@
}
seq_len= PySequence_Size(value);
- for(i=0; i<seq_len; i++) {
+ for(i=0; i < seq_len; i++) {
item= PySequence_GetItem(value, i);
if(item==NULL) {
Modified: trunk/blender/source/blender/python/intern/bpy_rna_array.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna_array.c 2011-09-27 04:07:48 UTC (rev 40589)
+++ trunk/blender/source/blender/python/intern/bpy_rna_array.c 2011-09-27 05:28:06 UTC (rev 40590)
@@ -61,12 +61,12 @@
static int validate_array_type(PyObject *seq, int dim, int totdim, int dimsize[],
ItemTypeCheckFunc check_item_type, const char *item_type_str, const char *error_prefix)
{
- int i;
+ Py_ssize_t i;
/* not the last dimension */
if (dim + 1 < totdim) {
/* check that a sequence contains dimsize[dim] items */
- const int seq_size= PySequence_Size(seq);
+ const Py_ssize_t seq_size= PySequence_Size(seq);
if(seq_size == -1) {
PyErr_Format(PyExc_ValueError, "%s sequence expected at dimension %d, not '%s'",
error_prefix, (int)dim + 1, Py_TYPE(seq)->tp_name);
@@ -147,8 +147,8 @@
int totitem= 0;
if(dim > 1) {
- const int seq_size= PySequence_Size(seq);
- int i;
+ const Py_ssize_t seq_size= PySequence_Size(seq);
+ Py_ssize_t i;
for (i= 0; i < seq_size; i++) {
PyObject *item= PySequence_GetItem(seq, i);
if(item) {
@@ -281,9 +281,9 @@
static char *copy_values(PyObject *seq, PointerRNA *ptr, PropertyRNA *prop, int dim, char *data, unsigned int item_size, int *index, ItemConvertFunc convert_item, RNA_SetIndexFunc rna_set_index)
{
- unsigned int i;
int totdim= RNA_property_array_dimension(ptr, prop, NULL);
- const int seq_size= PySequence_Size(seq);
+ const Py_ssize_t seq_size= PySequence_Size(seq);
+ Py_ssize_t i;
/* Regarding PySequence_GetItem() failing.
*
More information about the Bf-blender-cvs
mailing list