TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ckh.h
Go to the documentation of this file.
1 /******************************************************************************/
2 #ifdef JEMALLOC_H_TYPES
3 
4 typedef struct ckh_s ckh_t;
5 typedef struct ckhc_s ckhc_t;
6 
7 /* Typedefs to allow easy function pointer passing. */
8 typedef void ckh_hash_t (const void *, size_t[2]);
9 typedef bool ckh_keycomp_t (const void *, const void *);
10 
11 /* Maintain counters used to get an idea of performance. */
12 /* #define CKH_COUNT */
13 /* Print counter values in ckh_delete() (requires CKH_COUNT). */
14 /* #define CKH_VERBOSE */
15 
16 /*
17  * There are 2^LG_CKH_BUCKET_CELLS cells in each hash table bucket. Try to fit
18  * one bucket per L1 cache line.
19  */
20 #define LG_CKH_BUCKET_CELLS (LG_CACHELINE - LG_SIZEOF_PTR - 1)
21 
22 #endif /* JEMALLOC_H_TYPES */
23 /******************************************************************************/
24 #ifdef JEMALLOC_H_STRUCTS
25 
26 /* Hash table cell. */
27 struct ckhc_s {
28  const void *key;
29  const void *data;
30 };
31 
32 struct ckh_s {
33 #ifdef CKH_COUNT
34  /* Counters used to get an idea of performance. */
35  uint64_t ngrows;
36  uint64_t nshrinks;
37  uint64_t nshrinkfails;
38  uint64_t ninserts;
39  uint64_t nrelocs;
40 #endif
41 
42  /* Used for pseudo-random number generation. */
43 #define CKH_A 1103515241
44 #define CKH_C 12347
46 
47  /* Total number of items. */
48  size_t count;
49 
50  /*
51  * Minimum and current number of hash table buckets. There are
52  * 2^LG_CKH_BUCKET_CELLS cells per bucket.
53  */
54  unsigned lg_minbuckets;
55  unsigned lg_curbuckets;
56 
57  /* Hash and comparison functions. */
58  ckh_hash_t *hash;
59  ckh_keycomp_t *keycomp;
60 
61  /* Hash table with 2^lg_curbuckets buckets. */
62  ckhc_t *tab;
63 };
64 
65 #endif /* JEMALLOC_H_STRUCTS */
66 /******************************************************************************/
67 #ifdef JEMALLOC_H_EXTERNS
68 
69 bool ckh_new(ckh_t *ckh, size_t minitems, ckh_hash_t *hash,
70  ckh_keycomp_t *keycomp);
71 void ckh_delete(ckh_t *ckh);
72 size_t ckh_count(ckh_t *ckh);
73 bool ckh_iter(ckh_t *ckh, size_t *tabind, void **key, void **data);
74 bool ckh_insert(ckh_t *ckh, const void *key, const void *data);
75 bool ckh_remove(ckh_t *ckh, const void *searchkey, void **key,
76  void **data);
77 bool ckh_search(ckh_t *ckh, const void *seachkey, void **key, void **data);
78 void ckh_string_hash(const void *key, size_t r_hash[2]);
79 bool ckh_string_keycomp(const void *k1, const void *k2);
80 void ckh_pointer_hash(const void *key, size_t r_hash[2]);
81 bool ckh_pointer_keycomp(const void *k1, const void *k2);
82 
83 #endif /* JEMALLOC_H_EXTERNS */
84 /******************************************************************************/
85 #ifdef JEMALLOC_H_INLINES
86 
87 #endif /* JEMALLOC_H_INLINES */
88 /******************************************************************************/
#define ckh_delete
Definition: private_namespace.h:130
#define hash
Definition: private_namespace.h:186
#define ckh_iter
Definition: private_namespace.h:134
#define ckh_insert
Definition: private_namespace.h:132
#define ckh_pointer_hash
Definition: private_namespace.h:136
#define ckh_string_hash
Definition: private_namespace.h:141
unsigned int uint32_t
Definition: stdint.h:80
#define ckh_pointer_keycomp
Definition: private_namespace.h:137
unsigned __int64 uint64_t
Definition: stdint.h:90
union Prng_state prng_state
#define ckh_remove
Definition: private_namespace.h:139
#define ckh_count
Definition: private_namespace.h:129
#define ckh_new
Definition: private_namespace.h:135
#define ckh_search
Definition: private_namespace.h:140
#define ckh_string_keycomp
Definition: private_namespace.h:142