vxlan: Add utility functions to the simap data structure.
authorKyle Mestery <kmestery@cisco.com>
Thu, 14 Feb 2013 14:37:27 +0000 (09:37 -0500)
committerBen Pfaff <blp@nicira.com>
Thu, 14 Feb 2013 17:35:39 +0000 (09:35 -0800)
Add utility functions to the simap structure. These are
used by future patches in this seris. The functions added are.

Signed-off-by: Kyle Mestery <kmestery@cisco.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/simap.c
lib/simap.h

index cc8ddb8..9c30f68 100644 (file)
@@ -147,6 +147,19 @@ simap_delete(struct simap *simap, struct simap_node *node)
     free(node);
 }
 
+/* Searches for 'name' in 'simap'.  If found, deletes it and returns true.  If
+ * not found, returns false without modifying 'simap'. */
+bool
+simap_find_and_delete(struct simap *simap, const char *name)
+{
+    struct simap_node *node = simap_find(simap, name);
+    if (node) {
+        simap_delete(simap, node);
+        return true;
+    }
+    return false;
+}
+
 /* Searches 'simap' for a mapping with the given 'name'.  Returns it, if found,
  * or a null pointer if not. */
 struct simap_node *
@@ -172,6 +185,13 @@ simap_get(const struct simap *simap, const char *name)
     return node ? node->data : 0;
 }
 
+/* Returns true if 'simap' contains a copy of 'name', false otherwise. */
+bool
+simap_contains(const struct simap *simap, const char *name)
+{
+    return simap_find(simap, name) != NULL;
+}
+
 /* Returns an array that contains a pointer to each mapping in 'simap',
  * ordered alphabetically by name.  The returned array has simap_count(simap)
  * elements.
index e7bf80b..3e247fc 100644 (file)
@@ -58,8 +58,10 @@ unsigned int simap_get(const struct simap *, const char *);
 struct simap_node *simap_find(const struct simap *, const char *);
 struct simap_node *simap_find_len(const struct simap *,
                                   const char *, size_t len);
+bool simap_contains(const struct simap *, const char *);
 
 void simap_delete(struct simap *, struct simap_node *);
+bool simap_find_and_delete(struct simap *, const char *);
 
 const struct simap_node **simap_sort(const struct simap *);