aboutsummaryrefslogtreecommitdiffstats
path: root/vppinfra/vppinfra/mhash.h
diff options
context:
space:
mode:
Diffstat (limited to 'vppinfra/vppinfra/mhash.h')
-rw-r--r--vppinfra/vppinfra/mhash.h66
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:
+ */