FD.io VPP  v18.01-8-g0eacf49
Vector Packet Processing
hash.h File Reference
+ Include dependency graph for hash.h:

Go to the source code of this file.

Data Structures

struct  hash_header
 
struct  hash_pair_t
 
struct  hash_pair_indirect_t
 
union  hash_pair_union_t
 
struct  hash_next_t
 

Macros

#define HASH_FLAG_NO_AUTO_GROW   (1 << 0)
 
#define HASH_FLAG_NO_AUTO_SHRINK   (1 << 1)
 
#define HASH_FLAG_HASH_NEXT_IN_PROGRESS   (1 << 2)
 
#define KEY_FUNC_NONE   (0) /*< sum = key */
 
#define KEY_FUNC_POINTER_UWORD   (1) /*< sum = *(uword *) key */
 
#define KEY_FUNC_POINTER_U32   (2) /*< sum = *(u32 *) key */
 
#define KEY_FUNC_STRING   (3) /*< sum = string_key_sum, etc. */
 
#define LOG2_ALLOC_BITS   (5)
 
#define PAIR_BITS   (BITS (uword) - LOG2_ALLOC_BITS)
 
#define hash_set3(h, key, value, old_value)
 
#define hash_get(h, key)   _hash_get ((h), (uword) (key))
 
#define hash_get_pair(h, key)   _hash_get_pair ((h), (uword) (key))
 
#define hash_set(h, key, value)   hash_set3(h,key,value,0)
 
#define hash_set1(h, key)   (h) = _hash_set3(h,(uword) (key),0,0)
 
#define hash_unset(h, key)   ((h) = _hash_unset ((h), (uword) (key),0))
 
#define hash_unset3(h, key, old_value)   ((h) = _hash_unset ((h), (uword) (key), (void *) (old_value)))
 
#define hash_get_mem(h, key)   _hash_get ((h), pointer_to_uword (key))
 
#define hash_get_pair_mem(h, key)   _hash_get_pair ((h), pointer_to_uword (key))
 
#define hash_set_mem(h, key, value)   hash_set3 (h, pointer_to_uword (key), (value), 0)
 
#define hash_set1_mem(h, key)   hash_set3 ((h), pointer_to_uword (key), 0, 0)
 
#define hash_unset_mem(h, key)   ((h) = _hash_unset ((h), pointer_to_uword (key),0))
 
#define hash_free(h)   (h) = _hash_free ((h))
 
#define hash_foreach_pair(p, v, body)
 Iterate over hash pairs. More...
 
#define hash_foreach(key_var, value_var, h, body)
 
#define hash_foreach_mem(key_var, value_var, h, body)
 
#define hash_create2(_elts, _user, _value_bytes, _key_sum, _key_equal, _format_pair, _format_pair_arg)
 
#define hash_mix_step(a, b, c, s0, s1, s2)
 
#define hash_mix32_step_1(a, b, c)   hash_mix_step(a,b,c,13,8,13)
 
#define hash_mix32_step_2(a, b, c)   hash_mix_step(a,b,c,12,16,5)
 
#define hash_mix32_step_3(a, b, c)   hash_mix_step(a,b,c,3,10,15)
 
#define hash_mix64_step_1(a, b, c)   hash_mix_step(a,b,c,43,9,8)
 
#define hash_mix64_step_2(a, b, c)   hash_mix_step(a,b,c,38,23,5)
 
#define hash_mix64_step_3(a, b, c)   hash_mix_step(a,b,c,35,49,11)
 
#define hash_mix64_step_4(a, b, c)   hash_mix_step(a,b,c,12,18,22)
 
#define hash_mix64(a0, b0, c0)
 
#define hash_mix32(a0, b0, c0)
 
#define hash_v3_mix32(a, b, c)
 
#define hash_v3_finalize32(a, b, c)
 
#define hash_v3_mix32_step1(a, b, c)
 
#define hash_v3_mix32_step2(a, b, c)
 
#define hash_v3_mix32_step3(a, b, c)
 
#define hash_v3_finalize32_step1(a, b, c)
 
#define hash_v3_finalize32_step2(a, b, c)
 
#define hash_v3_finalize32_step3(a, b, c)
 
#define hash_v3_mix_step_1_u32x(a, b, c)
 
