remove NULL check in TREESTORE macro, the return NULL value wasny checked for by...
authorCampbell Barton <ideasman42@gmail.com>
Sun, 27 May 2012 14:43:18 +0000 (14:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 27 May 2012 14:43:18 +0000 (14:43 +0000)
also comment on the speed of check_persistent()

source/blender/editors/space_outliner/outliner_intern.h
source/blender/editors/space_outliner/outliner_tree.c
source/blenderplayer/CMakeLists.txt

index d8d10519bd6ea92aa2dff9a05afd05b89e2ab6db..f73c031dc7f663852a744d37862d4a1e5cfcb9cc 100644 (file)
@@ -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
index 8a31305d65e1d7bc5c1ec33db5be0c39dbb5dc12..097823135f34ae6a6c96a6d99379bd59d12da13a 100644 (file)
@@ -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;
index 7edf53148212f4d1785e7eef7e1c39643c70d86b..cfccd92ef86c41bbcee7b32f01eec407d5bf6501 100644 (file)
@@ -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