hmap: Add function to mark an hmap_node as "null" and check for the mark.
authorBen Pfaff <blp@nicira.com>
Tue, 8 Dec 2009 01:02:00 +0000 (17:02 -0800)
committerBen Pfaff <blp@nicira.com>
Tue, 8 Dec 2009 01:07:15 +0000 (17:07 -0800)
This is useful in cases where one might want to know whether an hmap_node
is actually part of an hmap, without using a separate variable to indicate
it.

lib/hmap.h

index 5396c79b60cb2f3cbcea00a7cf37c92aa181934d..c78dddaca95977a87ca7c16c0adb4653d515aff4 100644 (file)
@@ -33,6 +33,24 @@ static inline size_t hmap_node_hash(const struct hmap_node *node)
     return node->hash;
 }
 
+#define HMAP_NODE_NULL ((struct hmap_node *) 1)
+
+/* Returns true if 'node' has been set to null by hmap_node_nullify() and has
+ * not been un-nullified by being inserted into an hmap. */
+static inline bool
+hmap_node_is_null(const struct hmap_node *node)
+{
+    return node->next == HMAP_NODE_NULL;
+}
+
+/* Marks 'node' with a distinctive value that can be tested with
+ * hmap_node_is_null().  */
+static inline void
+hmap_node_nullify(struct hmap_node *node)
+{
+    node->next = HMAP_NODE_NULL;
+}
+
 /* A hash map. */
 struct hmap {
     struct hmap_node **buckets;