#define hash_v3_mix_step_2_u32x(a, b, c)
 
#define hash_v3_finalize_step_1_u32x(a, b, c)
 
#define hash_v3_finalize_step_2_u32x(a, b, c)
 
#define hash_v3_mix_u32x(a, b, c)
 
#define hash_v3_finalize_u32x(a, b, c)
 
#define hash_create_mem(elts, key_bytes, value_bytes)   hash_create2((elts),(key_bytes),(value_bytes),mem_key_sum,mem_key_equal,0,0)
 
#define hash_create_vec(elts, key_bytes, value_bytes)
 
#define hash_create_string(elts, value_bytes)
 
#define hash_create(elts, value_bytes)
 
#define hash_create_uword(elts, value_bytes)
 
#define hash_create_u32(elts, value_bytes)
 

Typedefs

typedef uwordhash_key_sum_function_t) (struct hash_header *, uword key)
 
typedef uwordhash_key_equal_function_t) (struct hash_header *, uword key1, uword key2)
 
typedef struct hash_header hash_t
 

Functions

static uword hash_header_bytes (void *v)
 
static hash_thash_header (void *v)
 
static uword hash_elts (void *v)
 
static uword hash_capacity (void *v)
 
static uword hash_is_user (void *v, uword i)
 
static void hash_set_pair_format (void *v, format_function_t *format_pair, void *format_pair_arg)
 
static void hash_set_flags (void *v, uword flags)
 
static uword indirect_pair_get_log2_bytes (hash_pair_indirect_t *p)
 
static uword indirect_pair_get_len (hash_pair_indirect_t *p)
 
static void indirect_pair_set (hash_pair_indirect_t *p, uword log2_alloc, uword len)
 
void * hash_resize (void *old, uword new_size)
 
void * hash_dup (void *old)
 
uword hash_bytes (void *v)
 
static void hash_set_mem_alloc (uword **h, void *key, uword v)
 
static void hash_unset_mem_free (uword **h, void *key)
 
clib_error_thash_validate (void *v)
 
static uword hash_value_bytes (hash_t *h)
 
static uword hash_pair_log2_bytes (hash_t *h)
 
static uword hash_pair_bytes (hash_t *h)
 
static void * hash_forward1 (hash_t *h, void *v)
 
static void * hash_forward (hash_t *h, void *v, uword n)
 
hash_pair_thash_next (void *v, hash_next_t *hn)
 
static void hash_set_value_bytes (hash_t *h, uword value_bytes)
 
static uword hash32_rotate_left (u32 x, u32 i)
 
uword hash_memory (void *p, word n_bytes, uword state)
 
uword mem_key_sum (hash_t *h, uword key)
 
uword mem_key_equal (hash_t *h, uword key1, uword key2)
 
uword vec_key_sum (hash_t *h, uword key)
 
uword vec_key_equal (hash_t *h, uword key1, uword key2)
 
u8vec_key_format_pair (u8 *s, va_list *args)
 
uword string_key_sum (hash_t *h, uword key)
 
uword string_key_equal (hash_t *h, uword key1, uword key2)
 
u8string_key_format_pair (u8 *s, va_list *args)
 
u8format_hash (u8 *s, va_list *va)
 
int test_hash_main (unformat_input_t *input)
 

Variables

unformat_function_t unformat_hash_vec_string
 
unformat_function_t unformat_hash_string
 

Macro Definition Documentation

#define hash_create (   elts,
  value_bytes 
)
Value:
hash_create2((elts),0,(value_bytes), \
0,0)
#define KEY_FUNC_NONE
Definition: hash.h:76
uword( hash_key_equal_function_t)(struct hash_header *, uword key1, uword key2)
Definition: hash.h:50
#define hash_create2(_elts, _user, _value_bytes,_key_sum, _key_equal,_format_pair, _format_pair_arg)
Definition: hash.h:493
uword( hash_key_sum_function_t)(struct hash_header *, uword key)
Definition: hash.h:48

Definition at line 681 of file hash.h.

