diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-05-27 18:43:18 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-05-27 18:43:18 +0400 |
commit | d4b6927179e3a6ac5d4d3efa4b0bb8b785dd1822 (patch) | |
tree | 4bb87a533d50e83a9012a4ddee44b8b64dd1cc92 /source/blender | |
parent | 8c51ecaf9051f4b64d60eaa13371a308846d4941 (diff) |
remove NULL check in TREESTORE macro, the return NULL value wasny checked for by any callers (ie - it would crash later if the arg was NULL anyway)
also comment on the speed of check_persistent()
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_intern.h | 2 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.c | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index d8d10519bd6..f73c031dc7f 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -110,7 +110,7 @@ typedef struct TreeElement { /* get TreeStoreElem associated with a TreeElement * < a: (TreeElement) tree element to find stored element for */ -#define TREESTORE(a) ((a) ? soops->treestore->data + (a)->store_index : NULL) +#define TREESTORE(a) (soops->treestore->data + (a)->store_index) /* size constants */ #define OL_Y_OFFSET 2 diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 8a31305d65e..097823135f3 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -132,6 +132,14 @@ static void outliner_storage_cleanup(SpaceOops *soops) } } +/* XXX - THIS FUNCTION IS INCREDIBLY SLOW + * ... it can bring blenders tools and viewport to a grinding halt becuase of searching + * for duplicate items every times they are added. + * + * TODO (possible speedups) + * - use a hash for duplicate (could even store a hash per type) + * - use mempool for TreeElements + * */ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short type, short nr) { TreeStore *ts; @@ -147,8 +155,8 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty /* check if 'te' is in treestore */ tselem = ts->data; for (a = 0; a < ts->usedelem; a++, tselem++) { - if (tselem->id == id && tselem->used == 0) { - if ((type == 0 && tselem->type == 0) || (tselem->type == type && tselem->nr == nr)) { + if ((tselem->used == 0) && (tselem->type == type) && (tselem->id == id)) { + if ((type == 0) || (tselem->nr == nr)) { te->store_index = a; tselem->used = 1; return; |