Home | History | Annotate | Download | only in internal
      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 	uint64_t	prng_state;
     44 
     45 	/* Total number of items. */
     46 	size_t		count;
     47 
     48 	/*
     49 	 * Minimum and current number of hash table buckets.  There are
     50 	 * 2^LG_CKH_BUCKET_CELLS cells per bucket.
     51 	 */
     52 	unsigned	lg_minbuckets;
     53 	unsigned	lg_curbuckets;
     54 
     55 	/* Hash and comparison functions. */
     56 	ckh_hash_t	*hash;
     57 	ckh_keycomp_t	*keycomp;
     58 
     59 	/* Hash table with 2^lg_curbuckets buckets. */
     60 	ckhc_t		*tab;
     61 };
     62 
     63 #endif /* JEMALLOC_H_STRUCTS */
     64 /******************************************************************************/
     65 #ifdef JEMALLOC_H_EXTERNS
     66 
     67 bool	ckh_new(tsd_t *tsd, ckh_t *ckh, size_t minitems, ckh_hash_t *hash,
     68     ckh_keycomp_t *keycomp);
     69 void	ckh_delete(tsd_t *tsd, ckh_t *ckh);
     70 size_t	ckh_count(ckh_t *ckh);
     71 bool	ckh_iter(ckh_t *ckh, size_t *tabind, void **key, void **data);
     72 bool	ckh_insert(tsd_t *tsd, ckh_t *ckh, const void *key, const void *data);
     73 bool	ckh_remove(tsd_t *tsd, ckh_t *ckh, const void *searchkey, void **key,
     74     void **data);
     75 bool	ckh_search(ckh_t *ckh, const void *searchkey, void **key, void **data);
     76 void	ckh_string_hash(const void *key, size_t r_hash[2]);
     77 bool	ckh_string_keycomp(const void *k1, const void *k2);
     78 void	ckh_pointer_hash(const void *key, size_t r_hash[2]);
     79 bool	ckh_pointer_keycomp(const void *k1, const void *k2);
     80 
     81 #endif /* JEMALLOC_H_EXTERNS */
     82 /******************************************************************************/
     83 #ifdef JEMALLOC_H_INLINES
     84 
     85 #endif /* JEMALLOC_H_INLINES */
     86 /******************************************************************************/
     87