Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-02-02 10:41:02 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-02-02 10:41:59 +0400
commit42b68c2b1d56a6121dcf6b0aedadc9beae700616 (patch)
treedd2b95111cb35d095ef820c2780c605eeca51a9f /source/blender/editors/mesh
parentb4ae05e4db8bdca739d61947b8bf680bea635ae9 (diff)
BMesh: optimize loop_find_regions, reserve array size
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r--source/blender/editors/mesh/editmesh_select.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index 1944ce84be7..0078dd5ccaf 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -3070,38 +3070,38 @@ static int loop_find_region(BMLoop *l, int flag,
static int verg_radial(const void *va, const void *vb)
{
- BMEdge *e1 = *((void **)va);
- BMEdge *e2 = *((void **)vb);
+ BMEdge *e_a = *((BMEdge **)va);
+ BMEdge *e_b = *((BMEdge **)vb);
+
int a, b;
+ a = BM_edge_face_count(e_a);
+ b = BM_edge_face_count(e_b);
- a = BM_edge_face_count(e1);
- b = BM_edge_face_count(e2);
-
- if (a > b) return -1;
- if (a == b) return 0;
- if (a < b) return 1;
-
- return -1;
+ if (a > b) return -1;
+ if (a < b) return 1;
+ return 0;
}
-static int loop_find_regions(BMEditMesh *em, int selbigger)
+static int loop_find_regions(BMEditMesh *em, const bool selbigger)
{
SmallHash visithash;
BMIter iter;
- BMEdge *e, **edges = NULL;
- BLI_array_declare(edges);
+ const int edges_len = em->bm->totedgesel;
+ BMEdge *e, **edges;
BMFace *f;
int count = 0, i;
- BLI_smallhash_init(&visithash);
+ BLI_smallhash_init_ex(&visithash, edges_len);
+ edges = MEM_mallocN(sizeof(*edges) * edges_len, __func__);
BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) {
BM_elem_flag_disable(f, BM_ELEM_TAG);
}
+ i = 0;
BM_ITER_MESH (e, &iter, em->bm, BM_EDGES_OF_MESH) {
if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
- BLI_array_append(edges, e);
+ edges[i++] = e;
BM_elem_flag_enable(e, BM_ELEM_TAG);
}
else {
@@ -3110,9 +3110,9 @@ static int loop_find_regions(BMEditMesh *em, int selbigger)
}
/* sort edges by radial cycle length */
- qsort(edges, BLI_array_count(edges), sizeof(void *), verg_radial);
+ qsort(edges, edges_len, sizeof(*edges), verg_radial);
- for (i = 0; i < BLI_array_count(edges); i++) {
+ for (i = 0; i < edges_len; i++) {
BMIter liter;
BMLoop *l;
BMFace **region = NULL, **region_out;
@@ -3161,7 +3161,7 @@ static int loop_find_regions(BMEditMesh *em, int selbigger)
}
}
- BLI_array_free(edges);
+ MEM_freeN(edges);
BLI_smallhash_release(&visithash);
return count;