#define hash_create2 (   _elts,
  _user,
  _value_bytes,
  _key_sum,
  _key_equal,
  _format_pair,
  _format_pair_arg 
)
Value:
({ \
hash_t _h; \
memset (&_h, 0, sizeof (_h)); \
_h.user = (_user); \
_h.key_sum = (hash_key_sum_function_t *) (_key_sum); \
_h.key_equal = (_key_equal); \
hash_set_value_bytes (&_h, (_value_bytes)); \
_h.format_pair = (format_function_t *) (_format_pair); \
_h.format_pair_arg = (_format_pair_arg); \
_hash_create ((_elts), &_h); \
})
static void hash_set_value_bytes(hash_t *h, uword value_bytes)
Definition: hash.h:485
u8 *( format_function_t)(u8 *s, va_list *args)
Definition: format.h:48
uword( hash_key_sum_function_t)(struct hash_header *, uword key)
Definition: hash.h:48
struct hash_header hash_t

Definition at line 493 of file hash.h.

#define hash_create_mem (   elts,
  key_bytes,
  value_bytes 
)    hash_create2((elts),(key_bytes),(value_bytes),mem_key_sum,mem_key_equal,0,0)

Definition at line 660 of file hash.h.

#define hash_create_string (   elts,
  value_bytes 
)
Value:
hash_create2((elts),0,(value_bytes), \
0, 0)
#define KEY_FUNC_STRING
Definition: hash.h:79
uword( hash_key_equal_function_t)(struct hash_header *, uword key1, uword key2)
Definition: hash.h:50
#define hash_create2(_elts, _user, _value_bytes,_key_sum, _key_equal,_format_pair, _format_pair_arg)
Definition: hash.h:493
uword( hash_key_sum_function_t)(struct hash_header *, uword key)
Definition: hash.h:48

Definition at line 675 of file hash.h.

#define hash_create_u32 (   elts,
  value_bytes 
)
Value:
hash_create2((elts),0,(value_bytes), \
0,0)
uword( hash_key_equal_function_t)(struct hash_header *, uword key1, uword key2)
Definition: hash.h:50
#define KEY_FUNC_POINTER_U32
Definition: hash.h:78
#define hash_create2(_elts, _user, _value_bytes,_key_sum, _key_equal,_format_pair, _format_pair_arg)
Definition: hash.h:493
uword( hash_key_sum_function_t)(struct hash_header *, uword key)
Definition: hash.h:48

Definition at line 693 of file hash.h.

#define hash_create_uword (   elts,
  value_bytes 
)
Value:
hash_create2((elts),0,(value_bytes), \
0,0)
#define KEY_FUNC_POINTER_UWORD
Definition: hash.h:77
uword( hash_key_equal_function_t)(struct hash_header *, uword key1, uword key2)
Definition: hash.h:50
#define hash_create2(_elts, _user, _value_bytes,_key_sum, _key_equal,_format_pair, _format_pair_arg)
Definition: hash.h:493
uword( hash_key_sum_function_t)(struct hash_header *, uword key)
Definition: hash.h:48

Definition at line 687 of file hash.h.

#define hash_create_vec (   elts,
  key_bytes,
  value_bytes 
)
Value:
hash_create2((elts),(key_bytes),(value_bytes),\
uword vec_key_equal(hash_t *h, uword key1, uword key2)
Definition: hash.c:809
#define hash_create2(_elts, _user, _value_bytes,_key_sum, _key_equal,_format_pair, _format_pair_arg)
Definition: hash.h:493
u8 * vec_key_format_pair(u8 *s, va_list *args)
Definition: hash.c:819
uword vec_key_sum(hash_t *h, uword key)
Definition: hash.c:802

Definition at line 667 of file hash.h.

#define HASH_FLAG_HASH_NEXT_IN_PROGRESS   (1 << 2)

Definition at line 66 of file hash.h.

#define HASH_FLAG_NO_AUTO_GROW   (1 << 0)

Definition at line 62 of file hash.h.

#define HASH_FLAG_NO_AUTO_SHRINK   (1 << 1)

Definition at line 64 of file hash.h.

#define hash_foreach (   key_var,
  value_var,
  h,
  body 
)
Value:
do { \
hash_pair_t * _r; \
hash_foreach_pair (_r, (h), { \
(key_var) = (__typeof__ (key_var)) _r->key; \
(value_var) = (__typeof__ (value_var)) _r->value[0]; \
do { body; } while (0); \
}); \
} while (0)
vec_header_t h
Definition: buffer.c:282
#define hash_foreach_pair(p, v, body)
Iterate over hash pairs.
Definition: hash.h:372

