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>2015-12-10 15:39:50 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-12-10 15:42:52 +0300
commit5452df79846387fa0fd865281bdab048b11c4019 (patch)
tree3fd11d00cde5a6e71d9ef4ab0e7bac568f368dfc /source/blender/bmesh/tools/bmesh_intersect.c
parent9ad13d70faff0c510c313a7d58a58b974e8ce11f (diff)
BMesh: minor optimization for intersect
Avoid double lookup on insertion ghash
Diffstat (limited to 'source/blender/bmesh/tools/bmesh_intersect.c')
-rw-r--r--source/blender/bmesh/tools/bmesh_intersect.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/source/blender/bmesh/tools/bmesh_intersect.c b/source/blender/bmesh/tools/bmesh_intersect.c
index 24f7fe2db64..0c9cace483c 100644
--- a/source/blender/bmesh/tools/bmesh_intersect.c
+++ b/source/blender/bmesh/tools/bmesh_intersect.c
@@ -147,22 +147,21 @@ static bool ghash_insert_link(
GHash *gh, void *key, void *val, bool use_test,
MemArena *mem_arena)
{
+ void **ls_base_p;
struct LinkBase *ls_base;
LinkNode *ls;
- ls_base = BLI_ghash_lookup(gh, key);
-
- if (ls_base) {
+ if (!BLI_ghash_ensure_p(gh, key, &ls_base_p)) {
+ ls_base = *ls_base_p = BLI_memarena_alloc(mem_arena, sizeof(*ls_base));
+ ls_base->list = NULL;
+ ls_base->list_len = 0;
+ }
+ else {
+ ls_base = *ls_base_p;
if (use_test && (BLI_linklist_index(ls_base->list, key) != -1)) {
return false;
}
}
- else {
- ls_base = BLI_memarena_alloc(mem_arena, sizeof(*ls_base));
- ls_base->list = NULL;
- ls_base->list_len = 0;
- BLI_ghash_insert(gh, key, ls_base);
- }
ls = BLI_memarena_alloc(mem_arena, sizeof(*ls));
ls->next = ls_base->list;