[Bf-blender-cvs] [c86a519] master: Use qsort_r for BMesh Py API

Campbell Barton noreply at git.blender.org
Tue Sep 1 06:03:01 CEST 2015


Commit: c86a519898a04207dfe141414dda33953a98a7f5
Author: Campbell Barton
Date:   Tue Sep 1 13:56:08 2015 +1000
Branches: master
https://developer.blender.org/rBc86a519898a04207dfe141414dda33953a98a7f5

Use qsort_r for BMesh Py API

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

M	source/blender/python/bmesh/bmesh_py_types.c

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

diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c
index 728332d..c4d11fb 100644
--- a/source/blender/python/bmesh/bmesh_py_types.c
+++ b/source/blender/python/bmesh/bmesh_py_types.c
@@ -27,9 +27,8 @@
  *  \ingroup pybmesh
  */
 
-#include <Python.h>
-
 #include "BLI_math.h"
+#include "BLI_sort.h"
 
 #include "DNA_mesh_types.h"
 #include "DNA_object_types.h"
@@ -41,6 +40,8 @@
 
 #include "bmesh.h"
 
+#include <Python.h>
+
 #include "../mathutils/mathutils.h"
 
 #include "../generic/py_capi_utils.h"
@@ -2455,10 +2456,10 @@ PyDoc_STRVAR(bpy_bmelemseq_sort_doc,
  * Note: the functions below assumes the keys array has been allocated and it
  * has enough elements to complete the task.
  */
-static double *keys = NULL;
 
-static int bpy_bmelemseq_sort_cmp_by_keys_ascending(const void *index1_v, const void *index2_v)
+static int bpy_bmelemseq_sort_cmp_by_keys_ascending(const void *index1_v, const void *index2_v, void *keys_v)
 {
+	const double *keys = keys_v;
 	const int *index1 = (int *)index1_v;
 	const int *index2 = (int *)index2_v;
 
@@ -2467,9 +2468,9 @@ static int bpy_bmelemseq_sort_cmp_by_keys_ascending(const void *index1_v, const
 	else                                    return 0;
 }
 
-static int bpy_bmelemseq_sort_cmp_by_keys_descending(const void *index1_v, const void *index2_v)
+static int bpy_bmelemseq_sort_cmp_by_keys_descending(const void *index1_v, const void *index2_v, void *keys_v)
 {
-	return -bpy_bmelemseq_sort_cmp_by_keys_ascending(index1_v, index2_v);
+	return -bpy_bmelemseq_sort_cmp_by_keys_ascending(index1_v, index2_v, keys_v);
 }
 
 static PyObject *bpy_bmelemseq_sort(BPy_BMElemSeq *self, PyObject *args, PyObject *kw)
@@ -2484,9 +2485,10 @@ static PyObject *bpy_bmelemseq_sort(BPy_BMElemSeq *self, PyObject *args, PyObjec
 	BMIter iter;
 	BMElem *ele;
 
+	double *keys;
 	int *elem_idx;
 	unsigned int *elem_map_idx;
-	int (*elem_idx_compare_by_keys)(const void *, const void *);
+	int (*elem_idx_compare_by_keys)(const void *, const void *, void *);
 
 	unsigned int *vert_idx = NULL;
 	unsigned int *edge_idx = NULL;
@@ -2577,7 +2579,7 @@ static PyObject *bpy_bmelemseq_sort(BPy_BMElemSeq *self, PyObject *args, PyObjec
 	else
 		elem_idx_compare_by_keys = bpy_bmelemseq_sort_cmp_by_keys_ascending;
 
-	qsort(elem_idx, n_elem, sizeof(*elem_idx), elem_idx_compare_by_keys);
+	BLI_qsort_r(elem_idx, n_elem, sizeof(*elem_idx), elem_idx_compare_by_keys, keys);
 
 	elem_map_idx = PyMem_MALLOC(sizeof(*elem_map_idx) * n_elem);
 	if (elem_map_idx == NULL) {




More information about the Bf-blender-cvs mailing list