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()
This commit is contained in:
Campbell Barton 2012-05-27 14:43:18 +00:00
parent 8c51ecaf90
commit d4b6927179
3 changed files with 11 additions and 4 deletions

@ -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

@ -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;

@ -1,4 +1,3 @@
# -*- mode: cmake; indent-tabs-mode: t; -*-
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or