Definition at line 441 of file hash.h.

#define hash_foreach_mem (   key_var,
  value_var,
  h,
  body 
)
Value:
do { \
hash_pair_t * _r; \
hash_foreach_pair (_r, (h), { \
(key_var) = (__typeof__ (key_var)) uword_to_pointer (_r->key, void *); \
(value_var) = (__typeof__ (value_var)) _r->value[0]; \
do { body; } while (0); \
}); \
} while (0)
#define uword_to_pointer(u, type)
Definition: types.h:136
vec_header_t h
Definition: buffer.c:282
#define hash_foreach_pair(p, v, body)
Iterate over hash pairs.
Definition: hash.h:372

Definition at line 460 of file hash.h.

#define hash_foreach_pair (   p,
  v,
  body 
)

Iterate over hash pairs.

Parameters
pThe current (key,value) pair. This should be of type (hash_pair_t *).
vThe hash table to iterate.
bodyThe operation to perform on each (key,value) pair.

Executes the expression or code block body with each active hash pair.

Definition at line 372 of file hash.h.

#define hash_free (   h)    (h) = _hash_free ((h))

Definition at line 309 of file hash.h.

#define hash_get (   h,
  key 
)    _hash_get ((h), (uword) (key))

Definition at line 248 of file hash.h.

#define hash_get_mem (   h,
  key 
)    _hash_get ((h), pointer_to_uword (key))

Definition at line 268 of file hash.h.

#define hash_get_pair (   h,
  key 
)    _hash_get_pair ((h), (uword) (key))

Definition at line 251 of file hash.h.

#define hash_get_pair_mem (   h,
  key 
)    _hash_get_pair ((h), pointer_to_uword (key))

Definition at line 271 of file hash.h.

#define hash_mix32 (   a0,
  b0,
  c0 
)
Value:
do { \
hash_mix32_step_1 (a0, b0, c0); \
hash_mix32_step_2 (a0, b0, c0); \
hash_mix32_step_3 (a0, b0, c0); \
} while (0) \
#define hash_mix32_step_1(a, b, c)
Definition: hash.h:519
#define hash_mix32_step_2(a, b, c)
Definition: hash.h:520
#define hash_mix32_step_3(a, b, c)
Definition: hash.h:521

Definition at line 538 of file hash.h.

#define hash_mix32_step_1 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,13,8,13)

Definition at line 519 of file hash.h.

#define hash_mix32_step_2 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,12,16,5)

Definition at line 520 of file hash.h.

#define hash_mix32_step_3 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,3,10,15)

Definition at line 521 of file hash.h.

#define hash_mix64 (   a0,
  b0,
  c0 
)
Value:
do { \
hash_mix64_step_1 (a0, b0, c0); \
hash_mix64_step_2 (a0, b0, c0); \
hash_mix64_step_3 (a0, b0, c0); \
hash_mix64_step_4 (a0, b0, c0); \
} while (0) \
#define hash_mix64_step_1(a, b, c)
Definition: hash.h:523
#define hash_mix64_step_2(a, b, c)
Definition: hash.h:524
#define hash_mix64_step_4(a, b, c)
Definition: hash.h:526
#define hash_mix64_step_3(a, b, c)
Definition: hash.h:525

Definition at line 530 of file hash.h.

#define hash_mix64_step_1 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,43,9,8)

Definition at line 523 of file hash.h.

#define hash_mix64_step_2 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,38,23,5)

Definition at line 524 of file hash.h.

#define hash_mix64_step_3 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,35,49,11)

Definition at line 525 of file hash.h.

#define hash_mix64_step_4 (   a,
  b,
  c 
)    hash_mix_step(a,b,c,12,18,22)

Definition at line 526 of file hash.h.

#define hash_mix_step (   a,
  b,
  c,
  s0,
  s1,
  s2 
)
Value:
do { \
(a) -= (b) + (c); (a) ^= (c) >> (s0); \
(b) -= (c) + (a); (b) ^= (a) << (s1); \
(c) -= (a) + (b); (c) ^= (b) >> (s2); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c

Definition at line 512 of file hash.h.

#define hash_set (   h,
  key,
  value 
)    hash_set3(h,key,value,0)

