44#define TSEGROUP_LASTUSED_RESET_VALUE 10000
65 : id(elem.id), type(elem.type), nr(elem.nr)
78 return (a.id ==
b.id) && (a.type ==
b.type) && (a.nr ==
b.nr);
92 std::unique_ptr<TreeHash> tree_hash{
new TreeHash()};
93 tree_hash->fill_treehash(treestore);
111 for (
auto &group : elem_groups_.values()) {
113 group->lastused_reset_count = 0;
119 elem_groups_.clear();
120 fill_treehash(treestore);
125 std::unique_ptr<TseGroup> &group = elem_groups_.lookup_or_add_cb(
127 group->add_element(elem);
132 TseGroup *group = lookup_group(elem);
135 if (group->elems.size() <= 1) {
140 group->remove_element(elem);
146 const auto *group = elem_groups_.lookup_ptr(key);
153TseGroup *TreeHash::lookup_group(
const TreeStoreElem &elem)
const
155 return lookup_group(TreeStoreElemKey(elem));
158TseGroup *TreeHash::lookup_group(
const short type,
const short nr,
ID *
id)
const
160 TreeStoreElemKey key(
id, type, nr);
164 return lookup_group(key);
169 TseGroup *group = lookup_group(type, nr,
id);
176 const int size = group->elems.size();
177 int offset = group->lastused;
179 for (
int i = 0; i <
size; i++, offset++) {
182 if (offset >= size) {
184 group->lastused_reset_count++;
185 group->lastused = group->elems.size() - 1;
188 group->lastused_reset_count = 0;
192 if (!group->elems[offset]->used) {
193 group->lastused = offset;
194 return group->elems[offset];
202 const TseGroup *group = lookup_group(type, nr,
id);
203 return group ? group->elems[0] :
nullptr;
void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) ATTR_NONNULL()
void * BLI_mempool_iterstep(BLI_mempool_iter *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
int64_t append_and_get_index(const T &value)
void remove(const int64_t index)
int64_t first_index_of(const T &value) const
void rebuild_from_treestore(BLI_mempool &treestore)
TreeStoreElem * lookup_unused(short type, short nr, ID *id) const
TreeStoreElem * lookup_any(short type, short nr, ID *id) const
static std::unique_ptr< TreeHash > create_from_treestore(BLI_mempool &treestore)
void add_element(TreeStoreElem &elem)
void remove_element(TreeStoreElem &elem)
TreeStoreElemKey(const TreeStoreElem &elem)
void remove_element(TreeStoreElem &elem)
blender::Vector< TreeStoreElem * > elems
void add_element(TreeStoreElem &elem)
local_group_size(16, 16) .push_constant(Type b
bool operator==(const TreeStoreElemKey &a, const TreeStoreElemKey &b)
uint64_t get_default_hash(const T &v)
#define TSEGROUP_LASTUSED_RESET_VALUE
unsigned __int64 uint64_t