Blender  V3.3
BLI_ghash.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
4 #pragma once
5 
14 #include "BLI_compiler_attrs.h"
15 #include "BLI_compiler_compat.h"
16 #include "BLI_sys_types.h" /* for bool */
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #define _GHASH_INTERNAL_ATTR
23 #ifndef GHASH_INTERNAL_API
24 # ifdef __GNUC__
25 # undef _GHASH_INTERNAL_ATTR
26 # define _GHASH_INTERNAL_ATTR __attribute__((deprecated)) /* not deprecated, just private. */
27 # endif
28 #endif
29 
30 /* -------------------------------------------------------------------- */
34 typedef unsigned int (*GHashHashFP)(const void *key);
36 typedef bool (*GHashCmpFP)(const void *a, const void *b);
37 typedef void (*GHashKeyFreeFP)(void *key);
38 typedef void (*GHashValFreeFP)(void *val);
39 typedef void *(*GHashKeyCopyFP)(const void *key);
40 typedef void *(*GHashValCopyFP)(const void *val);
41 
42 typedef struct GHash GHash;
43 
44 typedef struct GHashIterator {
46  struct Entry *curEntry;
47  unsigned int curBucket;
49 
50 typedef struct GHashIterState {
51  unsigned int curr_bucket _GHASH_INTERNAL_ATTR;
53 
54 enum {
55  GHASH_FLAG_ALLOW_DUPES = (1 << 0), /* Only checked for in debug mode */
56  GHASH_FLAG_ALLOW_SHRINK = (1 << 1), /* Allow to shrink buckets' size. */
57 
58 #ifdef GHASH_INTERNAL_API
59  /* Internal usage only */
60  /* Whether the GHash is actually used as GSet (no value storage). */
61  GHASH_FLAG_IS_GSET = (1 << 16),
62 #endif
63 };
64 
67 /* -------------------------------------------------------------------- */
84  GHashCmpFP cmpfp,
85  const char *info,
86  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
91  GHashCmpFP cmpfp,
92  const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
97 GHash *BLI_ghash_copy(const GHash *gh,
98  GHashKeyCopyFP keycopyfp,
107 void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
111 void BLI_ghash_reserve(GHash *gh, unsigned int nentries_reserve);
119 void BLI_ghash_insert(GHash *gh, void *key, void *val);
127 bool BLI_ghash_reinsert(
128  GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
136 void *BLI_ghash_replace_key(GHash *gh, void *key);
146 void *BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
150 void *BLI_ghash_lookup_default(const GHash *gh,
151  const void *key,
152  void *val_default) ATTR_WARN_UNUSED_RESULT;
163 void **BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
178 bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT;
185 bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_val)
195 bool BLI_ghash_remove(GHash *gh,
196  const void *key,
197  GHashKeyFreeFP keyfreefp,
198  GHashValFreeFP valfreefp);
202 void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
210 void BLI_ghash_clear_ex(GHash *gh,
211  GHashKeyFreeFP keyfreefp,
212  GHashValFreeFP valfreefp,
213  unsigned int nentries_reserve);
221 void *BLI_ghash_popkey(GHash *gh,
222  const void *key,
227 bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT;
237 bool BLI_ghash_pop(GHash *gh, GHashIterState *state, void **r_key, void **r_val)
242 unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT;
246 void BLI_ghash_flag_set(GHash *gh, unsigned int flag);
250 void BLI_ghash_flag_clear(GHash *gh, unsigned int flag);
251 
254 /* -------------------------------------------------------------------- */
267 
289 
294 
295 struct _gh_Entry {
296  void *next, *key, *val;
297 };
299 {
300  return ((struct _gh_Entry *)ghi->curEntry)->key;
301 }
303 {
304  return ((struct _gh_Entry *)ghi->curEntry)->val;
305 }
307 {
308  return &((struct _gh_Entry *)ghi->curEntry)->val;
309 }
311 {
312  return !ghi->curEntry;
313 }
314 /* disallow further access */
315 #ifdef __GNUC__
316 # pragma GCC poison _gh_Entry
317 #else
318 # define _gh_Entry void
319 #endif
320 
321 #define GHASH_ITER(gh_iter_, ghash_) \
322  for (BLI_ghashIterator_init(&gh_iter_, ghash_); BLI_ghashIterator_done(&gh_iter_) == false; \
323  BLI_ghashIterator_step(&gh_iter_))
324 
325 #define GHASH_ITER_INDEX(gh_iter_, ghash_, i_) \
326  for (BLI_ghashIterator_init(&gh_iter_, ghash_), i_ = 0; \
327  BLI_ghashIterator_done(&gh_iter_) == false; \
328  BLI_ghashIterator_step(&gh_iter_), i_++)
329 
332 /* -------------------------------------------------------------------- */
340 typedef struct GSet GSet;
341 
346 
348 
357  GSetCmpFP cmpfp,
358  const char *info,
359  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
361  GSetCmpFP cmpfp,
362  const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
367 unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT;
368 void BLI_gset_flag_set(GSet *gs, unsigned int flag);
369 void BLI_gset_flag_clear(GSet *gs, unsigned int flag);
370 void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp);
375 void BLI_gset_insert(GSet *gs, void *key);
382 bool BLI_gset_add(GSet *gs, void *key);
389 bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key);
396 bool BLI_gset_reinsert(GSet *gh, void *key, GSetKeyFreeFP keyfreefp);
403 void *BLI_gset_replace_key(GSet *gs, void *key);
404 bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
413  ATTR_NONNULL();
414 bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp);
415 void BLI_gset_clear_ex(GSet *gs, GSetKeyFreeFP keyfreefp, unsigned int nentries_reserve);
416 void BLI_gset_clear(GSet *gs, GSetKeyFreeFP keyfreefp);
417 
418 /* When set's are used for key & value. */
422 void *BLI_gset_lookup(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
427 void *BLI_gset_pop_key(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT;
428 
431 /* -------------------------------------------------------------------- */
435 /* rely on inline api for now */
436 
438 typedef struct GSetIterator {
440 #if defined(__GNUC__) && !defined(__clang__)
441  __attribute__((deprecated))
442 #endif
443  ;
445 
447 {
448  return (GSetIterator *)BLI_ghashIterator_new((GHash *)gs);
449 }
451 {
453 }
455 {
457 }
459 {
461 }
463 {
465 }
467 {
468  return BLI_ghashIterator_done((const GHashIterator *)gsi);
469 }
470 
471 #define GSET_ITER(gs_iter_, gset_) \
472  for (BLI_gsetIterator_init(&gs_iter_, gset_); BLI_gsetIterator_done(&gs_iter_) == false; \
473  BLI_gsetIterator_step(&gs_iter_))
474 
475 #define GSET_ITER_INDEX(gs_iter_, gset_, i_) \
476  for (BLI_gsetIterator_init(&gs_iter_, gset_), i_ = 0; \
477  BLI_gsetIterator_done(&gs_iter_) == false; \
478  BLI_gsetIterator_step(&gs_iter_), i_++)
479 
482 /* -------------------------------------------------------------------- */
486 /* For testing, debugging only */
487 #ifdef GHASH_INTERNAL_API
491 int BLI_ghash_buckets_len(const GHash *gh);
492 int BLI_gset_buckets_len(const GSet *gs);
493 
502  double *r_load,
503  double *r_variance,
504  double *r_prop_empty_buckets,
505  double *r_prop_overloaded_buckets,
506  int *r_biggest_bucket);
507 double BLI_gset_calc_quality_ex(GSet *gs,
508  double *r_load,
509  double *r_variance,
510  double *r_prop_empty_buckets,
511  double *r_prop_overloaded_buckets,
512  int *r_biggest_bucket);
513 double BLI_ghash_calc_quality(GHash *gh);
514 double BLI_gset_calc_quality(GSet *gs);
515 #endif /* GHASH_INTERNAL_API */
516 
519 /* -------------------------------------------------------------------- */
523 #define GHASH_FOREACH_BEGIN(type, var, what) \
524  do { \
525  GHashIterator gh_iter##var; \
526  GHASH_ITER (gh_iter##var, what) { \
527  type var = (type)(BLI_ghashIterator_getValue(&gh_iter##var));
528 
529 #define GHASH_FOREACH_END() \
530  } \
531  } \
532  while (0)
533 
534 #define GSET_FOREACH_BEGIN(type, var, what) \
535  do { \
536  GSetIterator gh_iter##var; \
537  GSET_ITER (gh_iter##var, what) { \
538  type var = (type)(BLI_gsetIterator_getKey(&gh_iter##var));
539 
540 #define GSET_FOREACH_END() \
541  } \
542  } \
543  while (0)
544 
547 /* -------------------------------------------------------------------- */
560 unsigned int BLI_ghashutil_ptrhash(const void *key);
561 bool BLI_ghashutil_ptrcmp(const void *a, const void *b);
562 
572 unsigned int BLI_ghashutil_strhash_n(const char *key, size_t n);
573 #define BLI_ghashutil_strhash(key) \
574  (CHECK_TYPE_ANY(key, char *, const char *, const char *const), BLI_ghashutil_strhash_p(key))
575 unsigned int BLI_ghashutil_strhash_p(const void *ptr);
576 unsigned int BLI_ghashutil_strhash_p_murmur(const void *ptr);
577 bool BLI_ghashutil_strcmp(const void *a, const void *b);
578 
579 #define BLI_ghashutil_inthash(key) \
580  (CHECK_TYPE_ANY(&(key), int *, const int *), BLI_ghashutil_uinthash((unsigned int)key))
581 unsigned int BLI_ghashutil_uinthash(unsigned int key);
582 unsigned int BLI_ghashutil_inthash_p(const void *ptr);
583 unsigned int BLI_ghashutil_inthash_p_murmur(const void *ptr);
584 unsigned int BLI_ghashutil_inthash_p_simple(const void *ptr);
585 bool BLI_ghashutil_intcmp(const void *a, const void *b);
586 
587 size_t BLI_ghashutil_combine_hash(size_t hash_a, size_t hash_b);
588 
589 unsigned int BLI_ghashutil_uinthash_v4(const unsigned int key[4]);
590 #define BLI_ghashutil_inthash_v4(key) \
591  (CHECK_TYPE_ANY(key, int *, const int *), BLI_ghashutil_uinthash_v4((const unsigned int *)key))
592 #define BLI_ghashutil_inthash_v4_p ((GSetHashFP)BLI_ghashutil_uinthash_v4)
593 #define BLI_ghashutil_uinthash_v4_p ((GSetHashFP)BLI_ghashutil_uinthash_v4)
594 unsigned int BLI_ghashutil_uinthash_v4_murmur(const unsigned int key[4]);
595 #define BLI_ghashutil_inthash_v4_murmur(key) \
596  (CHECK_TYPE_ANY(key, int *, const int *), \
597  BLI_ghashutil_uinthash_v4_murmur((const unsigned int *)key))
598 #define BLI_ghashutil_inthash_v4_p_murmur ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
599 #define BLI_ghashutil_uinthash_v4_p_murmur ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
600 bool BLI_ghashutil_uinthash_v4_cmp(const void *a, const void *b);
601 #define BLI_ghashutil_inthash_v4_cmp BLI_ghashutil_uinthash_v4_cmp
602 
603 typedef struct GHashPair {
604  const void *first;
605  const void *second;
607 
608 GHashPair *BLI_ghashutil_pairalloc(const void *first, const void *second);
609 unsigned int BLI_ghashutil_pairhash(const void *ptr);
610 bool BLI_ghashutil_paircmp(const void *a, const void *b);
611 void BLI_ghashutil_pairfree(void *ptr);
612 
617 GHash *BLI_ghash_ptr_new_ex(const char *info,
618  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
620 GHash *BLI_ghash_str_new_ex(const char *info,
621  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
623 GHash *BLI_ghash_int_new_ex(const char *info,
624  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
626 GHash *BLI_ghash_pair_new_ex(const char *info,
627  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
629 
630 GSet *BLI_gset_ptr_new_ex(const char *info,
631  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
632 GSet *BLI_gset_ptr_new(const char *info);
633 GSet *BLI_gset_str_new_ex(const char *info,
634  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
635 GSet *BLI_gset_str_new(const char *info);
636 GSet *BLI_gset_pair_new_ex(const char *info,
637  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
639 GSet *BLI_gset_int_new_ex(const char *info,
640  unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
642 
645 #ifdef __cplusplus
646 }
647 #endif
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_MALLOC
#define ATTR_NONNULL(...)
#define BLI_INLINE
double BLI_ghash_calc_quality_ex(GHash *gh, double *r_load, double *r_variance, double *r_prop_empty_buckets, double *r_prop_overloaded_buckets, int *r_biggest_bucket)
Definition: BLI_ghash.c:1097
double BLI_ghash_calc_quality(GHash *gh)
Definition: BLI_ghash.c:1199
int BLI_ghash_buckets_len(const GHash *gh)
Definition: BLI_ghash.c:1088
double BLI_gset_calc_quality(GSet *gs)
Definition: BLI_ghash.c:1203
double BLI_gset_calc_quality_ex(GSet *gs, double *r_load, double *r_variance, double *r_prop_empty_buckets, double *r_prop_overloaded_buckets, int *r_biggest_bucket)
Definition: BLI_ghash.c:1184
int BLI_gset_buckets_len(const GSet *gs)
Definition: BLI_ghash.c:1092
GSet * BLI_gset_str_new(const char *info)
struct GSet GSet
Definition: BLI_ghash.h:340
struct GHashIterState GHashIterState
bool BLI_ghashutil_strcmp(const void *a, const void *b)
GSet * BLI_gset_copy(const GSet *gs, GSetKeyCopyFP keycopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:952
unsigned int BLI_ghashutil_inthash_p_murmur(const void *ptr)
size_t BLI_ghashutil_combine_hash(size_t hash_a, size_t hash_b)
GSet * BLI_gset_int_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:298
void * BLI_gset_replace_key(GSet *gs, void *key)
Definition: BLI_ghash.c:997
@ GHASH_FLAG_ALLOW_DUPES
Definition: BLI_ghash.h:55
@ GHASH_FLAG_ALLOW_SHRINK
Definition: BLI_ghash.h:56
void BLI_ghash_flag_clear(GHash *gh, unsigned int flag)
Definition: BLI_ghash.c:880
unsigned int BLI_ghashutil_strhash_n(const char *key, size_t n)
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_haskey(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:822
bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key)
Definition: BLI_ghash.c:974
bool BLI_ghash_pop(GHash *gh, GHashIterState *state, void **r_key, void **r_val) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: BLI_ghash.c:827
GSet * BLI_gset_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_int_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_flag_set(GSet *gs, unsigned int flag)
Definition: BLI_ghash.c:1042
bool BLI_ghash_reinsert(GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition: BLI_ghash.c:715
unsigned int BLI_ghashutil_uinthash(unsigned int key)
void BLI_ghashIterator_step(GHashIterator *ghi)
Definition: BLI_ghash.c:914
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:1007
unsigned int BLI_ghashutil_pairhash(const void *ptr)
GHashHashFP GSetHashFP
Definition: BLI_ghash.h:342
void * BLI_gset_pop_key(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:1067
void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition: BLI_ghash.c:858
unsigned int BLI_ghashutil_ptrhash(const void *key)
void BLI_ghashIterator_free(GHashIterator *ghi)
Definition: BLI_ghash.c:928
bool(* GHashCmpFP)(const void *a, const void *b)
Definition: BLI_ghash.h:36
GHash * BLI_ghash_copy(const GHash *gh, GHashKeyCopyFP keycopyfp, GHashValCopyFP valcopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:694
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:302
GHashKeyCopyFP GSetKeyCopyFP
Definition: BLI_ghash.h:345
BLI_INLINE void ** BLI_ghashIterator_getValue_p(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:306
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.c:939
bool BLI_gset_reinsert(GSet *gh, void *key, GSetKeyFreeFP keyfreefp)
Definition: BLI_ghash.c:992
void BLI_gset_flag_clear(GSet *gs, unsigned int flag)
Definition: BLI_ghash.c:1047
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHashPair * BLI_ghashutil_pairalloc(const void *first, const void *second)
GSet * BLI_gset_ptr_new(const char *info)
void *(* GHashKeyCopyFP)(const void *key)
Definition: BLI_ghash.h:39
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:689
GSet * BLI_gset_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:947
struct GSetIterator GSetIterator
void BLI_gset_clear(GSet *gs, GSetKeyFreeFP keyfreefp)
Definition: BLI_ghash.c:1032
GHashKeyFreeFP GSetKeyFreeFP
Definition: BLI_ghash.h:344
unsigned int BLI_ghashutil_uinthash_v4_murmur(const unsigned int key[4])
BLI_INLINE bool BLI_gsetIterator_done(const GSetIterator *gsi)
Definition: BLI_ghash.h:466
void *(* GHashValCopyFP)(const void *val)
Definition: BLI_ghash.h:40
void BLI_ghashutil_pairfree(void *ptr)
GHashIterState GSetIterState
Definition: BLI_ghash.h:347
unsigned int(* GHashHashFP)(const void *key)
Definition: BLI_ghash.h:34
void * BLI_gset_lookup(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:1061
void(* GHashKeyFreeFP)(void *key)
Definition: BLI_ghash.h:37
unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:957
bool BLI_gset_pop(GSet *gs, GSetIterState *state, void **r_key) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: BLI_ghash.c:1012
void(* GHashValFreeFP)(void *val)
Definition: BLI_ghash.h:38
void BLI_gset_insert(GSet *gs, void *key)
Definition: BLI_ghash.c:962
struct GHashIterator GHashIterator
BLI_INLINE GSetIterator * BLI_gsetIterator_new(GSet *gs)
Definition: BLI_ghash.h:446
unsigned int BLI_ghashutil_inthash_p_simple(const void *ptr)
void BLI_ghash_reserve(GHash *gh, unsigned int nentries_reserve)
Definition: BLI_ghash.c:699
GHash * BLI_ghash_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_clear_ex(GSet *gs, GSetKeyFreeFP keyfreefp, unsigned int nentries_reserve)
Definition: BLI_ghash.c:1027
GSet * BLI_gset_pair_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_intcmp(const void *a, const void *b)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:734
GHashCmpFP GSetCmpFP
Definition: BLI_ghash.h:343
unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:705
GHash * BLI_ghash_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_ptrcmp(const void *a, const void *b)
GSet * BLI_gset_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_inthash_p(const void *ptr)
void * BLI_ghash_lookup_default(const GHash *gh, const void *key, void *val_default) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:741
GHash * BLI_ghash_pair_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
struct GHashPair GHashPair
unsigned int BLI_ghashutil_strhash_p_murmur(const void *ptr)
void * BLI_ghash_replace_key(GHash *gh, void *key)
Definition: BLI_ghash.c:721
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.c:681
GHashIterator * BLI_ghashIterator_new(GHash *gh) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:891
BLI_INLINE void BLI_gsetIterator_free(GSetIterator *gsi)
Definition: BLI_ghash.h:454
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition: BLI_ghash.c:790
void * BLI_ghash_popkey(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:805
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:450
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition: BLI_ghash.c:710
void ** BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:748
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition: BLI_ghash.c:863
bool BLI_ghashutil_uinthash_v4_cmp(const void *a, const void *b)
bool BLI_ghashutil_paircmp(const void *a, const void *b)
GSet * BLI_gset_pair_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
Definition: BLI_ghash.c:1037
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
Definition: BLI_ghash.c:898
BLI_INLINE void BLI_gsetIterator_step(GSetIterator *gsi)
Definition: BLI_ghash.h:462
void BLI_ghash_clear_ex(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp, unsigned int nentries_reserve)
Definition: BLI_ghash.c:845
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
Definition: BLI_ghash.h:458
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:755
void BLI_ghash_flag_set(GHash *gh, unsigned int flag)
Definition: BLI_ghash.c:875
bool BLI_gset_add(GSet *gs, void *key)
Definition: BLI_ghash.c:969
bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_val) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:771
GHash * BLI_ghash_pair_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_ghashIterator_done(const GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:310
bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp)
Definition: BLI_ghash.c:1002
struct AtomicSpinLock __attribute__((aligned(32))) AtomicSpinLock
SyclQueue void void size_t num_bytes void
const int state
static unsigned a[3]
Definition: RandGen.cpp:78
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
unsigned int curr_bucket _GHASH_INTERNAL_ATTR
Definition: BLI_ghash.h:51
GHash * gh
Definition: BLI_ghash.h:45
struct Entry * curEntry
Definition: BLI_ghash.h:46
unsigned int curBucket
Definition: BLI_ghash.h:47
const void * second
Definition: BLI_ghash.h:605
const void * first
Definition: BLI_ghash.h:604
GHashIterator _ghi
Definition: BLI_ghash.h:443
Definition: BLI_ghash.h:295
void * key
Definition: BLI_ghash.h:296
void * next
Definition: BLI_ghash.h:296
void * val
Definition: BLI_ghash.h:296
PointerRNA * ptr
Definition: wm_files.c:3480