assert element in/not-in list
authorChristian Grothoff <christian@grothoff.org>
Mon, 24 Jan 2011 20:53:23 +0000 (20:53 +0000)
committerChristian Grothoff <christian@grothoff.org>
Mon, 24 Jan 2011 20:53:23 +0000 (20:53 +0000)
src/include/gnunet_container_lib.h

index 85b17c7ddb7143a1db522ab1d30d09866b638773..c5f46b41904302eaaab543ebc13bcaf84d873f92 100644 (file)
@@ -616,6 +616,23 @@ int GNUNET_CONTAINER_multihashmap_contains (const struct
                                             const GNUNET_HashCode * key);
 
 
+/**
+ * Check if the map contains the given value under the given
+ * key.
+ *
+ * @param map the map
+ * @param key the key to test if a value exists for it
+ * @param value value to test for
+ * @return GNUNET_YES if such a value exists,
+ *         GNUNET_NO if not
+ */
+int GNUNET_CONTAINER_multihashmap_contains_value (const struct
+                                                 GNUNET_CONTAINER_MultiHashMap
+                                                 *map,
+                                                 const GNUNET_HashCode * key,
+                                                 const void *value);
+
+
 /**
  * Store a key-value pair in the map.
  *
@@ -690,6 +707,8 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
  * @param element element to insert
  */
 #define GNUNET_CONTAINER_DLL_insert(head,tail,element) do { \
+  GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \
+  GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \
   (element)->next = (head); \
   (element)->prev = NULL; \
   if ((tail) == NULL) \
@@ -698,6 +717,7 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
     (head)->prev = element; \
   (head) = (element); } while (0)
 
+
 /**
  * Insert an element at the tail of a DLL. Assumes that head, tail and
  * element are structs with prev and next fields.
@@ -707,6 +727,8 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
  * @param element element to insert
  */
 #define GNUNET_CONTAINER_DLL_insert_tail(head,tail,element) do { \
+  GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \
+  GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \
   (element)->prev = (tail); \
   (element)->next = NULL; \
   if ((head) == NULL) \
@@ -715,6 +737,7 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
     (tail)->next = element; \
   (tail) = (element); } while (0)
 
+
 /**
  * Insert an element into a DLL after the given other element.  Insert
  * at the head if the other element is NULL.
@@ -725,6 +748,8 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
  * @param element element to insert
  */
 #define GNUNET_CONTAINER_DLL_insert_after(head,tail,other,element) do { \
+  GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \
+  GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \
   (element)->prev = (other); \
   if (NULL == other) \
     { \
@@ -741,6 +766,7 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
   else \
     (element)->next->prev = (element); } while (0)
 
+
 /**
  * Insert an element into a DLL before the given other element.  Insert
  * at the tail if the other element is NULL.
@@ -751,6 +777,8 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
  * @param element element to insert
  */
 #define GNUNET_CONTAINER_DLL_insert_before(head,tail,other,element) do { \
+  GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \
+  GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \
   (element)->next = (other); \
   if (NULL == other) \
     { \
@@ -778,6 +806,8 @@ int GNUNET_CONTAINER_multihashmap_get_multiple (const struct
  * @param element element to remove
  */
 #define GNUNET_CONTAINER_DLL_remove(head,tail,element) do { \
+  GNUNET_assert ( ( (element)->prev != NULL) || ((head) == (element))); \
+  GNUNET_assert ( ( (element)->next != NULL) || ((tail) == (element))); \
   if ((element)->prev == NULL) \
     (head) = (element)->next;  \
   else \