Add comments for outliner's treestore and treehash (no functional changes)
This commit is contained in:
parent
6fe983ddf5
commit
49b0dbd3a3
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user