60 #define SMHASH_KEY_UNUSED ((uintptr_t)(UINTPTR_MAX - 0))
61 #define SMHASH_CELL_FREE ((void *)(UINTPTR_MAX - 1))
62 #define SMHASH_CELL_UNUSED ((void *)(UINTPTR_MAX - 2))
65 #define SMHASH_NEXT(h, hoff) \
66 (CHECK_TYPE_INLINE(&(h), uint *), \
67 CHECK_TYPE_INLINE(&(hoff), uint *), \
68 ((h) + (((hoff) = ((hoff)*2) + 1), (hoff))))
83 #define hashsizes BLI_ghash_hash_sizes
96 return (nentries + (nentries >> 1)) > nbuckets;
103 for (i = 0; i < sh->
nbuckets; i++) {
164 const size_t size =
sizeof(*buckets_old) * nbuckets_old;
165 buckets_old = alloca(
size);
178 for (i = 0; i < nbuckets_old; i++) {
181 e->key = buckets_old[i].
key;
182 e->val = buckets_old[i].
val;
201 if (nentries_reserve) {
290 return e ? &
e->val :
NULL;
333 return e ? &
e->val :
NULL;
361 uint i, linecol = 79,
c = 0;
364 for (i = 0; i < sh->
nbuckets; i++) {
398 double BLI_smallhash_calc_quality(
SmallHash *sh)
407 for (i = 0; i < sh->
nbuckets; i++) {
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)
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
SmallHashEntry buckets_stack[SMSTACKSIZE]