Definition at line 254 of file hash.h.

#define hash_set1 (   h,
  key 
)    (h) = _hash_set3(h,(uword) (key),0,0)

Definition at line 257 of file hash.h.

#define hash_set1_mem (   h,
  key 
)    hash_set3 ((h), pointer_to_uword (key), 0, 0)

Definition at line 287 of file hash.h.

#define hash_set3 (   h,
  key,
  value,
  old_value 
)
Value:
({ \
uword _v = (uword) (value); \
(h) = _hash_set3 ((h), (uword) (key), (void *) &_v, (old_value)); \
})
vec_header_t h
Definition: buffer.c:282
u64 uword
Definition: types.h:112

Definition at line 241 of file hash.h.

#define hash_set_mem (   h,
  key,
  value 
)    hash_set3 (h, pointer_to_uword (key), (value), 0)

Definition at line 274 of file hash.h.

#define hash_unset (   h,
  key 
)    ((h) = _hash_unset ((h), (uword) (key),0))

Definition at line 260 of file hash.h.

#define hash_unset3 (   h,
  key,
  old_value 
)    ((h) = _hash_unset ((h), (uword) (key), (void *) (old_value)))

Definition at line 263 of file hash.h.

#define hash_unset_mem (   h,
  key 
)    ((h) = _hash_unset ((h), pointer_to_uword (key),0))

Definition at line 290 of file hash.h.

#define hash_v3_finalize32 (   a,
  b,
  c 
)
Value:
do { \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 14); \
(a) ^= (c); (a) -= hash32_rotate_left ((c), 11); \
(b) ^= (a); (b) -= hash32_rotate_left ((a), 25); \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 16); \
(a) ^= (c); (a) -= hash32_rotate_left ((c), 4); \
(b) ^= (a); (b) -= hash32_rotate_left ((a), 14); \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 24); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 563 of file hash.h.

#define hash_v3_finalize32_step1 (   a,
  b,
  c 
)
Value:
do { \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 14); \
(a) ^= (c); (a) -= hash32_rotate_left ((c), 11); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 594 of file hash.h.

#define hash_v3_finalize32_step2 (   a,
  b,
  c 
)
Value:
do { \
(b) ^= (a); (b) -= hash32_rotate_left ((a), 25); \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 16); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 600 of file hash.h.

#define hash_v3_finalize32_step3 (   a,
  b,
  c 
)
Value:
do { \
(a) ^= (c); (a) -= hash32_rotate_left ((c), 4); \
(b) ^= (a); (b) -= hash32_rotate_left ((a), 14); \
(c) ^= (b); (c) -= hash32_rotate_left ((b), 24); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 606 of file hash.h.

#define hash_v3_finalize_step_1_u32x (   a,
  b,
  c 
)
Value:
do { \
(c) ^= (b); (c) -= u32x_irotate_left ((b), 14); \
(a) ^= (c); (a) -= u32x_irotate_left ((c), 11); \
(b) ^= (a); (b) -= u32x_irotate_left ((a), 25); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c

Definition at line 628 of file hash.h.

#define hash_v3_finalize_step_2_u32x (   a,
  b,
  c 
)
Value:
do { \
(c) ^= (b); (c) -= u32x_irotate_left ((b), 16); \
(a) ^= (c); (a) -= u32x_irotate_left ((c), 4); \
(b) ^= (a); (b) -= u32x_irotate_left ((a), 14); \
(c) ^= (b); (c) -= u32x_irotate_left ((b), 24); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c

Definition at line 635 of file hash.h.

#define hash_v3_finalize_u32x (   a,
  b,
  c 
)
Value:
do { \
} while (0)
a
Definition: bitmap.h:516
#define hash_v3_finalize_step_1_u32x(a, b, c)
Definition: hash.h:628
#define hash_v3_finalize_step_2_u32x(a, b, c)
Definition: hash.h:635
svmdb_client_t * c

Definition at line 649 of file hash.h.

