[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