From 5452df79846387fa0fd865281bdab048b11c4019 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 10 Dec 2015 23:39:50 +1100 Subject: BMesh: minor optimization for intersect Avoid double lookup on insertion ghash --- source/blender/bmesh/tools/bmesh_intersect.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'source/blender/bmesh/tools/bmesh_intersect.c') 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; -- cgit v1.2.3