#define hash_v3_mix32 (   a,
  b,
  c 
)
Value:
do { \
(a) -= (c); (a) ^= hash32_rotate_left ((c), 4); (c) += (b); \
(b) -= (a); (b) ^= hash32_rotate_left ((a), 6); (a) += (c); \
(c) -= (b); (c) ^= hash32_rotate_left ((b), 8); (b) += (a); \
(a) -= (c); (a) ^= hash32_rotate_left ((c),16); (c) += (b); \
(b) -= (a); (b) ^= hash32_rotate_left ((a),19); (a) += (c); \
(c) -= (b); (c) ^= hash32_rotate_left ((b), 4); (b) += (a); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 553 of file hash.h.

#define hash_v3_mix32_step1 (   a,
  b,
  c 
)
Value:
do { \
(a) -= (c); (a) ^= hash32_rotate_left ((c), 4); (c) += (b); \
(b) -= (a); (b) ^= hash32_rotate_left ((a), 6); (a) += (c); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 576 of file hash.h.

#define hash_v3_mix32_step2 (   a,
  b,
  c 
)
Value:
do { \
(c) -= (b); (c) ^= hash32_rotate_left ((b), 8); (b) += (a); \
(a) -= (c); (a) ^= hash32_rotate_left ((c),16); (c) += (b); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 582 of file hash.h.

#define hash_v3_mix32_step3 (   a,
  b,
  c 
)
Value:
do { \
(b) -= (a); (b) ^= hash32_rotate_left ((a),19); (a) += (c); \
(c) -= (b); (c) ^= hash32_rotate_left ((b), 4); (b) += (a); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c
static uword hash32_rotate_left(u32 x, u32 i)
Definition: hash.h:548

Definition at line 588 of file hash.h.

#define hash_v3_mix_step_1_u32x (   a,
  b,
  c 
)
Value:
do { \
(a) -= (c); (a) ^= u32x_irotate_left ((c), 4); (c) += (b); \
(b) -= (a); (b) ^= u32x_irotate_left ((a), 6); (a) += (c); \
(c) -= (b); (c) ^= u32x_irotate_left ((b), 8); (b) += (a); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c

Definition at line 614 of file hash.h.

#define hash_v3_mix_step_2_u32x (   a,
  b,
  c 
)
Value:
do { \
(a) -= (c); (a) ^= u32x_irotate_left ((c),16); (c) += (b); \
(b) -= (a); (b) ^= u32x_irotate_left ((a),19); (a) += (c); \
(c) -= (b); (c) ^= u32x_irotate_left ((b), 4); (b) += (a); \
} while (0)
a
Definition: bitmap.h:516
svmdb_client_t * c

Definition at line 621 of file hash.h.

#define hash_v3_mix_u32x (   a,
  b,
  c 
)
Value:
do { \
} while (0)
a
Definition: bitmap.h:516
#define hash_v3_mix_step_2_u32x(a, b, c)
Definition: hash.h:621
#define hash_v3_mix_step_1_u32x(a, b, c)
Definition: hash.h:614
svmdb_client_t * c

Definition at line 643 of file hash.h.

#define KEY_FUNC_NONE   (0) /*< sum = key */

Definition at line 76 of file hash.h.

#define KEY_FUNC_POINTER_U32   (2) /*< sum = *(u32 *) key */

Definition at line 78 of file hash.h.

#define KEY_FUNC_POINTER_UWORD   (1) /*< sum = *(uword *) key */

Definition at line 77 of file hash.h.

#define KEY_FUNC_STRING   (3) /*< sum = string_key_sum, etc. */

Definition at line 79 of file hash.h.

#define LOG2_ALLOC_BITS   (5)

Definition at line 190 of file hash.h.

#define PAIR_BITS   (BITS (uword) - LOG2_ALLOC_BITS)

Definition at line 191 of file hash.h.

Typedef Documentation

typedef uword( hash_key_equal_function_t) (struct hash_header *, uword key1, uword key2)

Definition at line 50 of file hash.h.

typedef uword( hash_key_sum_function_t) (struct hash_header *, uword key)

Definition at line 48 of file hash.h.

typedef struct hash_header hash_t

Function Documentation

u8* format_hash ( u8 s,
va_list *  va 
)

Definition at line 960 of file hash.c.

+ Here is the call graph for this function:

static uword hash32_rotate_left ( u32  x,
u32  i 
)
inlinestatic

Definition at line 548 of file hash.h.

uword hash_bytes ( void *  v)

Definition at line 935 of file hash.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword hash_capacity ( void *  v)
inlinestatic

