diff options
Diffstat (limited to 'vppinfra/vppinfra/mhash.h')
-rw-r--r-- | vppinfra/vppinfra/mhash.h | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/vppinfra/vppinfra/mhash.h b/vppinfra/vppinfra/mhash.h index 2938a8472d2..8ce8454b0a4 100644 --- a/vppinfra/vppinfra/mhash.h +++ b/vppinfra/vppinfra/mhash.h @@ -43,16 +43,17 @@ #include <vppinfra/heap.h> /* Hash table plus vector of keys. */ -typedef struct { +typedef struct +{ /* Vector or heap used to store keys. Hash table stores keys as byte offsets into this vector. */ - u8 * key_vector_or_heap; + u8 *key_vector_or_heap; /* Byte offsets of free keys in vector (used to store free keys when n_key_bytes > 1). */ - u32 * key_vector_free_indices; + u32 *key_vector_free_indices; - u8 ** key_tmps; + u8 **key_tmps; /* Possibly fixed size of key. 0 means keys are vectors of u8's. @@ -65,73 +66,84 @@ typedef struct { u32 hash_seed; /* Hash table mapping key -> value. */ - uword * hash; + uword *hash; /* Format function for keys. */ - format_function_t * format_key; + format_function_t *format_key; } mhash_t; void mhash_init (mhash_t * h, uword n_value_bytes, uword n_key_bytes); always_inline void mhash_init_c_string (mhash_t * h, uword n_value_bytes) -{ mhash_init (h, n_value_bytes, MHASH_C_STRING_KEY); } +{ + mhash_init (h, n_value_bytes, MHASH_C_STRING_KEY); +} always_inline void mhash_init_vec_string (mhash_t * h, uword n_value_bytes) -{ mhash_init (h, n_value_bytes, MHASH_VEC_STRING_KEY); } +{ + mhash_init (h, n_value_bytes, MHASH_VEC_STRING_KEY); +} always_inline void * mhash_key_to_mem (mhash_t * h, uword key) { if (key == ~0) { - u8 * key_tmp; - - int my_cpu = os_get_cpu_number(); - vec_validate(h->key_tmps, my_cpu); + u8 *key_tmp; + + int my_cpu = os_get_cpu_number (); + vec_validate (h->key_tmps, my_cpu); key_tmp = h->key_tmps[my_cpu]; return key_tmp; } return vec_elt_at_index (h->key_vector_or_heap, key); } -hash_pair_t * mhash_get_pair (mhash_t * h, void * key); -uword mhash_set_mem (mhash_t * h, void * key, uword * new_value, uword * old_value); -uword mhash_unset (mhash_t * h, void * key, uword * old_value); +hash_pair_t *mhash_get_pair (mhash_t * h, void *key); +uword mhash_set_mem (mhash_t * h, void *key, uword * new_value, + uword * old_value); +uword mhash_unset (mhash_t * h, void *key, uword * old_value); always_inline uword * -mhash_get (mhash_t * h, void * key) +mhash_get (mhash_t * h, void *key) { - hash_pair_t * p = mhash_get_pair (h, key); + hash_pair_t *p = mhash_get_pair (h, key); return p ? &p->value[0] : 0; } always_inline uword -mhash_set (mhash_t * h, void * key, uword new_value, uword * old_value) -{ return mhash_set_mem (h, key, &new_value, old_value); } +mhash_set (mhash_t * h, void *key, uword new_value, uword * old_value) +{ + return mhash_set_mem (h, key, &new_value, old_value); +} always_inline uword mhash_unset_key (mhash_t * h, uword key, uword * old_value) { - void * k = mhash_key_to_mem (h, key); + void *k = mhash_key_to_mem (h, key); return mhash_unset (h, k, old_value); } always_inline uword mhash_value_bytes (mhash_t * m) { - hash_t * h = hash_header (m->hash); + hash_t *h = hash_header (m->hash); return hash_value_bytes (h); } always_inline uword mhash_elts (mhash_t * m) -{ return hash_elts (m->hash); } +{ + return hash_elts (m->hash); +} always_inline uword mhash_key_vector_is_heap (mhash_t * h) -{ return h->n_key_bytes <= 1; } +{ + return h->n_key_bytes <= 1; +} always_inline void mhash_free (mhash_t * h) @@ -157,3 +169,11 @@ do { \ format_function_t format_mhash_key; #endif /* included_clib_mhash_h */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |