diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-12-10 15:39:50 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-12-10 15:42:52 +0300 |
commit | 5452df79846387fa0fd865281bdab048b11c4019 (patch) | |
tree | 3fd11d00cde5a6e71d9ef4ab0e7bac568f368dfc /source/blender | |
parent | 9ad13d70faff0c510c313a7d58a58b974e8ce11f (diff) |
BMesh: minor optimization for intersect
Avoid double lookup on insertion ghash
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_intersect.c | 17 |
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; |