vppinfra: refactor uword bitmaps
[vpp.git] / src / vppinfra / hash.c
index 7c1dcd4..76f71d3 100644 (file)
@@ -285,9 +285,7 @@ set_indirect (void *v, hash_pair_indirect_t * pi, uword key,
       new_len = len + 1;
       if (new_len * hash_pair_bytes (h) > (1ULL << log2_bytes))
        {
-         pi->pairs = clib_mem_realloc (pi->pairs,
-                                       1ULL << (log2_bytes + 1),
-                                       1ULL << log2_bytes);
+         pi->pairs = clib_mem_realloc (pi->pairs, 1ULL << (log2_bytes + 1));
          log2_bytes++;
        }
 
@@ -344,7 +342,7 @@ unset_indirect (void *v, uword i, hash_pair_t * q)
       else
        zero_pair (h, q);
       if (is_vec)
-       _vec_len (pi->pairs) -= 1;
+       vec_dec_len (pi->pairs, 1);
       else
        indirect_pair_set (pi, indirect_pair_get_log2_bytes (pi), len - 1);
     }
@@ -550,6 +548,7 @@ _hash_create (uword elts, hash_t * h_user)
   hash_t *h;
   uword log2_pair_size;
   void *v;
+  vec_attr_t va = { .hdr_sz = sizeof (h[0]), .align = sizeof (hash_pair_t) };
 
   /* Size of hash is power of 2 >= ELTS and larger than
      number of bits in is_user bitmap elements. */
@@ -560,13 +559,8 @@ _hash_create (uword elts, hash_t * h_user)
   if (h_user)
     log2_pair_size = h_user->log2_pair_size;
 
-  v = _vec_resize ((void *) 0,
-                  /* vec len: */ elts,
-                  /* data bytes: */
-                  (elts << log2_pair_size) * sizeof (hash_pair_t),
-                  /* header bytes: */
-                  sizeof (h[0]),
-                  /* alignment */ sizeof (hash_pair_t));
+  va.elt_sz = (1 << log2_pair_size) * sizeof (hash_pair_t),
+  v = _vec_alloc_internal (elts, &va);
   h = hash_header (v);
 
   if (h_user)