Blender  V3.3
Classes | Macros
BLI_ghash.h File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_compiler_compat.h"
#include "BLI_sys_types.h"

Go to the source code of this file.

Classes

struct  GHashIterator
 
struct  GHashIterState
 
struct  _gh_Entry
 
struct  GSetIterator
 
struct  GHashPair
 

Macros

#define _GHASH_INTERNAL_ATTR
 
GHash/GSet Macros
#define GHASH_FOREACH_BEGIN(type, var, what)
 
#define GHASH_FOREACH_END()
 
#define GSET_FOREACH_BEGIN(type, var, what)
 
#define GSET_FOREACH_END()
 

Typedefs

GSet Types

A 'set' implementation (unordered collection of unique elements).

Internally this is a 'GHash' without any keys, which is why this API's are in the same header & source file.

typedef struct GSet GSet
 
typedef GHashHashFP GSetHashFP
 
typedef GHashCmpFP GSetCmpFP
 
typedef GHashKeyFreeFP GSetKeyFreeFP
 
typedef GHashKeyCopyFP GSetKeyCopyFP
 
typedef GHashIterState GSetIterState
 

Functions

GHash API

Defined in BLI_ghash.c

GHashBLI_ghash_new_ex (GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_new (GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_copy (const GHash *gh, GHashKeyCopyFP keycopyfp, GHashValCopyFP valcopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
void BLI_ghash_free (GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
 
void BLI_ghash_reserve (GHash *gh, unsigned int nentries_reserve)
 
void BLI_ghash_insert (GHash *gh, void *key, void *val)
 
bool BLI_ghash_reinsert (GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
 
voidBLI_ghash_replace_key (GHash *gh, void *key)
 
voidBLI_ghash_lookup (const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
 
voidBLI_ghash_lookup_default (const GHash *gh, const void *key, void *val_default) ATTR_WARN_UNUSED_RESULT
 
void ** BLI_ghash_lookup_p (GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
 
bool BLI_ghash_ensure_p (GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
 
bool BLI_ghash_ensure_p_ex (GHash *gh, const void *key, void ***r_key, void ***r_val) ATTR_WARN_UNUSED_RESULT
 
bool BLI_ghash_remove (GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
 
void BLI_ghash_clear (GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
 
void BLI_ghash_clear_ex (GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp, unsigned int nentries_reserve)
 
voidBLI_ghash_popkey (GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
 
bool BLI_ghash_haskey (const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
 
bool BLI_ghash_pop (GHash *gh, GHashIterState *state, void **r_key, void **r_val) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
unsigned int BLI_ghash_len (const GHash *gh) ATTR_WARN_UNUSED_RESULT
 
void BLI_ghash_flag_set (GHash *gh, unsigned int flag)
 
void BLI_ghash_flag_clear (GHash *gh, unsigned int flag)
 
GSet Public API

Use ghash API to give 'set' functionality

GSetBLI_gset_new_ex (GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_new (GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_copy (const GSet *gs, GSetKeyCopyFP keycopyfp) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
unsigned int BLI_gset_len (const GSet *gs) ATTR_WARN_UNUSED_RESULT
 
void BLI_gset_flag_set (GSet *gs, unsigned int flag)
 
void BLI_gset_flag_clear (GSet *gs, unsigned int flag)
 
void BLI_gset_free (GSet *gs, GSetKeyFreeFP keyfreefp)
 
void BLI_gset_insert (GSet *gs, void *key)
 
bool BLI_gset_add (GSet *gs, void *key)
 
bool BLI_gset_ensure_p_ex (GSet *gs, const void *key, void ***r_key)
 
bool BLI_gset_reinsert (GSet *gh, void *key, GSetKeyFreeFP keyfreefp)
 
voidBLI_gset_replace_key (GSet *gs, void *key)
 
bool BLI_gset_haskey (const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
 
bool BLI_gset_pop (GSet *gs, GSetIterState *state, void **r_key) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_gset_remove (GSet *gs, const void *key, GSetKeyFreeFP keyfreefp)
 
void BLI_gset_clear_ex (GSet *gs, GSetKeyFreeFP keyfreefp, unsigned int nentries_reserve)
 
void BLI_gset_clear (GSet *gs, GSetKeyFreeFP keyfreefp)
 
voidBLI_gset_lookup (const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
 
voidBLI_gset_pop_key (GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
 

GHash Iterator

#define _gh_Entry   void
 
#define GHASH_ITER(gh_iter_, ghash_)
 
#define GHASH_ITER_INDEX(gh_iter_, ghash_, i_)
 
GHashIteratorBLI_ghashIterator_new (GHash *gh) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
void BLI_ghashIterator_init (GHashIterator *ghi, GHash *gh)
 
void BLI_ghashIterator_free (GHashIterator *ghi)
 
void BLI_ghashIterator_step (GHashIterator *ghi)
 
BLI_INLINE voidBLI_ghashIterator_getKey (GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
 
BLI_INLINE voidBLI_ghashIterator_getValue (GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
 
BLI_INLINE void ** BLI_ghashIterator_getValue_p (GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
 
BLI_INLINE bool BLI_ghashIterator_done (const GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
 

GSet Iterator

#define GSET_ITER(gs_iter_, gset_)
 
#define GSET_ITER_INDEX(gs_iter_, gset_, i_)
 
typedef struct GSetIterator GSetIterator
 
BLI_INLINE GSetIteratorBLI_gsetIterator_new (GSet *gs)
 
BLI_INLINE void BLI_gsetIterator_init (GSetIterator *gsi, GSet *gs)
 
BLI_INLINE void BLI_gsetIterator_free (GSetIterator *gsi)
 
BLI_INLINE voidBLI_gsetIterator_getKey (GSetIterator *gsi)
 
BLI_INLINE void BLI_gsetIterator_step (GSetIterator *gsi)
 
BLI_INLINE bool BLI_gsetIterator_done (const GSetIterator *gsi)
 

GHash/GSet Utils

Defined in BLI_ghash_utils.c

#define BLI_ghashutil_strhash(key)    (CHECK_TYPE_ANY(key, char *, const char *, const char *const), BLI_ghashutil_strhash_p(key))
 
#define BLI_ghashutil_inthash(key)    (CHECK_TYPE_ANY(&(key), int *, const int *), BLI_ghashutil_uinthash((unsigned int)key))
 
#define BLI_ghashutil_inthash_v4(key)    (CHECK_TYPE_ANY(key, int *, const int *), BLI_ghashutil_uinthash_v4((const unsigned int *)key))
 
#define BLI_ghashutil_inthash_v4_p   ((GSetHashFP)BLI_ghashutil_uinthash_v4)
 
#define BLI_ghashutil_uinthash_v4_p   ((GSetHashFP)BLI_ghashutil_uinthash_v4)
 
#define BLI_ghashutil_inthash_v4_murmur(key)
 
#define BLI_ghashutil_inthash_v4_p_murmur   ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
 
#define BLI_ghashutil_uinthash_v4_p_murmur   ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)
 
#define BLI_ghashutil_inthash_v4_cmp   BLI_ghashutil_uinthash_v4_cmp
 
typedef struct GHashPair GHashPair
 
unsigned int BLI_ghashutil_ptrhash (const void *key)
 
bool BLI_ghashutil_ptrcmp (const void *a, const void *b)
 
unsigned int BLI_ghashutil_strhash_n (const char *key, size_t n)
 
unsigned int BLI_ghashutil_strhash_p (const void *ptr)
 
unsigned int BLI_ghashutil_strhash_p_murmur (const void *ptr)
 
bool BLI_ghashutil_strcmp (const void *a, const void *b)
 
unsigned int BLI_ghashutil_uinthash (unsigned int key)
 
unsigned int BLI_ghashutil_inthash_p (const void *ptr)
 
unsigned int BLI_ghashutil_inthash_p_murmur (const void *ptr)
 
unsigned int BLI_ghashutil_inthash_p_simple (const void *ptr)
 
bool BLI_ghashutil_intcmp (const void *a, const void *b)
 
size_t BLI_ghashutil_combine_hash (size_t hash_a, size_t hash_b)
 
unsigned int BLI_ghashutil_uinthash_v4 (const unsigned int key[4])
 
unsigned int BLI_ghashutil_uinthash_v4_murmur (const unsigned int key[4])
 
bool BLI_ghashutil_uinthash_v4_cmp (const void *a, const void *b)
 
GHashPairBLI_ghashutil_pairalloc (const void *first, const void *second)
 
unsigned int BLI_ghashutil_pairhash (const void *ptr)
 
bool BLI_ghashutil_paircmp (const void *a, const void *b)
 
void BLI_ghashutil_pairfree (void *ptr)
 
GHashBLI_ghash_ptr_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_ptr_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_str_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_str_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_int_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_int_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_pair_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GHashBLI_ghash_pair_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_ptr_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_ptr_new (const char *info)
 
GSetBLI_gset_str_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_str_new (const char *info)
 
GSetBLI_gset_pair_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_pair_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_int_new_ex (const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 
GSetBLI_gset_int_new (const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
 

GHash Types

enum  { GHASH_FLAG_ALLOW_DUPES = (1 << 0) , GHASH_FLAG_ALLOW_SHRINK = (1 << 1) }
 
typedef unsigned int(* GHashHashFP) (const void *key)
 
typedef bool(* GHashCmpFP) (const void *a, const void *b)
 
typedef void(* GHashKeyFreeFP) (void *key)
 
typedef void(* GHashValFreeFP) (void *val)
 
typedef void *(* GHashKeyCopyFP) (const void *key)
 
typedef void *(* GHashValCopyFP) (const void *val)
 
typedef struct GHash GHash
 
typedef struct GHashIterator GHashIterator
 
typedef struct GHashIterState GHashIterState
 

Detailed Description

GHash is a hash-map implementation (unordered key, value pairs).

This is also used to implement a 'set' (see GSet below).

Definition in file BLI_ghash.h.

Macro Definition Documentation

◆ _gh_Entry

Definition at line 318 of file BLI_ghash.h.

◆ _GHASH_INTERNAL_ATTR

#define _GHASH_INTERNAL_ATTR

Definition at line 22 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash

#define BLI_ghashutil_inthash (   key)     (CHECK_TYPE_ANY(&(key), int *, const int *), BLI_ghashutil_uinthash((unsigned int)key))

Definition at line 579 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash_v4

#define BLI_ghashutil_inthash_v4 (   key)     (CHECK_TYPE_ANY(key, int *, const int *), BLI_ghashutil_uinthash_v4((const unsigned int *)key))

Definition at line 590 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash_v4_cmp

#define BLI_ghashutil_inthash_v4_cmp   BLI_ghashutil_uinthash_v4_cmp

Definition at line 601 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash_v4_murmur

#define BLI_ghashutil_inthash_v4_murmur (   key)
Value:
(CHECK_TYPE_ANY(key, int *, const int *), \
BLI_ghashutil_uinthash_v4_murmur((const unsigned int *)key))
#define CHECK_TYPE_ANY(...)

Definition at line 595 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash_v4_p

#define BLI_ghashutil_inthash_v4_p   ((GSetHashFP)BLI_ghashutil_uinthash_v4)

Definition at line 592 of file BLI_ghash.h.

◆ BLI_ghashutil_inthash_v4_p_murmur

#define BLI_ghashutil_inthash_v4_p_murmur   ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)

Definition at line 598 of file BLI_ghash.h.

◆ BLI_ghashutil_strhash

#define BLI_ghashutil_strhash (   key)     (CHECK_TYPE_ANY(key, char *, const char *, const char *const), BLI_ghashutil_strhash_p(key))

Definition at line 573 of file BLI_ghash.h.

◆ BLI_ghashutil_uinthash_v4_p

#define BLI_ghashutil_uinthash_v4_p   ((GSetHashFP)BLI_ghashutil_uinthash_v4)

Definition at line 593 of file BLI_ghash.h.

◆ BLI_ghashutil_uinthash_v4_p_murmur

#define BLI_ghashutil_uinthash_v4_p_murmur   ((GSetHashFP)BLI_ghashutil_uinthash_v4_murmur)

Definition at line 599 of file BLI_ghash.h.

◆ GHASH_FOREACH_BEGIN

#define GHASH_FOREACH_BEGIN (   type,
  var,
  what 
)
Value:
do { \
GHashIterator gh_iter##var; \
GHASH_ITER (gh_iter##var, what) { \
type var = (type)(BLI_ghashIterator_getValue(&gh_iter##var));
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:302
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type

Definition at line 523 of file BLI_ghash.h.

◆ GHASH_FOREACH_END

#define GHASH_FOREACH_END ( )
Value:
} \
} \
while (0)

Definition at line 529 of file BLI_ghash.h.

◆ GHASH_ITER

#define GHASH_ITER (   gh_iter_,
  ghash_ 
)
Value:
for (BLI_ghashIterator_init(&gh_iter_, ghash_); BLI_ghashIterator_done(&gh_iter_) == false; \
BLI_ghashIterator_step(&gh_iter_))
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
Definition: BLI_ghash.c:898
BLI_INLINE bool BLI_ghashIterator_done(const GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.h:310

Definition at line 321 of file BLI_ghash.h.

◆ GHASH_ITER_INDEX

#define GHASH_ITER_INDEX (   gh_iter_,
  ghash_,
  i_ 
)
Value:
for (BLI_ghashIterator_init(&gh_iter_, ghash_), i_ = 0; \
BLI_ghashIterator_done(&gh_iter_) == false; \
BLI_ghashIterator_step(&gh_iter_), i_++)

Definition at line 325 of file BLI_ghash.h.

◆ GSET_FOREACH_BEGIN

#define GSET_FOREACH_BEGIN (   type,
  var,
  what 
)
Value:
do { \
GSetIterator gh_iter##var; \
GSET_ITER (gh_iter##var, what) { \
type var = (type)(BLI_gsetIterator_getKey(&gh_iter##var));
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
Definition: BLI_ghash.h:458

Definition at line 534 of file BLI_ghash.h.

◆ GSET_FOREACH_END

#define GSET_FOREACH_END ( )
Value:
} \
} \
while (0)

Definition at line 540 of file BLI_ghash.h.

◆ GSET_ITER

#define GSET_ITER (   gs_iter_,
  gset_ 
)
Value:
for (BLI_gsetIterator_init(&gs_iter_, gset_); BLI_gsetIterator_done(&gs_iter_) == false; \
BLI_gsetIterator_step(&gs_iter_))
BLI_INLINE bool BLI_gsetIterator_done(const GSetIterator *gsi)
Definition: BLI_ghash.h:466
BLI_INLINE void BLI_gsetIterator_init(GSetIterator *gsi, GSet *gs)
Definition: BLI_ghash.h:450

Definition at line 471 of file BLI_ghash.h.

◆ GSET_ITER_INDEX

#define GSET_ITER_INDEX (   gs_iter_,
  gset_,
  i_ 
)
Value:
for (BLI_gsetIterator_init(&gs_iter_, gset_), i_ = 0; \
BLI_gsetIterator_done(&gs_iter_) == false; \
BLI_gsetIterator_step(&gs_iter_), i_++)

Definition at line 475 of file BLI_ghash.h.

Typedef Documentation

◆ GHash

typedef struct GHash GHash

Definition at line 40 of file BLI_ghash.h.

◆ GHashCmpFP

typedef bool(* GHashCmpFP) (const void *a, const void *b)

returns false when equal

Definition at line 36 of file BLI_ghash.h.

◆ GHashHashFP

typedef unsigned int(* GHashHashFP) (const void *key)

Definition at line 34 of file BLI_ghash.h.

◆ GHashIterator

typedef struct GHashIterator GHashIterator

◆ GHashIterState

◆ GHashKeyCopyFP

typedef void*(* GHashKeyCopyFP) (const void *key)

Definition at line 39 of file BLI_ghash.h.

◆ GHashKeyFreeFP

typedef void(* GHashKeyFreeFP) (void *key)

Definition at line 37 of file BLI_ghash.h.

◆ GHashPair

typedef struct GHashPair GHashPair

◆ GHashValCopyFP

typedef void*(* GHashValCopyFP) (const void *val)

Definition at line 40 of file BLI_ghash.h.

◆ GHashValFreeFP

typedef void(* GHashValFreeFP) (void *val)

Definition at line 38 of file BLI_ghash.h.

◆ GSet

typedef struct GSet GSet

Definition at line 310 of file BLI_ghash.h.

◆ GSetCmpFP

Definition at line 343 of file BLI_ghash.h.

◆ GSetHashFP

Definition at line 342 of file BLI_ghash.h.

◆ GSetIterator

typedef struct GSetIterator GSetIterator

Use a GSet specific type so we can cast but compiler sees as different

◆ GSetIterState

Definition at line 347 of file BLI_ghash.h.

◆ GSetKeyCopyFP

Definition at line 345 of file BLI_ghash.h.

◆ GSetKeyFreeFP

Definition at line 344 of file BLI_ghash.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
GHASH_FLAG_ALLOW_DUPES 
GHASH_FLAG_ALLOW_SHRINK 

Definition at line 54 of file BLI_ghash.h.

Function Documentation

◆ BLI_ghash_clear()

void BLI_ghash_clear ( GHash gh,
GHashKeyFreeFP  keyfreefp,
GHashValFreeFP  valfreefp 
)

◆ BLI_ghash_clear_ex()

void BLI_ghash_clear_ex ( GHash gh,
GHashKeyFreeFP  keyfreefp,
GHashValFreeFP  valfreefp,
unsigned int  nentries_reserve 
)

Reset gh clearing all entries.

Parameters
keyfreefpOptional callback to free the key.
valfreefpOptional callback to free the value.
nentries_reserveOptionally reserve the number of members that the hash will hold.

Definition at line 845 of file BLI_ghash.c.

References BLI_mempool_clear_ex(), GHash::entrypool, ghash_buckets_reset(), and ghash_free_cb().

Referenced by BKE_outliner_treehash_rebuild_from_treestore(), BLI_ghash_clear(), BLI_gset_clear_ex(), and filelist_cache_clear().

◆ BLI_ghash_copy()

GHash* BLI_ghash_copy ( const GHash gh,
GHashKeyCopyFP  keycopyfp,
GHashValCopyFP  valcopyfp 
)

Copy given GHash. Keys and values are also copied if relevant callback is provided, else pointers remain the same.

Definition at line 694 of file BLI_ghash.c.

References ghash_copy().

Referenced by BKE_vfontdata_copy(), and TEST().

◆ BLI_ghash_ensure_p()

bool BLI_ghash_ensure_p ( GHash gh,
void key,
void ***  r_val 
)

Ensure key is exists in gh.

This handles the common situation where the caller needs ensure a key is added to gh, constructing a new value in the case the key isn't found. Otherwise use the existing value.

Such situations typically incur multiple lookups, however this function avoids them by ensuring the key is added, returning a pointer to the value so it can be used or initialized by the caller.

Returns
true when the value didn't need to be added. (when false, the caller must initialize the value).

Definition at line 755 of file BLI_ghash.c.

References BLI_mempool_alloc(), e, GHash::entrypool, ghash_bucket_index(), ghash_insert_ex_keyonly_entry(), ghash_keyhash(), ghash_lookup_entry_ex(), hash, and NULL.

Referenced by BKE_icon_set(), BKE_main_idmap_create(), BKE_main_idmap_insert_id(), BKE_main_library_weak_reference_add_item(), BKE_main_relations_create(), BKE_outliner_treehash_add_element(), bke_view_layer_verify_aov_cb(), BLO_memfile_write_init(), bm_face_region_pivot_edge_find(), BM_log_vert_before_modified(), bm_uuidwalk_facestep_begin(), bm_uuidwalk_pass_add(), bmo_planar_faces_exec(), ccd_build_deflector_hash_single(), drw_duplidata_load(), ED_object_data_xform_container_item_ensure(), ED_object_xform_skip_child_container_item_ensure(), edge_isect_ls_ensure(), EEVEE_motion_blur_cache_finish(), ghash_insert_face_edge_link(), ghash_insert_link(), gpencil_strokes_copy_exec(), GPU_pbvh_bmesh_buffers_update(), layer_collection_objects_sync(), lib_override_group_tag_data_object_to_collection_init_collection_process(), lib_override_resync_tagging_finalize_recurse(), main_relations_create_idlink_cb(), make_object_duplilist_real(), map_insert_vert(), material_opaque(), material_shadow(), menu_types_add_from_keymap_items(), modifyMesh(), nlaevalchan_verify(), read_library_linked_ids(), tc_mesh_customdatacorrect_init_vert(), view_layer_bases_hash_create(), workbench_image_setup_ex(), and workbench_material_setup_ex().

◆ BLI_ghash_ensure_p_ex()

bool BLI_ghash_ensure_p_ex ( GHash gh,
const void key,
void ***  r_key,
void ***  r_val 
)

A version of BLI_ghash_ensure_p that allows caller to re-assign the key. Typically used when the key is to be duplicated.

Warning
Caller must write to r_key when returning false.

Definition at line 771 of file BLI_ghash.c.

References BLI_mempool_alloc(), BMVert::e, e, GHash::entrypool, ghash_bucket_index(), ghash_insert_ex_keyonly_entry(), ghash_keyhash(), ghash_lookup_entry_ex(), hash, and NULL.

Referenced by BKE_previewimg_cached_ensure(), drw_uniform_attrs_pool_ensure(), nlaevalchan_verify_key(), and scene_get_depsgraph_p().

◆ BLI_ghash_flag_clear()

void BLI_ghash_flag_clear ( GHash gh,
unsigned int  flag 
)

Clear a GHash flag.

Definition at line 880 of file BLI_ghash.c.

References GHash::flag, and BLI_mempool::flag.

◆ BLI_ghash_flag_set()

void BLI_ghash_flag_set ( GHash gh,
unsigned int  flag 
)

Sets a GHash flag.

Definition at line 875 of file BLI_ghash.c.

References GHash::flag, and BLI_mempool::flag.

Referenced by BM_mesh_bevel(), and TEST().

◆ BLI_ghash_free()

void BLI_ghash_free ( GHash gh,
GHashKeyFreeFP  keyfreefp,
GHashValFreeFP  valfreefp 
)

Frees the GHash and its members.

Parameters
ghThe GHash to free.
keyfreefpOptional callback to free the key.
valfreefpOptional callback to free the value.

Definition at line 863 of file BLI_ghash.c.

References BLI_assert, BLI_mempool_destroy(), BLI_mempool_len(), GHash::buckets, GHash::entrypool, ghash_free_cb(), MEM_freeN, and GHash::nentries.

Referenced by armature_dissolve_selected_exec(), BKE_addon_pref_type_free(), BKE_area_region_free(), BKE_armature_bone_hash_free(), BKE_blendfile_link_append_context_free(), BKE_curve_editNurb_keyIndex_free(), BKE_fcurve_pathcache_destroy(), BKE_gpencil_merge_materials(), BKE_gpencil_merge_materials_table_get(), BKE_gpencil_stroke_copy_to_keyframes(), BKE_icons_free(), BKE_keyconfig_pref_type_free(), BKE_lib_override_library_free(), BKE_main_collection_sync_remap(), BKE_main_idmap_destroy(), BKE_main_library_weak_reference_destroy(), BKE_main_relations_free(), BKE_nlastrip_validate_name(), BKE_node_instance_hash_free(), BKE_node_system_exit(), BKE_object_defgroup_validmap_get(), BKE_object_material_remap_calc(), BKE_outliner_treehash_free(), BKE_pose_channels_hash_free(), BKE_scene_free_depsgraph_hash(), BKE_scene_undo_depsgraphs_restore(), BKE_sim_debug_data_free(), BKE_tracking_copy(), BKE_vfont_free_data(), BKE_view_layer_free_ex(), BKE_view_layer_verify_aov(), BLI_args_destroy(), BLI_array_store_is_valid(), BLI_gset_free(), blo_cache_storage_end(), blo_filedata_free(), BLO_memfile_merge(), BLO_memfile_write_finalize(), bm_edgering_pair_calc(), bm_edgering_pair_store_free(), bm_face_region_pivot_edge_find(), bm_log_entry_free(), BM_log_free(), BM_log_mesh_elems_reorder(), BM_mesh_bevel(), BM_mesh_edgesplit(), BM_mesh_intersect(), BM_mesh_remap(), bm_uuidwalk_free(), bmo_extrude_discrete_faces_exec(), bmo_extrude_vert_indiv_exec(), bmo_inset_region_exec(), bmo_mesh_copy(), bmo_op_slots_free(), bmo_planar_faces_exec(), bmo_triangle_fill_exec(), bmo_weld_verts_exec(), BPY_rna_exit(), build_mesh_leaf_node(), createTransObject(), discard_stabilization_working_context(), DNA_alias_maps(), DNA_sdna_alias_data_ensure(), DNA_sdna_free(), drw_duplidata_free(), DRW_uniform_attrs_pool_free(), ED_armature_join_objects_exec(), ED_gpencil_join_objects_exec(), ED_gpencil_layer_merge(), ED_gpencil_select_stroke_segment(), ED_gpencil_strokes_copybuf_free(), ED_object_data_xform_container_destroy(), ED_object_xform_skip_child_container_destroy(), edbm_face_split_by_edges_exec(), EEVEE_materials_cache_finish(), EEVEE_motion_blur_data_free(), EEVEE_motion_blur_swap_data(), filelist_cache_free(), filelist_free(), free_context_function_ghash(), free_scratch(), fsmenu_xdg_user_dirs_free(), GEO_uv_parametrizer_delete(), gpencil_analyze_strokes(), gpencil_bake_grease_pencil_animation_exec(), gpencil_brush_clone_free(), gpencil_extract_palette_from_vertex(), gpencil_fill_modal(), gpencil_generate_edgeloops(), gpencil_interpolate_exit(), gpencil_interpolate_seq_exec(), gpencil_sculpt_brush_apply_event(), gpencil_sculpt_brush_exit(), gpencil_sculpt_brush_init(), gpencil_select_vertex_color_exec(), gpencil_strokes_copypastebuf_colors_material_to_name_free(), gpencil_strokes_copypastebuf_colors_name_to_material_free(), gpencil_strokes_paste_exec(), GPU_pbvh_bmesh_buffers_update(), IMB_moviecache_free(), imb_thread_cache_exit(), imb_tile_cache_exit(), int4_ghash_tests(), int_ghash_tests(), knife_add_cut(), knifetool_exit_ex(), lib_override_group_tag_data_clear(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_resync(), make(), make_duplis_font(), make_object_duplilist_real(), make_structDNA(), mask_clipboard_free_ex(), menu_items_from_ui_create(), mesh_get_x_mirror_faces(), mesh_undostep_reference_elems_from_objects(), modifyMesh(), multi_small_ghash_tests(), nlaeval_free(), OVERLAY_armature_cache_finish(), palette_extract_img_exec(), pbvh_bmesh_collapse_short_edges(), postEditBoneDuplicate(), randint_ghash_tests(), read_library_linked_ids(), recalcData_gpencil_strokes(), RNA_exit(), RNA_free(), scanfill_preprocess_self_isect(), SCULPT_cloth_simulation_free(), seq_cache_destruct(), seq_sequence_lookup_free(), sequencer_free(), state_delete(), stitch_init(), str_ghash_tests(), tc_mesh_customdatacorrect_free(), TEST(), text_autocomplete_free(), thumbnail_freejob(), tracks_map_free(), UI_blocklist_free(), uv_sculpt_stroke_init(), wm_gizmogrouptype_free(), wm_gizmomap_select_all_intern(), wm_gizmotype_free(), wm_link_append_exec(), WM_menutype_free(), wm_operatortype_free(), WM_paneltype_clear(), WM_uilisttype_free(), workbench_cache_finish(), and Freestyle::BlenderStrokeRenderer::~BlenderStrokeRenderer().

◆ BLI_ghash_haskey()

bool BLI_ghash_haskey ( const GHash gh,
const void key 
)
Returns
true if the key is in gh.

Definition at line 822 of file BLI_ghash.c.

References ghash_lookup_entry(), and NULL.

Referenced by animdata_keyframe_list_get(), BKE_gpencil_merge_materials(), BKE_gpencil_merge_materials_table_get(), BKE_node_instance_hash_haskey(), blo_cache_storage_entry_register(), bm_edgering_pair_interpolate(), bm_face_region_pivot_edge_find(), bm_log_face_from_id(), bm_log_face_id_get(), BM_log_face_removed(), BM_log_original_mask(), BM_log_original_vert_co(), BM_log_original_vert_data(), BM_log_original_vert_no(), bm_log_vert_from_id(), bm_log_vert_id_get(), BM_log_vert_removed(), bm_uuidwalk_facestep_begin(), bm_uuidwalk_pass_add(), bm_vert_is_uuid_connect(), ED_armature_bone_rename(), ghash_insert_ex(), ghash_insert_ex_keyonly(), ghash_insert_ex_keyonly_entry(), gpencil_analyze_strokes(), gpencil_bake_grease_pencil_animation_exec(), gpencil_brush_grab_stroke_init(), gpencil_copybuf_validate_colormap(), gpencil_extract_palette_from_vertex(), gpencil_interpolate_seq_exec(), gpencil_interpolate_set_points(), gpencil_interpolate_update_strokes(), gpencil_sculpt_brush_do_frame(), gpencil_select_vertex_color_exec(), gpencil_selected_hue_table(), gpencil_stroke_get_related(), gpencil_walk_edge(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_resync(), menu_items_from_ui_create(), modifyMesh(), nla_editbone_name_check(), palette_extract_img_exec(), recalcData_gpencil_strokes(), seq_cache_recycle_linked(), seq_cache_thumbnail_put(), str_ghash_tests(), and wm_link_append_exec().

◆ BLI_ghash_insert()

void BLI_ghash_insert ( GHash gh,
void key,
void val 
)

Insert a key/value pair into the gh.

Note
Duplicates are not checked, the caller is expected to ensure elements are unique unless GHASH_FLAG_ALLOW_DUPES flag is set.

Definition at line 710 of file BLI_ghash.c.

References ghash_insert().

Referenced by _bmo_slot_copy(), add(), add_hit_to_facehits(), animdata_keyframe_list_get(), armature_bone_from_name_insert_recursive(), armature_dissolve_selected_exec(), attach_stabilization_baseline_data(), bevel_vert_construct(), BKE_addon_pref_type_add(), BKE_fcurve_pathcache_create(), BKE_gpencil_frame_selected_hash(), BKE_gpencil_merge_materials_table_get(), BKE_icon_delete_unmanaged(), BKE_keyconfig_pref_type_add(), BKE_lib_override_library_property_get(), BKE_library_make_local(), BKE_main_idmap_insert_id(), BKE_main_idmap_lookup_name(), BKE_main_library_weak_reference_create(), BKE_mask_clipboard_copy_from_layer(), BKE_nlastrip_validate_name(), BKE_node_instance_hash_insert(), BKE_object_defgroup_validmap_get(), BKE_pose_channel_ensure(), BKE_pose_channels_hash_ensure(), BKE_previewimg_cached_thumbnail_read(), BKE_scene_undo_depsgraphs_extract(), blo_cache_storage_entry_register(), BLO_memfile_merge(), bm_edgering_pair_calc(), bm_edgering_pair_store_create(), bm_isect_edge_tri(), bm_log_compress_ids_to_indices(), BM_log_face_added(), BM_log_face_modified(), BM_log_face_removed(), BM_log_vert_added(), BM_log_vert_removed(), BM_mesh_edgesplit(), BM_mesh_intersect_edges(), BM_mesh_remap(), BM_select_history_map_create(), bm_uuidwalk_init_from_edge(), bm_uuidwalk_pass_add(), bm_uuidwalk_rehash_facelinks(), bmo_edge_copy(), BMO_slot_map_insert(), bmo_triangle_fill_exec(), bmo_vert_copy(), bmo_weld_verts_exec(), cloth_sim_initialize_default_node_state(), createTransObject(), custom_bone_instance_shgroup(), debug_data_insert(), DNA_alias_maps(), DNA_sdna_alias_data_ensure_structs_map(), DNA_sdna_patch_struct_nr(), ED_armature_bone_rename(), ED_armature_join_objects_exec(), ED_curve_keyindex_hash_duplicate(), ED_gpencil_join_objects_exec(), ED_gpencil_layer_merge(), ED_gpencil_select_stroke_segment(), EEVEE_motion_blur_object_data_get(), filelist_entry_select_set(), filelist_file_cache_block_create(), filelist_file_ex(), find_family_object(), freetypechar_to_vchar(), fsmenu_xdg_user_dirs_parse(), GEO_uv_prepare_pin_index(), get_automasking_strokes_list(), get_bm_knife_edge(), get_bm_knife_vert(), gpencil_analyze_strokes(), gpencil_brush_grab_stroke_init(), gpencil_copybuf_validate_colormap(), gpencil_extract_palette_from_vertex(), gpencil_fill_modal(), gpencil_interpolate_seq_exec(), gpencil_selected_hue_table(), gpencil_stroke_get_related(), gpencil_stroke_pair_table(), gpencil_strokes_copypastebuf_colors_material_to_name_create(), gpencil_strokes_copypastebuf_colors_name_to_material_create(), gpencil_walk_edge(), icon_create(), imb_global_cache_get_tile(), imb_thread_cache_get_tile(), init_editNurb_keyIndex(), init_structDNA(), int4_ghash_tests(), int_ghash_tests(), internalAdd(), keyIndex_swap(), keyIndex_updateCV(), knife_get_face_kedges(), last_displayed_thumbnails_list_ensure(), lib_override_library_resync(), make_object_duplilist_real(), menu_items_from_ui_create(), mesh_get_x_mirror_faces(), mesh_undostep_reference_elems_from_objects(), modifyMesh(), multi_small_ghash_tests_one(), new_id_to_item_mapping_add(), nodeRegisterSocketType(), nodeRegisterType(), ntreeTypeAdd(), override_library_rna_path_mapping_ensure(), palette_extract_img_exec(), pbvh_bmesh_collapse_edge(), postEditBoneDuplicate(), randint_ghash_tests(), read_file_bhead_idname_map_create(), recalcData_gpencil_strokes(), record_face_kind(), register_context_function(), Freestyle::BlenderStrokeRenderer::RenderStrokeRepBasic(), rna_brna_structs_add(), RNA_def_property(), RNA_def_struct_identifier(), RNA_init(), seq_sequence_lookup_append_effect(), seq_sequence_lookup_build_from_seqbase(), sequencer_thumbnail_ghash_init(), set_lowest_face_tri(), stitch_init(), str_ghash_tests(), tc_mesh_customdatacorrect_init_vert(), TEST(), text_autocomplete_build(), tracking_tracks_copy(), tracks_map_insert(), uv_sculpt_stroke_init(), wm_gizmogrouptype_append__end(), WM_gizmomap_gizmo_hash_new(), wm_gizmotype_append__end(), wm_link_append_exec(), WM_menutype_add(), wm_operatortype_append__end(), WM_operatortype_append_macro(), WM_operatortype_append_macro_ptr(), WM_paneltype_add(), and WM_uilisttype_add().

◆ BLI_ghash_int_new()

GHash* BLI_ghash_int_new ( const char *  info)

◆ BLI_ghash_int_new_ex()

GHash* BLI_ghash_int_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_ghash_len()

unsigned int BLI_ghash_len ( const GHash gh)

◆ BLI_ghash_lookup()

void* BLI_ghash_lookup ( const GHash gh,
const void key 
)

Lookup the value of key in gh.

Parameters
keyThe key to lookup.
Returns
the value for key or NULL.
Note
When NULL is a valid value, use BLI_ghash_lookup_p to differentiate a missing key from a key with a NULL value. (Avoids calling BLI_ghash_haskey before BLI_ghash_lookup)

Definition at line 734 of file BLI_ghash.c.

References BLI_assert, e, GHash::flag, ghash_lookup_entry(), and NULL.

Referenced by access_stabilization_baseline_data(), add_hit_to_facehits(), BKE_addon_pref_type_find(), BKE_armature_find_bone_name(), BKE_fcurve_pathcache_find(), BKE_fcurve_pathcache_find_array(), BKE_gpencil_frame_selected_hash(), BKE_gpencil_merge_materials(), BKE_keyconfig_pref_type_find(), BKE_lib_override_library_property_find(), BKE_lib_query_unused_ids_tag(), BKE_main_idmap_lookup_name(), BKE_main_idmap_lookup_uuid(), BKE_main_library_weak_reference_remove_item(), BKE_main_library_weak_reference_search_item(), BKE_mask_clipboard_copy_from_layer(), BKE_mask_clipboard_paste_to_layer(), BKE_node_instance_hash_lookup(), BKE_object_defgroup_validmap_get(), BKE_outliner_treehash_lookup_group(), BKE_outliner_treehash_remove_element(), BKE_pose_channel_find_name(), BKE_pose_channels_is_valid(), BKE_previewimg_cached_get(), BKE_scene_get_depsgraph(), BKE_tracking_copy(), BKE_view_layer_base_find(), BKE_view_layer_verify_aov(), blo_cache_storage_entry_clear_in_old(), blo_cache_storage_entry_restore_in_new(), BLO_memfile_merge(), bm_edgering_pair_calc(), bm_edgering_pair_interpolate(), bm_face_region_pivot_edge_find(), bm_face_region_pivot_edge_use_best(), bm_face_region_vert_pass_id(), bm_isect_edge_tri(), bm_log_face_from_id(), bm_log_face_id_get(), BM_log_face_removed(), BM_log_mesh_elems_reorder(), BM_log_original_mask(), BM_log_original_vert_co(), BM_log_original_vert_data(), BM_log_original_vert_no(), BM_log_vert_before_modified(), bm_log_vert_from_id(), bm_log_vert_id_get(), BM_log_vert_removed(), BM_mesh_edgesplit(), BM_mesh_intersect_edges(), BM_mesh_remap(), BM_select_history_merge_from_targetmap(), bmo_edge_copy(), bmo_extrude_discrete_faces_exec(), bmo_extrude_vert_indiv_exec(), bmo_face_copy(), bmo_triangle_fill_exec(), calculate_struct_sizes(), ccd_update_deflector_hash_single(), createTransObject(), custom_bone_instance_shgroup(), debug_data_insert(), dna_sdna_alias_from_static_elem_full(), do_cloth_brush_build_constraints_task_cb_ex(), do_cloth_brush_solve_simulation_task_cb_ex(), DRW_uniform_attrs_pool_find_ubo(), ED_gpencil_layer_merge(), ed_screen_context(), EEVEE_motion_blur_object_data_get(), filelist_entry_is_selected(), filelist_entry_select_get(), filelist_file_ex(), find_bevvert(), find_bhead_from_code_name(), find_bhead_from_idname(), find_vfont_char(), foreach_libblock_link_append_callback(), blender::ed::outliner::foreach_natural_hierarchy_child(), fsmenu_xdg_insert_entry(), generate(), GEO_uv_find_pin_index(), GEO_uv_prepare_pin_index(), get_bm_knife_edge(), get_bm_knife_vert(), get_face_kind(), get_lowest_face_tri(), get_next_free_id(), getCVKeyIndex(), gpencil_brush_clone_add(), gpencil_brush_grab_apply_cached(), gpencil_brush_grab_store_points(), gpencil_brush_grab_stroke_init(), gpencil_check_collision(), gpencil_copybuf_validate_colormap(), gpencil_interpolate_seq_exec(), gpencil_interpolate_set_points(), gpencil_interpolate_update_strokes(), gpencil_strokes_copy_exec(), gpencil_strokes_paste_exec(), icon_ghash_lookup(), imb_global_cache_get_tile(), IMB_moviecache_get(), IMB_moviecache_has_frame(), imb_thread_cache_get_tile(), imb_tile_cache_tile_free(), int4_ghash_tests(), int_ghash_tests(), knife_get_face_kedges(), last_displayed_thumbnails_list_ensure(), lib_override_hierarchy_dependencies_recursive_tag(), lib_override_hierarchy_dependencies_recursive_tag_from(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_remap(), lib_override_library_resync(), lib_override_linked_group_tag(), lib_override_linked_group_tag_recursive(), lib_override_overrides_group_tag_recursive(), lib_override_resync_tagging_finalize_recurse(), lib_override_root_find(), lib_override_root_hierarchy_set(), lib_query_unused_ids_tag_recurse(), library_foreach_ID_link(), library_make_local_copying_check(), lookUp(), make_object_duplilist_real(), menu_items_from_ui_create(), mesh_get_x_mirror_faces(), modifyMesh(), multi_small_ghash_tests_one(), mywrite_id_begin(), nodeSocketTypeFind(), nodeTypeFind(), ntreeTypeFind(), pchan_duplicate_map(), randint_ghash_tests(), Freestyle::BlenderStrokeRenderer::RenderStrokeRepBasic(), RNA_def_struct(), RNA_def_struct_nested(), RNA_struct_find(), scanfill_preprocess_self_isect(), SCULPT_cloth_sim_activate_nodes(), seq_cache_get_ex(), seq_sequence_lookup_append_effect(), seq_sequence_lookup_effects_by_seq(), seq_sequence_lookup_meta_by_seq(), SEQ_sequence_lookup_seq_by_name(), sequencer_thumbnail_ghash_init(), set_lowest_face_tri(), stitch_init(), stitch_uv_edge_generate_linked_edges(), str_ghash_tests(), tc_mesh_customdatacorrect_apply_vert(), tc_mesh_vert_orig_co_get(), TEST(), text_autocomplete_build(), thumbnail_start_job(), tracking_plane_tracks_copy(), tracks_map_merge(), UI_block_region_set(), UI_blocklist_free_inactive(), uv_edge_get(), uv_sculpt_stroke_init(), version_elem_static_from_alias(), version_struct_alias_from_static(), version_struct_static_from_alias(), view_layer_objects_base_cache_validate(), WM_gizmo_group_type_free(), WM_gizmogrouptype_find(), WM_gizmotype_find(), WM_gizmotype_remove(), wm_link_append_exec(), WM_menutype_find(), WM_operatortype_find(), WM_paneltype_find(), and WM_uilisttype_find().

◆ BLI_ghash_lookup_default()

void* BLI_ghash_lookup_default ( const GHash gh,
const void key,
void val_default 
)

A version of BLI_ghash_lookup which accepts a fallback argument.

Definition at line 741 of file BLI_ghash.c.

References BLI_assert, e, GHash::flag, and ghash_lookup_entry().

Referenced by DNA_alias_maps(), DNA_sdna_alias_data_ensure(), and DNA_struct_find_nr_wrapper().

◆ BLI_ghash_lookup_p()

void** BLI_ghash_lookup_p ( GHash gh,
const void key 
)

◆ BLI_ghash_new()

GHash* BLI_ghash_new ( GHashHashFP  hashfp,
GHashCmpFP  cmpfp,
const char *  info 
)

◆ BLI_ghash_new_ex()

GHash* BLI_ghash_new_ex ( GHashHashFP  hashfp,
GHashCmpFP  cmpfp,
const char *  info,
unsigned int  nentries_reserve 
)

Creates a new, empty GHash.

Parameters
hashfpHash callback.
cmpfpComparison callback.
infoIdentifier string for the GHash.
nentries_reserveOptionally reserve the number of members that the hash will hold. Use this to avoid resizing buckets if the size is known or can be closely approximated.
Returns
An empty GHash.

Definition at line 681 of file BLI_ghash.c.

References ghash_new().

Referenced by BKE_outliner_treehash_create_from_treestore(), BLI_ghash_int_new_ex(), BLI_ghash_new(), BLI_ghash_pair_new_ex(), BLI_ghash_ptr_new_ex(), BLI_ghash_str_new_ex(), BM_log_create(), DNA_alias_maps(), filelist_cache_init(), ghash_bmelem_new_ex(), and mesh_get_x_mirror_faces().

◆ BLI_ghash_pair_new()

GHash* BLI_ghash_pair_new ( const char *  info)

Definition at line 220 of file BLI_ghash_utils.c.

References BLI_ghash_pair_new_ex().

◆ BLI_ghash_pair_new_ex()

GHash* BLI_ghash_pair_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_ghash_pop()

bool BLI_ghash_pop ( GHash gh,
GHashIterState state,
void **  r_key,
void **  r_val 
)

Remove a random entry from gh, returning true if a key/value pair could be removed, false otherwise.

Parameters
r_keyThe removed key.
r_valThe removed value.
stateUsed for efficient removal.
Returns
true if there was something to pop, false if ghash was already empty.

Definition at line 827 of file BLI_ghash.c.

References BLI_assert, BLI_mempool_free(), BMVert::e, e, GHash::entrypool, GHash::flag, ghash_pop(), NULL, and state.

Referenced by int_ghash_tests(), and TEST().

◆ BLI_ghash_popkey()

void* BLI_ghash_popkey ( GHash gh,
const void key,
GHashKeyFreeFP  keyfreefp 
)

Remove key from gh, returning the value or NULL if the key wasn't found.

Parameters
keyThe key to remove.
keyfreefpOptional callback to free the key.
Returns
the value of key int gh or NULL.

Definition at line 805 of file BLI_ghash.c.

References BLI_assert, BLI_mempool_free(), e, GHash::entrypool, GHash::flag, ghash_bucket_index(), ghash_keyhash(), ghash_remove_ex(), hash, and NULL.

Referenced by BKE_icon_delete(), BKE_icon_delete_unmanaged(), BKE_node_instance_hash_pop(), BKE_previewimg_cached_release(), filelist_file_cache_block_create(), filelist_file_ex(), mesh_undostep_reference_elems_from_objects(), popCVKeyIndex(), and TEST().

◆ BLI_ghash_ptr_new()

GHash* BLI_ghash_ptr_new ( const char *  info)

Definition at line 193 of file BLI_ghash_utils.c.

References BLI_ghash_ptr_new_ex().

Referenced by BKE_mask_clipboard_copy_from_layer(), BKE_tracking_copy(), Freestyle::BlenderStrokeRenderer::BlenderStrokeRenderer(), BLI_array_store_is_valid(), bm_edgering_pair_calc(), bm_edgering_pair_store_create(), bm_face_region_pivot_edge_find(), BM_mesh_bevel(), BM_mesh_edgesplit(), BM_mesh_intersect(), BM_select_history_map_create(), bmo_inset_region_exec(), bmo_mesh_copy(), bmo_op_slots_init(), bmo_weld_verts_exec(), BPY_rna_init(), cloth_sim_initialize_default_node_state(), ED_gpencil_select_stroke_segment(), ED_object_data_xform_container_create(), ED_object_data_xform_container_item_ensure(), ED_object_xform_skip_child_container_create(), edbm_face_split_by_edges_exec(), EEVEE_materials_cache_init(), gpencil_analyze_strokes(), gpencil_interpolate_seq_exec(), gpencil_sculpt_brush_apply_event(), gpencil_sculpt_brush_init(), gpencil_stroke_pair_table(), gpencil_strokes_copypastebuf_colors_material_to_name_create(), init_editNurb_keyIndex(), init_stabilization_working_context(), knife_add_cut(), knifetool_init(), last_displayed_thumbnails_list_ensure(), lib_override_library_main_resync_on_library_indirect_level(), make_object_duplilist_real(), menu_items_from_ui_create(), OVERLAY_armature_cache_init(), pbvh_bmesh_collapse_short_edges(), recalcData_gpencil_strokes(), sb_new_scratch(), scanfill_preprocess_self_isect(), seq_sequence_lookup_init(), sequencer_thumbnail_ghash_init(), tc_mesh_customdatacorrect_init_container_generic(), tracks_map_new(), WM_gizmomap_gizmo_hash_new(), workbench_opaque_cache_init(), and workbench_transparent_cache_init().

◆ BLI_ghash_ptr_new_ex()

GHash* BLI_ghash_ptr_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_ghash_reinsert()

bool BLI_ghash_reinsert ( GHash gh,
void key,
void val,
GHashKeyFreeFP  keyfreefp,
GHashValFreeFP  valfreefp 
)

Inserts a new value to a key that may already be in ghash.

Avoids BLI_ghash_remove, BLI_ghash_insert calls (double lookups)

Returns
true if a new key has been added.

Definition at line 715 of file BLI_ghash.c.

References ghash_insert_safe().

Referenced by BKE_object_material_remap_calc(), bm_log_face_id_set(), bm_log_vert_id_set(), do_moviecache_put(), seq_cache_put_ex(), tracks_map_merge(), and UI_block_region_set().

◆ BLI_ghash_remove()

bool BLI_ghash_remove ( GHash gh,
const void key,
GHashKeyFreeFP  keyfreefp,
GHashValFreeFP  valfreefp 
)

Remove key from gh, or return false if the key wasn't found.

Parameters
keyThe key to remove.
keyfreefpOptional callback to free the key.
valfreefpOptional callback to free the value.
Returns
true if key was removed from gh.

Definition at line 790 of file BLI_ghash.c.

References BLI_mempool_free(), e, GHash::entrypool, ghash_bucket_index(), ghash_keyhash(), ghash_remove_ex(), and hash.

Referenced by BKE_addon_pref_type_remove(), BKE_curve_editNurb_keyIndex_delCV(), BKE_icon_id_delete(), BKE_icons_deferred_free(), BKE_keyconfig_pref_type_remove(), BKE_layer_collection_sync(), BKE_lib_override_library_property_delete(), BKE_main_idmap_remove_id(), BKE_main_library_weak_reference_remove_item(), BKE_node_instance_hash_remove(), BKE_outliner_treehash_remove_element(), BKE_pose_channels_remove(), BKE_scene_free_view_layer_depsgraph(), BKE_sim_debug_data_clear_category(), BKE_sim_debug_data_remove_element(), BLI_gset_remove(), BM_log_face_removed(), BM_log_vert_removed(), check_unused_keys(), DNA_sdna_patch_struct_nr(), DRW_uniform_attrs_pool_clear_all(), ED_armature_bone_rename(), filelist_entry_select_set(), filelist_file_cache_block_release(), filelist_file_ex(), imb_global_cache_get_tile(), IMB_moviecache_cleanup(), IMB_moviecache_remove(), imb_thread_cache_get_tile(), imb_tile_cache_tile_free(), menu_items_from_ui_create(), nodeUnregisterSocketType(), nodeUnregisterType(), ntreeTypeFreeLink(), RNA_def_struct_identifier(), SEQ_cache_cleanup(), seq_cache_cleanup_sequence(), seq_cache_free_temp_cache(), seq_cache_recycle_linked(), seq_cache_thumbnail_cleanup(), UI_blocklist_free_inactive(), WM_gizmo_group_type_free_ptr(), WM_gizmotype_remove_ptr(), WM_menutype_freelink(), WM_operatortype_remove_ptr(), WM_paneltype_remove(), and WM_uilisttype_remove_ptr().

◆ BLI_ghash_replace_key()

void* BLI_ghash_replace_key ( GHash gh,
void key 
)

Replaces the key of an item in the gh.

Use when a key is re-allocated or its memory location is changed.

Returns
The previous key or NULL if not found, the caller may free if it's needed.

Definition at line 721 of file BLI_ghash.c.

References BMVert::e, e, ghash_bucket_index(), ghash_keyhash(), ghash_lookup_entry_ex(), hash, and NULL.

Referenced by BLI_gset_replace_key().

◆ BLI_ghash_reserve()

void BLI_ghash_reserve ( GHash gh,
unsigned int  nentries_reserve 
)

Reserve given amount of entries (resize gh accordingly if needed).

Definition at line 699 of file BLI_ghash.c.

References ghash_buckets_contract(), and ghash_buckets_expand().

Referenced by BM_log_all_added(), int4_ghash_tests(), int_ghash_tests(), multi_small_ghash_tests_one(), randint_ghash_tests(), and str_ghash_tests().

◆ BLI_ghash_str_new()

GHash* BLI_ghash_str_new ( const char *  info)

◆ BLI_ghash_str_new_ex()

GHash* BLI_ghash_str_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_ghashIterator_done()

BLI_INLINE bool BLI_ghashIterator_done ( const GHashIterator ghi)

◆ BLI_ghashIterator_free()

void BLI_ghashIterator_free ( GHashIterator ghi)

◆ BLI_ghashIterator_getKey()

BLI_INLINE void * BLI_ghashIterator_getKey ( GHashIterator ghi)

Definition at line 298 of file BLI_ghash.h.

References GHashIterator::curEntry.

Referenced by _bmo_slot_copy(), armature_dissolve_selected_exec(), BKE_gpencil_stroke_copy_to_keyframes(), BKE_node_instance_hash_iterator_get_key(), BLI_array_store_is_valid(), BLI_gsetIterator_getKey(), bm_log_face_values_swap(), bm_log_faces_restore(), bm_log_faces_unmake(), bm_log_id_ghash_release(), bm_log_id_ghash_retake(), bm_log_vert_values_swap(), bm_log_verts_restore(), bm_log_verts_unmake(), BM_mesh_intersect(), bm_mesh_region_match_pair(), bm_uuidwalk_pass_add(), bm_uuidwalk_rehash(), BMO_iter_step(), bmo_planar_faces_exec(), BMO_slot_map_to_flag(), BPY_rna_exit(), bpy_slot_to_py(), build_mesh_leaf_node(), check_unused_keys(), ED_curve_keyindex_hash_duplicate(), ED_object_data_xform_container_update_all(), ED_object_xform_skip_child_container_update_all(), edbm_face_split_by_edges_exec(), get_keys_sorted(), gpencil_copybuf_validate_colormap(), gpencil_fill_modal(), gpencil_joined_fix_animdata_cb(), IMB_moviecache_cleanup(), IMB_moviecache_get_cache_segments(), IMB_moviecacheIter_getUserKey(), joined_armature_fix_animdata_cb(), knife_add_cut(), lib_override_library_main_resync_on_library_indirect_level(), modifyMesh(), sb_detect_aabb_collisionCached(), sb_detect_edge_collisionCached(), sb_detect_face_collisionCached(), sb_detect_face_pointCached(), sb_detect_vertex_collisionCached(), SEQ_cache_cleanup(), seq_cache_cleanup_sequence(), seq_cache_free_temp_cache(), seq_cache_get_item_for_removal(), SEQ_cache_iterate(), seq_cache_thumbnail_cleanup(), stitch_init(), tc_mesh_customdatacorrect_restore(), thumbnail_start_job(), and uv_sculpt_stroke_init().

◆ BLI_ghashIterator_getValue()

BLI_INLINE void * BLI_ghashIterator_getValue ( GHashIterator ghi)

Definition at line 302 of file BLI_ghash.h.

References GHashIterator::curEntry.

Referenced by _bmo_slot_copy(), BKE_main_relations_tag_set(), BKE_node_instance_hash_iterator_get_value(), BKE_outliner_treehash_clear_used(), BKE_palette_from_hash(), BKE_sim_debug_data_clear_category(), BKE_vfont_free_data(), BLI_array_store_is_valid(), bm_log_face_values_swap(), bm_log_faces_restore(), bm_log_vert_values_swap(), bm_log_verts_restore(), bm_log_verts_unmake(), BM_mesh_intersect(), bm_uuidwalk_pass_add(), bmo_planar_faces_exec(), bpy_slot_to_py(), build_mesh_leaf_node(), check_unused_keys(), ED_curve_keyindex_hash_duplicate(), ED_gpencil_select_stroke_segment(), ED_object_data_xform_container_update_all(), ED_object_xform_skip_child_container_update_all(), edbm_face_split_by_edges_exec(), EEVEE_motion_blur_cache_finish(), EEVEE_motion_blur_swap_data(), gpencil_copybuf_validate_colormap(), gpencil_joined_fix_animdata_cb(), IMB_moviecache_cleanup(), IMB_moviecache_get_cache_segments(), IMB_moviecacheIter_getImBuf(), joined_armature_fix_animdata_cb(), knife_add_cut(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_remap(), menu_items_from_all_operators(), menu_items_from_ui_create(), modifyMesh(), operator_search_update_fn(), pyop_dir(), sb_detect_aabb_collisionCached(), sb_detect_edge_collisionCached(), sb_detect_face_collisionCached(), sb_detect_face_pointCached(), sb_detect_vertex_collisionCached(), seq_cache_get_item_for_removal(), tc_mesh_customdatacorrect_restore(), text_autocomplete_build(), wm_gizmomap_select_all_intern(), WM_menutype_free(), WM_menutype_idname_visit_for_search(), WM_operatortype_idname_visit_for_search(), WM_operatortype_last_properties_clear_all(), WM_paneltype_idname_visit_for_search(), and WM_uilisttype_free().

◆ BLI_ghashIterator_getValue_p()

BLI_INLINE void ** BLI_ghashIterator_getValue_p ( GHashIterator ghi)

◆ BLI_ghashIterator_init()

void BLI_ghashIterator_init ( GHashIterator ghi,
GHash gh 
)

◆ BLI_ghashIterator_new()

GHashIterator* BLI_ghashIterator_new ( GHash gh)

Create a new GHashIterator. The hash table must not be mutated while the iterator is in use, and the iterator will step exactly #BLI_ghash_len(gh) times before becoming done.

Parameters
ghThe GHash to iterate over.
Returns
Pointer to a new iterator.

Definition at line 891 of file BLI_ghash.c.

References BLI_ghashIterator_init(), and MEM_mallocN.

Referenced by BKE_main_relations_tag_set(), BKE_node_instance_hash_iterator_new(), BLI_gsetIterator_new(), IMB_moviecacheIter_new(), lib_override_library_main_resync_on_library_indirect_level(), nodeSocketTypeGetIterator(), nodeTypeGetIterator(), ntreeTypeGetIterator(), sb_detect_aabb_collisionCached(), sb_detect_edge_collisionCached(), sb_detect_face_collisionCached(), sb_detect_face_pointCached(), and sb_detect_vertex_collisionCached().

◆ BLI_ghashIterator_step()

void BLI_ghashIterator_step ( GHashIterator ghi)

◆ BLI_ghashutil_combine_hash()

size_t BLI_ghashutil_combine_hash ( size_t  hash_a,
size_t  hash_b 
)

◆ BLI_ghashutil_intcmp()

bool BLI_ghashutil_intcmp ( const void a,
const void b 
)

◆ BLI_ghashutil_inthash_p()

unsigned int BLI_ghashutil_inthash_p ( const void ptr)

◆ BLI_ghashutil_inthash_p_murmur()

unsigned int BLI_ghashutil_inthash_p_murmur ( const void ptr)

Definition at line 100 of file BLI_ghash_utils.c.

References BLI_hash_mm2(), and ptr.

Referenced by TEST().

◆ BLI_ghashutil_inthash_p_simple()

unsigned int BLI_ghashutil_inthash_p_simple ( const void ptr)

Definition at line 107 of file BLI_ghash_utils.c.

References POINTER_AS_UINT, and ptr.

Referenced by BLO_memfile_write_init().

◆ BLI_ghashutil_pairalloc()

GHashPair* BLI_ghashutil_pairalloc ( const void first,
const void second 
)

Definition at line 155 of file BLI_ghash_utils.c.

References GHashPair::first, MEM_mallocN, and GHashPair::second.

Referenced by bm_edgering_pair_calc().

◆ BLI_ghashutil_paircmp()

bool BLI_ghashutil_paircmp ( const void a,
const void b 
)

Definition at line 170 of file BLI_ghash_utils.c.

References A, Freestyle::a, B, and usdtokens::b().

Referenced by BLI_ghash_pair_new_ex(), and BLI_gset_pair_new_ex().

◆ BLI_ghashutil_pairfree()

void BLI_ghashutil_pairfree ( void ptr)

Definition at line 178 of file BLI_ghash_utils.c.

References MEM_freeN, and ptr.

◆ BLI_ghashutil_pairhash()

unsigned int BLI_ghashutil_pairhash ( const void ptr)

◆ BLI_ghashutil_ptrcmp()

bool BLI_ghashutil_ptrcmp ( const void a,
const void b 
)

◆ BLI_ghashutil_ptrhash()

unsigned int BLI_ghashutil_ptrhash ( const void key)

◆ BLI_ghashutil_strcmp()

bool BLI_ghashutil_strcmp ( const void a,
const void b 
)

◆ BLI_ghashutil_strhash_n()

unsigned int BLI_ghashutil_strhash_n ( const char *  key,
size_t  n 
)

This function implements the widely used djb hash apparently posted by Daniel Bernstein to comp.lang.c some time ago. The 32 bit unsigned hash value starts at 5381 and for each byte 'c' in the string, is updated: hash = hash * 33 + c. This function uses the signed value of each byte.

NOTE: this is the same hash method that glib 2.34.0 uses.

Definition at line 122 of file BLI_ghash_utils.c.

Referenced by UniqueName_Key::hash(), Uniqueness_Key::hash(), and ui_popup_string_hash().

◆ BLI_ghashutil_strhash_p()

unsigned int BLI_ghashutil_strhash_p ( const void ptr)

◆ BLI_ghashutil_strhash_p_murmur()

unsigned int BLI_ghashutil_strhash_p_murmur ( const void ptr)

◆ BLI_ghashutil_uinthash()

unsigned int BLI_ghashutil_uinthash ( unsigned int  key)

◆ BLI_ghashutil_uinthash_v4()

unsigned int BLI_ghashutil_uinthash_v4 ( const unsigned int  key[4])

Definition at line 51 of file BLI_ghash_utils.c.

References hash.

◆ BLI_ghashutil_uinthash_v4_cmp()

bool BLI_ghashutil_uinthash_v4_cmp ( const void a,
const void b 
)

Definition at line 69 of file BLI_ghash_utils.c.

References Freestyle::a, and usdtokens::b().

Referenced by TEST().

◆ BLI_ghashutil_uinthash_v4_murmur()

unsigned int BLI_ghashutil_uinthash_v4_murmur ( const unsigned int  key[4])

Definition at line 64 of file BLI_ghash_utils.c.

References BLI_hash_mm2().

◆ BLI_gset_add()

bool BLI_gset_add ( GSet gs,
void key 
)

A version of BLI_gset_insert which checks first if the key is in the set.

Returns
true if a new key has been added.
Note
GHash has no equivalent to this because typically the value would be different.

Definition at line 969 of file BLI_ghash.c.

References ghash_insert_safe_keyonly(), and NULL.

Referenced by add_selected_item(), animdata_filter_remove_duplis(), BKE_fcurves_calc_keyed_frames_ex(), BKE_lib_query_foreachid_process(), BKE_library_foreach_ID_embedded(), BKE_library_make_local(), BKE_main_gset_create(), BKE_main_id_repair_duplicate_names_listbase(), BKE_pbvh_get_grid_updates(), BLO_blendhandle_get_linkable_groups(), bm_isect_tri_tri(), BM_mesh_intersect(), bmw_FaceLoopWalker_step(), collection_find_data_to_edit(), createTransObject(), do_render_compositor_scenes(), draw_seq_strip_thumbnail(), drw_batch_cache_generate_requested_delayed(), ED_object_xform_array_m4(), ED_object_xform_skip_child_container_item_ensure_from_array(), get_used_lightgroups(), gpencil_select_same_material(), gpu_material_library_use_function(), IMB_thumb_path_lock(), knife_make_face_cuts(), layer_collection_find_data_to_edit(), library_foreach_ID_link(), library_make_local_copying_check(), loop_find_region(), make_override_library_exec(), make_structDNA(), menu_items_from_ui_create(), menu_types_add_from_keymap_items(), nla_eval_domain_action(), outliner_find_objects_to_delete(), outliner_hide_find_data_to_edit(), pbvh_bmesh_collapse_edge(), pbvh_bmesh_create_nodes_fast_recursive(), pbvh_bmesh_node_finalize(), pbvh_bmesh_split_edge(), pose_face_sets_fk_find_masked_floodfill_cb(), pose_face_sets_floodfill_cb(), pose_ik_chain_init_face_sets(), py_bvhtree_overlap(), screen_ctx_sel_actions_impl(), sculpt_boundary_index_add(), sculpt_expand_geodesics_from_state_boundary(), sculpt_expand_modal(), sculpt_expand_snap_initialize_from_enabled(), SCULPT_geodesic_from_vertex(), SCULPT_geodesic_from_vertex_and_symm(), select_more_less_seq__internal(), SEQ_fcurves_by_strip_get(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), skin_root_clear(), skin_root_mark_exec(), stats_object(), subdiv_ccg_affected_face_adjacency(), uv_rip_pairs_add(), uv_rip_single_from_loop(), uv_select_overlap(), and wm_msg_rna_update_by_id().

◆ BLI_gset_clear()

void BLI_gset_clear ( GSet gs,
GSetKeyFreeFP  keyfreefp 
)

◆ BLI_gset_clear_ex()

void BLI_gset_clear_ex ( GSet gs,
GSetKeyFreeFP  keyfreefp,
unsigned int  nentries_reserve 
)

Definition at line 1027 of file BLI_ghash.c.

References BLI_ghash_clear_ex(), and NULL.

◆ BLI_gset_copy()

GSet* BLI_gset_copy ( const GSet gs,
GSetKeyCopyFP  keycopyfp 
)

Copy given GSet. Keys are also copied if callback is provided, else pointers remain the same.

Definition at line 952 of file BLI_ghash.c.

References ghash_copy(), and NULL.

◆ BLI_gset_ensure_p_ex()

bool BLI_gset_ensure_p_ex ( GSet gs,
const void key,
void ***  r_key 
)

Set counterpart to BLI_ghash_ensure_p_ex. similar to BLI_gset_add, except it returns the key pointer.

Warning
Caller must write to r_key when returning false.

Definition at line 974 of file BLI_ghash.c.

References BLI_mempool_alloc(), e, ghash_bucket_index(), ghash_insert_ex_keyonly_entry(), ghash_keyhash(), ghash_lookup_entry_ex(), hash, and NULL.

Referenced by bm_edgering_pair_calc(), engine_tile_highlight_set(), IMB_anim_index_rebuild_context(), object_base_unique(), SEQ_collection_append_strip(), and WM_msg_subscribe_with_key().

◆ BLI_gset_flag_clear()

void BLI_gset_flag_clear ( GSet gs,
unsigned int  flag 
)

Definition at line 1047 of file BLI_ghash.c.

References BLI_mempool::flag.

◆ BLI_gset_flag_set()

void BLI_gset_flag_set ( GSet gs,
unsigned int  flag 
)

Definition at line 1042 of file BLI_ghash.c.

References BLI_mempool::flag.

Referenced by BKE_mesh_merge_verts().

◆ BLI_gset_free()

void BLI_gset_free ( GSet gs,
GSetKeyFreeFP  keyfreefp 
)

Definition at line 1037 of file BLI_ghash.c.

References BLI_ghash_free(), and NULL.

Referenced by animdata_filter_remove_duplis(), animsys_evaluate_nla_domain(), BKE_fcurves_calc_keyed_frames_ex(), BKE_library_make_local(), BKE_main_id_repair_duplicate_names_listbase(), BKE_main_idmap_destroy(), BKE_modifier_check_uuids_unique_and_report(), BKE_pbvh_free(), BKE_pbvh_get_grid_updates(), BKE_pose_check_uuids_unique_and_report(), BKE_scene_objects_iterator_end(), BLO_blendhandle_get_linkable_groups(), bm_edgering_pair_calc(), BM_mesh_beautify_fill(), BM_mesh_intersect(), bm_uuidwalk_free(), bmo_grid_fill_exec(), bmo_subdivide_edgering_exec(), BMW_end(), bone_mouse_select_menu(), cachefile_handle_free(), collection_flag_exec(), collection_instance_exec(), collection_isolate_exec(), collection_link_exec(), collection_view_layer_exec(), collection_visibility_exec(), collections_view_layer_poll(), createTransObject(), do_render_compositor_scenes(), drw_task_graph_deinit(), ED_image_save_all_modified_info(), ED_object_xform_array_m4(), ED_object_xform_skip_child_container_item_ensure_from_array(), gpencil_select_same_material(), gpu_node_graph_free(), IMB_thumb_locks_release(), join_tracks_exec(), knifetool_exit_ex(), last_displayed_thumbnails_list_free(), lib_override_library_create_post_process(), library_foreach_ID_data_cleanup(), loop_find_regions(), make_override_library_exec(), make_structDNA(), menu_items_from_ui_create(), outliner_collection_delete(), outliner_delete_exec(), outliner_hide_exec(), pbvh_bmesh_node_split(), pose_ik_chain_init_face_sets(), pose_ik_chain_init_face_sets_fk(), py_bvhtree_overlap(), RE_FreeRender(), recalcData_pose(), render_pipeline_free(), screen_ctx_sel_actions_impl(), sculpt_boundary_indices_init(), sculpt_expand_cache_data_free(), sculpt_expand_geodesics_from_state_boundary(), sculpt_expand_modal(), SCULPT_geodesic_from_vertex(), SCULPT_geodesic_from_vertex_and_symm(), select_more_less_seq__internal(), selected_items_free(), SEQ_animation_duplicate(), SEQ_collection_free(), SEQ_free_animdata(), SEQ_offset_animdata(), seq_proxy_build_job(), SEQ_relations_check_uuids_unique_and_report(), sequencer_copy_animation(), sequencer_rebuild_proxy_exec(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), skin_root_mark_exec(), special_aftertrans_update__pose(), stats_update(), subdiv_ccg_average_faces_boundaries_and_corners(), uv_rip_pairs_free(), uv_rip_single_free(), uv_select_overlap(), view_layer_add_used_lightgroups_exec(), view_layer_remove_unused_lightgroups_exec(), and WM_msgbus_destroy().

◆ BLI_gset_haskey()

bool BLI_gset_haskey ( const GSet gs,
const void key 
)

Definition at line 1007 of file BLI_ghash.c.

References ghash_lookup_entry(), and NULL.

Referenced by BKE_main_idmap_lookup_id(), BKE_mesh_merge_verts(), bm_edge_update_beauty_cost_single(), BM_mesh_beautify_fill(), BM_mesh_intersect(), bm_uuidwalk_pass_add(), bmw_ConnectedVertexWalker_step(), bmw_ConnectedVertexWalker_visitVertex(), bmw_EdgeboundaryWalker_begin(), bmw_EdgeboundaryWalker_step(), bmw_EdgeLoopWalker_step(), bmw_EdgeringWalker_step(), bmw_FaceLoopWalker_include_face(), bmw_FaceShellWalker_visitEdge(), bmw_IslandboundWalker_step(), bmw_IslandWalker_step_ex(), bmw_LoopShellWalker_visitEdgeWire(), bmw_LoopShellWalker_visitLoop(), bmw_LoopShellWireWalker_visitVert(), bmw_NonManifoldedgeWalker_begin(), bmw_NonManifoldedgeWalker_step(), bmw_UVEdgeWalker_begin(), bmw_UVEdgeWalker_step(), bmw_VertShellWalker_visitEdge(), bone_mouse_select_menu(), createTransObject(), do_render_compositor_scenes(), ED_image_save_all_modified_info(), ED_object_xform_skip_child_container_item_ensure_from_array(), gpencil_select_same_material(), is_edit_bone_selected(), is_object_selected(), is_pose_bone_selected(), library_make_local_copying_check(), loop_find_regions(), make_override_library_exec(), pbvh_bmesh_collapse_edge(), pbvh_bmesh_create_nodes_fast_recursive(), pbvh_bmesh_face_remove(), pbvh_bmesh_node_finalize(), pbvh_bmesh_split_edge(), pbvh_bmesh_vert_ownership_transfer(), pbvh_bmesh_vert_remove(), pose_face_sets_fk_find_masked_floodfill_cb(), pose_face_sets_floodfill_cb(), sculpt_boundary_indices_init(), sculpt_expand_face_state_get(), sculpt_expand_state_get(), SCULPT_geodesic_mesh_create(), sculpt_geodesic_mesh_test_dist_add(), SEQ_collection_has_strip(), uv_rip_pairs_add(), uv_rip_pairs_remove(), view_layer_remove_unused_lightgroups_exec(), and wm_msg_rna_update_by_id().

◆ BLI_gset_insert()

void BLI_gset_insert ( GSet gs,
void key 
)

◆ BLI_gset_int_new()

GSet* BLI_gset_int_new ( const char *  info)

◆ BLI_gset_int_new_ex()

GSet* BLI_gset_int_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_gset_len()

unsigned int BLI_gset_len ( const GSet gs)

◆ BLI_gset_lookup()

void* BLI_gset_lookup ( const GSet gs,
const void key 
)

◆ BLI_gset_new()

GSet* BLI_gset_new ( GSetHashFP  hashfp,
GSetCmpFP  cmpfp,
const char *  info 
)

◆ BLI_gset_new_ex()

GSet* BLI_gset_new_ex ( GSetHashFP  hashfp,
GSetCmpFP  cmpfp,
const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_gset_pair_new()

GSet* BLI_gset_pair_new ( const char *  info)

Definition at line 253 of file BLI_ghash_utils.c.

References BLI_gset_pair_new_ex().

Referenced by bm_edgering_pair_calc().

◆ BLI_gset_pair_new_ex()

GSet* BLI_gset_pair_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_gset_pop()

bool BLI_gset_pop ( GSet gs,
GSetIterState state,
void **  r_key 
)

Remove a random entry from gs, returning true if a key could be removed, false otherwise.

Parameters
r_keyThe removed key.
stateUsed for efficient removal.
Returns
true if there was something to pop, false if gset was already empty.

Definition at line 1012 of file BLI_ghash.c.

References BLI_mempool_free(), e, ghash_pop(), NULL, and state.

Referenced by GPUCodegen::generate_library().

◆ BLI_gset_pop_key()

void* BLI_gset_pop_key ( GSet gs,
const void key 
)

Returns the pointer to the key if it's found, removing it from the GSet.

Note
Caller must handle freeing.

Definition at line 1067 of file BLI_ghash.c.

References BLI_mempool_free(), e, ghash_bucket_index(), ghash_keyhash(), ghash_remove_ex(), hash, and NULL.

◆ BLI_gset_ptr_new()

GSet* BLI_gset_ptr_new ( const char *  info)

◆ BLI_gset_ptr_new_ex()

GSet* BLI_gset_ptr_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_gset_reinsert()

bool BLI_gset_reinsert ( GSet gh,
void key,
GSetKeyFreeFP  keyfreefp 
)

Adds the key to the set (duplicates are managed). Matching BLI_ghash_reinsert

Returns
true if a new key has been added.

Definition at line 992 of file BLI_ghash.c.

References ghash_insert_safe_keyonly().

Referenced by BKE_cachefile_reader_open().

◆ BLI_gset_remove()

bool BLI_gset_remove ( GSet gs,
const void key,
GSetKeyFreeFP  keyfreefp 
)

◆ BLI_gset_replace_key()

void* BLI_gset_replace_key ( GSet gs,
void key 
)

Replaces the key to the set if it's found. Matching BLI_ghash_replace_key

Returns
The old key or NULL if not found.

Definition at line 997 of file BLI_ghash.c.

References BLI_ghash_replace_key().

◆ BLI_gset_str_new()

GSet* BLI_gset_str_new ( const char *  info)

◆ BLI_gset_str_new_ex()

GSet* BLI_gset_str_new_ex ( const char *  info,
unsigned int  nentries_reserve 
)

◆ BLI_gsetIterator_done()

BLI_INLINE bool BLI_gsetIterator_done ( const GSetIterator gsi)

◆ BLI_gsetIterator_free()

BLI_INLINE void BLI_gsetIterator_free ( GSetIterator gsi)

Definition at line 454 of file BLI_ghash.h.

References BLI_ghashIterator_free().

◆ BLI_gsetIterator_getKey()

BLI_INLINE void* BLI_gsetIterator_getKey ( GSetIterator gsi)

Definition at line 458 of file BLI_ghash.h.

References BLI_ghashIterator_getKey().

Referenced by BKE_fcurves_calc_keyed_frames_ex(), BKE_pbvh_bmesh_node_raycast_detail(), BKE_pbvh_bmesh_node_save_orig(), BKE_pbvh_get_grid_updates(), BM_mesh_intersect(), bmo_grid_fill_exec(), bmo_subdivide_edgering_exec(), cachefile_handle_free(), collection_flag_exec(), collection_instance_exec(), collection_isolate_exec(), collection_link_exec(), collection_view_layer_exec(), collection_visibility_exec(), collections_view_layer_poll(), gpu_bmesh_face_visible_count(), gpu_bmesh_vert_visible_count(), GPU_pbvh_bmesh_buffers_update(), join_tracks_exec(), last_displayed_thumbnails_list_cleanup(), long_edge_queue_create(), outliner_collection_delete(), outliner_do_object_delete(), outliner_hide_exec(), partialvis_update_bmesh_faces(), partialvis_update_bmesh_verts(), pbvh_bmesh_node_finalize(), pbvh_bmesh_node_limit_ensure(), pbvh_bmesh_node_nearest_to_ray(), pbvh_bmesh_node_raycast(), pbvh_bmesh_node_split(), pbvh_bmesh_node_visibility_update(), pbvh_bmesh_normals_update(), pose_face_sets_floodfill_cb(), recalcData_pose(), SCULPT_geodesic_fallback_create(), SCULPT_geodesic_mesh_create(), sculpt_undo_bmesh_push(), select_more_less_seq__internal(), SEQ_iterator_ensure(), SEQ_iterator_yield(), sequencer_thumbnail_closest_previous_frame_get(), short_edge_queue_create(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), special_aftertrans_update__pose(), subdiv_ccg_average_faces_boundaries_and_corners(), uv_rip_object(), uv_rip_pairs_calc_center_and_direction(), uv_rip_single_from_loop(), wm_msg_rna_remove_by_id(), and wm_msg_rna_update_by_id().

◆ BLI_gsetIterator_init()

BLI_INLINE void BLI_gsetIterator_init ( GSetIterator gsi,
GSet gs 
)

◆ BLI_gsetIterator_new()

BLI_INLINE GSetIterator* BLI_gsetIterator_new ( GSet gs)

Definition at line 446 of file BLI_ghash.h.

References BLI_ghashIterator_new().

◆ BLI_gsetIterator_step()

BLI_INLINE void BLI_gsetIterator_step ( GSetIterator gsi)