Blender V5.0
BLI_ghash.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
14
15#include "BLI_compiler_attrs.h"
16#include "BLI_compiler_compat.h"
17#include "BLI_sys_types.h" /* for bool */
18
19#define _GHASH_INTERNAL_ATTR
20#ifndef GHASH_INTERNAL_API
21# ifdef __GNUC__
22# undef _GHASH_INTERNAL_ATTR
23# define _GHASH_INTERNAL_ATTR __attribute__((deprecated)) /* not deprecated, just private. */
24# endif
25#endif
26
27/* -------------------------------------------------------------------- */
30
31typedef unsigned int (*GHashHashFP)(const void *key);
33typedef bool (*GHashCmpFP)(const void *a, const void *b);
34typedef void (*GHashKeyFreeFP)(void *key);
35typedef void (*GHashValFreeFP)(void *val);
36typedef void *(*GHashKeyCopyFP)(const void *key);
37typedef void *(*GHashValCopyFP)(const void *val);
38
39typedef struct GHash GHash;
40
41typedef struct GHashIterator {
43 struct Entry *curEntry;
44 unsigned int curBucket;
46
47typedef struct GHashIterState {
48 unsigned int curr_bucket _GHASH_INTERNAL_ATTR;
50
51enum {
52 GHASH_FLAG_ALLOW_DUPES = (1 << 0), /* Only checked for in debug mode */
53 GHASH_FLAG_ALLOW_SHRINK = (1 << 1), /* Allow to shrink buckets' size. */
54
55#ifdef GHASH_INTERNAL_API
56 /* Internal usage only */
57 /* Whether the GHash is actually used as GSet (no value storage). */
58 GHASH_FLAG_IS_GSET = (1 << 16),
59#endif
60};
61
63
64/* -------------------------------------------------------------------- */
69
81 GHashCmpFP cmpfp,
82 const char *info,
83 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
88 GHashCmpFP cmpfp,
89 const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
94GHash *BLI_ghash_copy(const GHash *gh,
95 GHashKeyCopyFP keycopyfp,
104void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
108void BLI_ghash_reserve(GHash *gh, unsigned int nentries_reserve);
116void BLI_ghash_insert(GHash *gh, void *key, void *val);
125 GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
133void *BLI_ghash_replace_key(GHash *gh, void *key);
143void *BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
147void *BLI_ghash_lookup_default(const GHash *gh,
148 const void *key,
149 void *val_default) ATTR_WARN_UNUSED_RESULT;
160void **BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
175bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT;
182bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_val)
192bool BLI_ghash_remove(GHash *gh,
193 const void *key,
194 GHashKeyFreeFP keyfreefp,
195 GHashValFreeFP valfreefp);
199void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
208 GHashKeyFreeFP keyfreefp,
209 GHashValFreeFP valfreefp,
210 unsigned int nentries_reserve);
218void *BLI_ghash_popkey(GHash *gh,
219 const void *key,
224bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
234bool BLI_ghash_pop(GHash *gh, GHashIterState *state, void **r_key, void **r_val)
239unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT;
243void BLI_ghash_flag_set(GHash *gh, unsigned int flag);
247void BLI_ghash_flag_clear(GHash *gh, unsigned int flag);
248
250
251/* -------------------------------------------------------------------- */
254
264
286
291
292struct _gh_Entry {
293 void *next, *key, *val;
294};
296{
297 return ((struct _gh_Entry *)ghi->curEntry)->key;
298}
300{
301 return ((struct _gh_Entry *)ghi->curEntry)->val;
302}
304{
305 return &((struct _gh_Entry *)ghi->curEntry)->val;
306}
308{
309 return !ghi->curEntry;
310}
311/* disallow further access */
312#ifdef __GNUC__
313# pragma GCC poison _gh_Entry
314#else
315# define _gh_Entry void
316#endif
317
318#define GHASH_ITER(gh_iter_, ghash_) \
319 for (BLI_ghashIterator_init(&gh_iter_, ghash_); BLI_ghashIterator_done(&gh_iter_) == false; \
320 BLI_ghashIterator_step(&gh_iter_))
321
322#define GHASH_ITER_INDEX(gh_iter_, ghash_, i_) \
323 for (BLI_ghashIterator_init(&gh_iter_, ghash_), i_ = 0; \
324 BLI_ghashIterator_done(&gh_iter_) == false; \
325 BLI_ghashIterator_step(&gh_iter_), i_++)
326
328
329/* -------------------------------------------------------------------- */
336
337typedef struct GSet GSet;
338
343
345
347
352
354 GSetCmpFP cmpfp,
355 const char *info,
356 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
358 GSetCmpFP cmpfp,
359 const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
364unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT;
365void BLI_gset_flag_set(GSet *gs, unsigned int flag);
366void BLI_gset_flag_clear(GSet *gs, unsigned int flag);
367void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp);
372void BLI_gset_insert(GSet *gs, void *key);
379bool BLI_gset_add(GSet *gs, void *key);
386bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key);
393bool BLI_gset_reinsert(GSet *gs, void *key, GSetKeyFreeFP keyfreefp);
400void *BLI_gset_replace_key(GSet *gs, void *key);
401bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
410 ATTR_NONNULL();
411bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp);
412void BLI_gset_clear_ex(GSet *gs, GSetKeyFreeFP keyfreefp, unsigned int nentries_reserve);
413void BLI_gset_clear(GSet *gs, GSetKeyFreeFP keyfreefp);
414
415/* When set's are used for key & value. */
419void *BLI_gset_lookup(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
424void *BLI_gset_pop_key(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
425
427
428/* -------------------------------------------------------------------- */
431
432/* Rely on inline API for now. */
433
435typedef struct GSetIterator {
437#if defined(__GNUC__) && !defined(__clang__)
438 __attribute__((deprecated))
439#endif
440 ;
442
464{
465 return BLI_ghashIterator_done((const GHashIterator *)gsi);
466}
467
468#define GSET_ITER(gs_iter_, gset_) \
469 for (BLI_gsetIterator_init(&gs_iter_, gset_); BLI_gsetIterator_done(&gs_iter_) == false; \
470 BLI_gsetIterator_step(&gs_iter_))
471
472#define GSET_ITER_INDEX(gs_iter_, gset_, i_) \
473 for (BLI_gsetIterator_init(&gs_iter_, gset_), i_ = 0; \
474 BLI_gsetIterator_done(&gs_iter_) == false; \
475 BLI_gsetIterator_step(&gs_iter_), i_++)
476
478
479/* -------------------------------------------------------------------- */
482
483/* For testing, debugging only */
484#ifdef GHASH_INTERNAL_API
488int BLI_ghash_buckets_len(const GHash *gh);
489int BLI_gset_buckets_len(const GSet *gs);
490
498double BLI_ghash_calc_quality_ex(const GHash *gh,
499 double *r_load,
500 double *r_variance,
501 double *r_prop_empty_buckets,
502 double *r_prop_overloaded_buckets,
503 int *r_biggest_bucket);
504double BLI_gset_calc_quality_ex(const GSet *gs,
505 double *r_load,
506 double *r_variance,
507 double *r_prop_empty_buckets,
508 double *r_prop_overloaded_buckets,
509 int *r_biggest_bucket);
510double BLI_ghash_calc_quality(const GHash *gh);
511double BLI_gset_calc_quality(const GSet *gs);
512#endif /* GHASH_INTERNAL_API */
513
515
516/* -------------------------------------------------------------------- */
519
520#define GHASH_FOREACH_BEGIN(type, var, what) \
521 do { \
522 GHashIterator gh_iter##var; \
523 GHASH_ITER (gh_iter##var, what) { \
524 type var = (type)(BLI_ghashIterator_getValue(&gh_iter##var));
525
526#define GHASH_FOREACH_END() \
527 } \
528 } \
529 while (0)
530
531#define GSET_FOREACH_BEGIN(type, var, what) \
532 do { \
533 GSetIterator gh_iter##var; \
534 GSET_ITER (gh_iter##var, what) { \
535 type var = (type)(BLI_gsetIterator_getKey(&gh_iter##var));
536
537#define GSET_FOREACH_END() \
538 } \
539 } \
540 while (0)
541
543
544/* -------------------------------------------------------------------- */
549
556
557unsigned int BLI_ghashutil_ptrhash(const void *key);
558bool BLI_ghashutil_ptrcmp(const void *a, const void *b);
559
569unsigned int BLI_ghashutil_strhash_n(const char *key, size_t n);
570#define BLI_ghashutil_strhash(key) \
571 (CHECK_TYPE_ANY(key, char *, const char *), BLI_ghashutil_strhash_p(key))
572unsigned int BLI_ghashutil_strhash_p(const void *ptr);
573unsigned int BLI_ghashutil_strhash_p_murmur(const void *ptr);
574bool BLI_ghashutil_strcmp(const void *a, const void *b);
575
576#define BLI_ghashutil_inthash(key) \
577 (CHECK_TYPE_ANY(&(key), int *, const int *), BLI_ghashutil_uinthash((unsigned int)key))
578unsigned int BLI_ghashutil_uinthash(unsigned int key);
579unsigned int BLI_ghashutil_inthash_p(const void *ptr);
580unsigned int BLI_ghashutil_inthash_p_murmur(const void *ptr);
581unsigned int BLI_ghashutil_inthash_p_simple(const void *ptr);
582bool BLI_ghashutil_intcmp(const void *a, const void *b);
583
584size_t BLI_ghashutil_combine_hash(size_t hash_a, size_t hash_b);
585
586unsigned int BLI_ghashutil_uinthash_v4(const unsigned int key[4]);
587#define BLI_ghashutil_inthash_v4(key) \
588 (CHECK_TYPE_ANY(key, int *, const int *), BLI_ghashutil_uinthash_v4((const unsigned int *)key))
589#define BLI_ghashutil_inthash_v4_p ((GSetHashFP)BLI_ghashutil_uinthash_v4)
590#define BLI_ghashutil_uinthash_v4_p ((GSetHashFP)BLI_ghashutil_uinthash_v4)
591unsigned int BLI_ghashutil_uinthash_v4_murmur(const unsigned int key[4]);
592#define BLI_ghashutil_inthash_v4_murmur(key) \
593 (CHECK_TYPE_ANY(key, int *, const int *), \
594 BLI_ghashutil_uinthash_v4_murmur((const unsigned int *)key))
595#define BLI_ghashutil_inthash_v4_p_murmur ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
596#define BLI_ghashutil_uinthash_v4_p_murmur ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
597bool BLI_ghashutil_uinthash_v4_cmp(const void *a, const void *b);
598#define BLI_ghashutil_inthash_v4_cmp BLI_ghashutil_uinthash_v4_cmp
599
600typedef struct GHashPair {
601 const void *first;
602 const void *second;
604
605GHashPair *BLI_ghashutil_pairalloc(const void *first, const void *second);
606unsigned int BLI_ghashutil_pairhash(const void *ptr);
607bool BLI_ghashutil_paircmp(const void *a, const void *b);
608void BLI_ghashutil_pairfree(void *ptr);
609
613
614GHash *BLI_ghash_ptr_new_ex(const char *info,
615 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
617GHash *BLI_ghash_str_new_ex(const char *info,
618 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
620GHash *BLI_ghash_int_new_ex(const char *info,
621 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
623GHash *BLI_ghash_pair_new_ex(const char *info,
624 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
626
627GSet *BLI_gset_ptr_new_ex(const char *info,
628 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
629GSet *BLI_gset_ptr_new(const char *info);
630GSet *BLI_gset_str_new_ex(const char *info,
631 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
632GSet *BLI_gset_str_new(const char *info);
633GSet *BLI_gset_pair_new_ex(const char *info,
634 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
636GSet *BLI_gset_int_new_ex(const char *info,
637 unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
639
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_MALLOC
#define ATTR_NONNULL(...)
#define BLI_INLINE
double BLI_gset_calc_quality(const GSet *gs)
int BLI_ghash_buckets_len(const GHash *gh)
double BLI_ghash_calc_quality_ex(const GHash *gh, double *r_load, double *r_variance, double *r_prop_empty_buckets, double *r_prop_overloaded_buckets, int *r_biggest_bucket)
double BLI_ghash_calc_quality(const GHash *gh)
int BLI_gset_buckets_len(const GSet *gs)
double BLI_gset_calc_quality_ex(const GSet *gs, double *r_load, double *r_variance, double *r_prop_empty_buckets, double *r_prop_overloaded_buckets, int *r_biggest_bucket)
GHash * BLI_ghash_pair_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
struct GHash GHash
Definition BLI_ghash.h:39
struct GSet GSet
Definition BLI_ghash.h:337
void * BLI_gset_pop_key(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_strcmp(const void *a, const void *b)
unsigned int BLI_ghashutil_inthash_p_murmur(const void *ptr)
void * BLI_ghash_lookup_default(const GHash *gh, const void *key, void *val_default) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:738
size_t BLI_ghashutil_combine_hash(size_t hash_a, size_t hash_b)
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.h:295
GSet * BLI_gset_ptr_new(const char *info)
void BLI_ghash_flag_clear(GHash *gh, unsigned int flag)
Definition BLI_ghash.cc:877
unsigned int BLI_ghashutil_strhash_n(const char *key, size_t n)
bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:819
bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key)
Definition BLI_ghash.cc:971
bool BLI_ghash_pop(GHash *gh, GHashIterState *state, void **r_key, void **r_val) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition BLI_ghash.cc:824
void BLI_gset_flag_set(GSet *gs, unsigned int flag)
GHash * BLI_ghash_copy(const GHash *gh, GHashKeyCopyFP keycopyfp, GHashValCopyFP valcopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:691
bool BLI_ghash_reinsert(GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.cc:712
unsigned int BLI_ghashutil_uinthash(unsigned int key)
void BLI_ghashIterator_step(GHashIterator *ghi)
Definition BLI_ghash.cc:911
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_pairhash(const void *ptr)
GHashHashFP GSetHashFP
Definition BLI_ghash.h:339
void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.cc:855
GSet * BLI_gset_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_ptrhash(const void *key)
void BLI_ghashIterator_free(GHashIterator *ghi)
Definition BLI_ghash.cc:925
bool(* GHashCmpFP)(const void *a, const void *b)
Definition BLI_ghash.h:33
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.h:299
GHashKeyCopyFP GSetKeyCopyFP
Definition BLI_ghash.h:342
BLI_INLINE void ** BLI_ghashIterator_getValue_p(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.h:303
GSet * BLI_gset_int_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_flag_clear(GSet *gs, unsigned int flag)
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
void * BLI_gset_replace_key(GSet *gs, void *key)
Definition BLI_ghash.cc:994
void *(* GHashValCopyFP)(const void *val)
Definition BLI_ghash.h:37
void *(* GHashKeyCopyFP)(const void *key)
Definition BLI_ghash.h:36
void * BLI_gset_lookup(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
GSet * BLI_gset_new_ex(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:936
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:686
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_clear(GSet *gs, GSetKeyFreeFP keyfreefp)
GHashKeyFreeFP GSetKeyFreeFP
Definition BLI_ghash.h:341
unsigned int BLI_ghashutil_uinthash_v4_murmur(const unsigned int key[4])
GHashIterator * BLI_ghashIterator_new(GHash *gh) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:888
BLI_INLINE bool BLI_gsetIterator_done(const GSetIterator *gsi)
Definition BLI_ghash.h:463
void ** BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:745
void BLI_ghashutil_pairfree(void *ptr)
GHash * BLI_ghash_int_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHashIterState GSetIterState
Definition BLI_ghash.h:344
unsigned int(* GHashHashFP)(const void *key)
Definition BLI_ghash.h:31
GSet * BLI_gset_pair_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void(* GHashKeyFreeFP)(void *key)
Definition BLI_ghash.h:34
GSet * BLI_gset_str_new(const char *info)
unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:954
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_gset_pop(GSet *gs, GSetIterState *state, void **r_key) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void(* GHashValFreeFP)(void *val)
Definition BLI_ghash.h:35
void BLI_gset_insert(GSet *gs, void *key)
Definition BLI_ghash.cc:959
unsigned int BLI_ghashutil_inthash_p_simple(const void *ptr)
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
Definition BLI_ghash.h:455
void * BLI_ghash_popkey(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:802
void BLI_ghash_reserve(GHash *gh, unsigned int nentries_reserve)
Definition BLI_ghash.cc:696
#define _gh_Entry
Definition BLI_ghash.h:315
bool BLI_gset_reinsert(GSet *gs, void *key, GSetKeyFreeFP keyfreefp)
Definition BLI_ghash.cc:989
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:944
GHash * BLI_ghash_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_clear_ex(GSet *gs, GSetKeyFreeFP keyfreefp, unsigned int nentries_reserve)
bool BLI_ghashutil_intcmp(const void *a, const void *b)
GHashCmpFP GSetCmpFP
Definition BLI_ghash.h:340
GHash * BLI_ghash_new_ex(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:678
GHashPair * BLI_ghashutil_pairalloc(const void *first, const void *second)
unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:702
bool BLI_ghashutil_ptrcmp(const void *a, const void *b)
GHash * BLI_ghash_pair_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_inthash_p(const void *ptr)
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_strhash_p_murmur(const void *ptr)
BLI_INLINE void BLI_gsetIterator_free(GSetIterator *gsi)
Definition BLI_ghash.h:451
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.cc:787
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:731
GSet * BLI_gset_copy(const GSet *gs, GSetKeyCopyFP keycopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:949
GSet * BLI_gset_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_uinthash_v4(const unsigned int key[4])
BLI_INLINE void BLI_gsetIterator_init(GSetIterator *gsi, GSet *gs)
Definition BLI_ghash.h:447
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition BLI_ghash.cc:707
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.cc:860
bool BLI_ghashutil_uinthash_v4_cmp(const void *a, const void *b)
@ GHASH_FLAG_ALLOW_DUPES
Definition BLI_ghash.h:52
@ GHASH_FLAG_ALLOW_SHRINK
Definition BLI_ghash.h:53
bool BLI_ghashutil_paircmp(const void *a, const void *b)
GHash * BLI_ghash_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
Definition BLI_ghash.cc:895
GSet * BLI_gset_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE void BLI_gsetIterator_step(GSetIterator *gsi)
Definition BLI_ghash.h:459
void BLI_ghash_clear_ex(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp, unsigned int nentries_reserve)
Definition BLI_ghash.cc:842
GSet * BLI_gset_pair_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:752
void BLI_ghash_flag_set(GHash *gh, unsigned int flag)
Definition BLI_ghash.cc:872
bool BLI_gset_add(GSet *gs, void *key)
Definition BLI_ghash.cc:966
void * BLI_ghash_replace_key(GHash *gh, void *key)
Definition BLI_ghash.cc:718
bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_val) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.cc:768
BLI_INLINE bool BLI_ghashIterator_done(const GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.h:307
bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp)
Definition BLI_ghash.cc:999
BLI_INLINE GSetIterator * BLI_gsetIterator_new(GSet *gs)
Definition BLI_ghash.h:443
static __attribute__((constructor)) void cpu_check()
Definition cpu_check.cc:94
static ulong state[N]
unsigned int curr_bucket _GHASH_INTERNAL_ATTR
Definition BLI_ghash.h:48
GHash * gh
Definition BLI_ghash.h:42
struct Entry * curEntry
Definition BLI_ghash.h:43
unsigned int curBucket
Definition BLI_ghash.h:44
const void * second
Definition BLI_ghash.h:602
const void * first
Definition BLI_ghash.h:601
GHashIterator _ghi
Definition BLI_ghash.h:440
void * key
Definition BLI_ghash.h:293
void * next
Definition BLI_ghash.h:293
void * val
Definition BLI_ghash.h:293
PointerRNA * ptr
Definition wm_files.cc:4238
uint8_t flag
Definition wm_window.cc:145