44 #define SMHASH_KEY_UNUSED ((uintptr_t)(UINTPTR_MAX - 0))
45 #define SMHASH_CELL_FREE ((void *)(UINTPTR_MAX - 1))
46 #define SMHASH_CELL_UNUSED ((void *)(UINTPTR_MAX - 2))
49 #define SMHASH_NEXT(h, hoff) \
50 (CHECK_TYPE_INLINE(&(h), uint *), \
51 CHECK_TYPE_INLINE(&(hoff), uint *), \
52 ((h) + (((hoff) = ((hoff)*2) + 1), (hoff))))
67 #define hashsizes BLI_ghash_hash_sizes
80 return (nentries + (nentries >> 1)) > nbuckets;
87 for (i = 0; i <
sh->nbuckets; i++) {
142 const uint nbuckets_old =
sh->nbuckets;
143 const bool was_alloc = (buckets_old !=
sh->buckets_stack);
148 const size_t size =
sizeof(*buckets_old) * nbuckets_old;
149 buckets_old = alloca(
size);
150 memcpy(buckets_old,
sh->buckets,
size);
152 sh->buckets =
sh->buckets_stack;
158 sh->nbuckets = nbuckets;
162 for (i = 0; i < nbuckets_old; i++) {
165 e->key = buckets_old[i].
key;
166 e->val = buckets_old[i].
val;
183 sh->buckets =
sh->buckets_stack;
185 if (nentries_reserve) {
203 if (
sh->buckets !=
sh->buckets_stack) {
266 return e ? &
e->val :
NULL;
278 return (
int)
sh->nentries;
309 return e ? &
e->val :
NULL;
337 uint i, linecol = 79,
c = 0;
340 for (i = 0; i <
sh->nbuckets; i++) {
348 printf(
"%2x", (
uint)
sh->buckets[i].key);
351 if (i !=
sh->nbuckets - 1) {
373 if (
sh->nentries == 0) {
377 for (i = 0; i <
sh->nbuckets; i++) {
384 for (
e = &
sh->buckets[h %
sh->nbuckets];
e != e_final;
392 return ((
double)(
sh->nentries +
sum) / (
double)
sh->nentries);
bool BLI_smallhash_remove(SmallHash *sh, uintptr_t key) ATTR_NONNULL(1)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static T sum(const btAlignedObjectArray< T > &items)
ccl_gpu_kernel_postfix ccl_global float int int int int sh
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
void ** BLI_smallhash_lookup_p(const SmallHash *sh, uintptr_t key)
void BLI_smallhash_insert(SmallHash *sh, uintptr_t key, void *item)
void BLI_smallhash_init_ex(SmallHash *sh, const uint nentries_reserve)
BLI_INLINE bool smallhash_val_is_used(const void *val)
#define SMHASH_CELL_UNUSED
BLI_INLINE SmallHashEntry * smallhash_iternext(SmallHashIter *iter, uintptr_t *key)
bool BLI_smallhash_reinsert(SmallHash *sh, uintptr_t key, void *item)
BLI_INLINE SmallHashEntry * smallhash_lookup_first_free(SmallHash *sh, const uintptr_t key)
BLI_INLINE void smallhash_init_empty(SmallHash *sh)
BLI_INLINE void smallhash_buckets_reserve(SmallHash *sh, const uint nentries_reserve)
BLI_INLINE void smallhash_resize_buckets(SmallHash *sh, const uint nbuckets)
void * BLI_smallhash_lookup(const SmallHash *sh, uintptr_t key)
bool BLI_smallhash_haskey(const SmallHash *sh, uintptr_t key)
BLI_INLINE SmallHashEntry * smallhash_lookup(const SmallHash *sh, const uintptr_t key)
#define SMHASH_KEY_UNUSED
void ** BLI_smallhash_iternew_p(const SmallHash *sh, SmallHashIter *iter, uintptr_t *key)
BLI_INLINE uint smallhash_key(const uintptr_t key)
void BLI_smallhash_release(SmallHash *sh)
const uint BLI_ghash_hash_sizes[]
void BLI_smallhash_init(SmallHash *sh)
int BLI_smallhash_len(const SmallHash *sh)
void ** BLI_smallhash_iternext_p(SmallHashIter *iter, uintptr_t *key)
void * BLI_smallhash_iternext(SmallHashIter *iter, uintptr_t *key)
BLI_INLINE bool smallhash_test_expand_buckets(const uint nentries, const uint nbuckets)
#define SMHASH_NEXT(h, hoff)
void * BLI_smallhash_iternew(const SmallHash *sh, SmallHashIter *iter, uintptr_t *key)
_W64 unsigned int uintptr_t
unsigned __int64 uint64_t