vppinfra: bihash add-but-do-not-overwrite semantics 48/20548/2
authorDave Barach <dave@barachs.net>
Mon, 8 Jul 2019 18:47:44 +0000 (14:47 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Thu, 11 Jul 2019 18:04:20 +0000 (18:04 +0000)
If is_add=2, fail w/ return value -2 if the key exists instead of
overwriting the (key,value) pair.

Type: feature

Change-Id: I00a3c194a381c68090369c31d6c6f9870cfe0a62
Signed-off-by: Dave Barach <dave@barachs.net>
src/vppinfra/bihash_template.c

index bf6be83..cd75a7a 100644 (file)
@@ -519,6 +519,13 @@ static inline int BV (clib_bihash_add_del_inline)
        {
          if (BV (clib_bihash_key_compare) (v->kvp[i].key, add_v->key))
            {
+             /* Add but do not overwrite? */
+             if (is_add == 2)
+               {
+                 BV (clib_bihash_unlock_bucket) (b);
+                 return (-2);
+               }
+
              CLIB_MEMORY_BARRIER ();   /* Add a delay */
              clib_memcpy_fast (&(v->kvp[i]), add_v, sizeof (*add_v));
              BV (clib_bihash_unlock_bucket) (b);