Add comments for outliner's treestore and treehash (no functional changes)

This commit is contained in:
Sv. Lockal 2013-08-18 20:07:49 +00:00
parent 6fe983ddf5
commit 49b0dbd3a3
2 changed files with 19 additions and 3 deletions

@ -151,7 +151,8 @@ static void outliner_storage_cleanup(SpaceOops *soops)
} }
/* This function hashes only by type, nr and id, while cmp function also compares 'used' flag; /* This function hashes only by type, nr and id, while cmp function also compares 'used' flag;
* This is done to skip full treehash rebuild in outliner_storage_cleanup */ * This is done to skip full treehash rebuild in outliner_storage_cleanup;
* In general hashing by type, nr and id should be enough to distribute elements in buckets uniformly */
static unsigned int tse_hash(const void *ptr) static unsigned int tse_hash(const void *ptr)
{ {
const TreeStoreElem *tse = (const TreeStoreElem *)ptr; const TreeStoreElem *tse = (const TreeStoreElem *)ptr;
@ -194,6 +195,8 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty
} }
if (soops->treehash == NULL) { if (soops->treehash == NULL) {
soops->treehash = BLI_ghash_new(tse_hash, tse_cmp, "treehash"); soops->treehash = BLI_ghash_new(tse_hash, tse_cmp, "treehash");
/* treehash elements are not required to be unique; see soops->treehash comment */
BLI_ghash_flag_set(soops->treehash, GHASH_FLAG_ALLOW_DUPES); BLI_ghash_flag_set(soops->treehash, GHASH_FLAG_ALLOW_DUPES);
} }
@ -205,7 +208,8 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty
} }
} }
/* check for unused tree elements is in treestore */ /* find any unused tree element in treestore and mark it as used
* (note that there may be multiple unused elements in case of linked objects) */
tselem = lookup_treehash(soops->treehash, type, nr, 0, id); tselem = lookup_treehash(soops->treehash, type, nr, 0, id);
if (tselem) { if (tselem) {
te->store_elem = tselem; te->store_elem = tselem;

@ -246,6 +246,13 @@ typedef struct SpaceOops {
View2D v2d DNA_DEPRECATED; /* deprecated, copied to region */ View2D v2d DNA_DEPRECATED; /* deprecated, copied to region */
ListBase tree; ListBase tree;
/* treestore is an ordered list of TreeStoreElem's from outliner tree;
* Note that treestore may contain duplicate elements if element
* is used multiple times in outliner tree (e. g. linked objects)
* Also note that BLI_mempool can not be read/written in DNA directly,
* therefore readfile.c/writefile.c linearize treestore into TreeStore structure
*/
struct BLI_mempool *treestore; struct BLI_mempool *treestore;
/* search stuff */ /* search stuff */
@ -253,7 +260,12 @@ typedef struct SpaceOops {
struct TreeStoreElem search_tse; struct TreeStoreElem search_tse;
short flag, outlinevis, storeflag, search_flags; short flag, outlinevis, storeflag, search_flags;
struct GHash *treehash; /* note, allows duplicates */
/* search index for every element in treestore;
* It is ok for treehash to contain duplicates, because the semantics of its usage
* allows duplicates (see check_persistent)
*/
struct GHash *treehash;
} SpaceOops; } SpaceOops;