Definition at line 125 of file hash.h.

+ Here is the caller graph for this function:

void* hash_dup ( void *  old)

Definition at line 775 of file hash.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword hash_elts ( void *  v)
inlinestatic

Definition at line 117 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void* hash_forward ( hash_t h,
void *  v,
uword  n 
)
inlinestatic

Definition at line 350 of file hash.h.

+ Here is the caller graph for this function:

static void* hash_forward1 ( hash_t h,
void *  v 
)
inlinestatic

Definition at line 343 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static hash_t* hash_header ( void *  v)
inlinestatic

Definition at line 110 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword hash_header_bytes ( void *  v)
inlinestatic

Definition at line 100 of file hash.h.

+ Here is the caller graph for this function:

static uword hash_is_user ( void *  v,
uword  i 
)
inlinestatic

Definition at line 132 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword hash_memory ( void *  p,
word  n_bytes,
uword  state 
)

Definition at line 224 of file hash.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

hash_pair_t* hash_next ( void *  v,
hash_next_t hn 
)

Definition at line 598 of file hash.c.

+ Here is the call graph for this function:

static uword hash_pair_bytes ( hash_t h)
inlinestatic

Definition at line 336 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword hash_pair_log2_bytes ( hash_t h)
inlinestatic

Definition at line 323 of file hash.h.

+ Here is the caller graph for this function:

void* hash_resize ( void *  old,
uword  new_size 
)

Definition at line 769 of file hash.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void hash_set_flags ( void *  v,
uword  flags 
)
inlinestatic

Definition at line 152 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void hash_set_mem_alloc ( uword **  h,
void *  key,
uword  v 
)
inlinestatic

Definition at line 278 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void hash_set_pair_format ( void *  v,
format_function_t format_pair,
void *  format_pair_arg 
)
inlinestatic

Definition at line 142 of file hash.h.

+ Here is the call graph for this function:

static void hash_set_value_bytes ( hash_t h,
uword  value_bytes 
)
inlinestatic

Definition at line 485 of file hash.h.

+ Here is the call graph for this function:

static void hash_unset_mem_free ( uword **  h,
void *  key 
)
inlinestatic

Definition at line 294 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* hash_validate ( void *  v)

Definition at line 1055 of file hash.c.

+ Here is the call graph for this function:

static uword hash_value_bytes ( hash_t h)
inlinestatic

Definition at line 315 of file hash.h.

+ Here is the caller graph for this function:

static uword indirect_pair_get_len ( hash_pair_indirect_t p)
inlinestatic

Definition at line 202 of file hash.h.

+ Here is the caller graph for this function:

static uword indirect_pair_get_log2_bytes ( hash_pair_indirect_t p)
inlinestatic

Definition at line 195 of file hash.h.

+ Here is the caller graph for this function:

static void indirect_pair_set ( hash_pair_indirect_t p,
uword  log2_alloc,
uword  len 
)
inlinestatic

Definition at line 212 of file hash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword mem_key_equal ( hash_t h,
uword  key1,
uword  key2 
)

Definition at line 877 of file hash.c.

uword mem_key_sum ( hash_t h,
uword  key 
)

Definition at line 870 of file hash.c.

+ Here is the call graph for this function:

uword string_key_equal ( hash_t h,
uword  key1,
uword  key2 
)

Definition at line 892 of file hash.c.

+ Here is the caller graph for this function:

u8* string_key_format_pair ( u8 s,
va_list *  args 
)

Definition at line 900 of file hash.c.

+ Here is the call graph for this function:

uword string_key_sum ( hash_t h,
uword  key 
)

Definition at line 885 of file hash.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int test_hash_main ( unformat_input_t input)
uword vec_key_equal ( hash_t h,
uword  key1,
uword  key2 
)

Definition at line 809 of file hash.c.

u8* vec_key_format_pair ( u8 s,
va_list *  args 
)

Definition at line 819 of file hash.c.

+ Here is the call graph for this function:

uword vec_key_sum ( hash_t h,
uword  key 
)

Definition at line 802 of file hash.c.

+ Here is the call graph for this function:

Variable Documentation

unformat_function_t unformat_hash_string

Definition at line 704 of file hash.h.

unformat_function_t unformat_hash_vec_string

Definition at line 703 of file hash.h.