gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r28085 - msh/src


From: gnunet
Subject: [GNUnet-SVN] r28085 - msh/src
Date: Tue, 16 Jul 2013 11:55:53 +0200

Author: harsha
Date: 2013-07-16 11:55:53 +0200 (Tue, 16 Jul 2013)
New Revision: 28085

Modified:
   msh/src/addressmap.c
   msh/src/addressmap.h
   msh/src/test_addressmap.c
Log:
iterator for address map info objects present in address map


Modified: msh/src/addressmap.c
===================================================================
--- msh/src/addressmap.c        2013-07-16 09:55:01 UTC (rev 28084)
+++ msh/src/addressmap.c        2013-07-16 09:55:53 UTC (rev 28085)
@@ -354,6 +354,35 @@
 
 
 /**
+ * Function to iterate over all the instace address info objects present in the
+ * given address map
+ *
+ * @param m the address map
+ * @param cb the iterator callback
+ * @param cls the closure to pass to the iterator callback
+ * @return MSH_OK to signify successful completion of the iteration; MSH_SYSERR
+ *           if the iteration was cancelled
+ */
+int
+addressmap_iterate_instance_address_infos (AddressMap *m,
+                                           instance_address_info_iterator_cb 
cb,
+                                           void *cls)
+{
+  struct InstanceAddrInfo *iainfo;
+  unsigned int cnt;
+  
+  for (cnt = 0; cnt < m->size; cnt++)
+  {
+    if (NULL == (iainfo = m->map[cnt]))
+      continue;
+    if (MSH_SYSERR == cb (cls, iainfo))
+      return MSH_SYSERR;
+  }
+  return MSH_OK;
+}
+
+
+/**
  * Function to iterate over address of an instance in a given address map
  *
  * @param m the address map

Modified: msh/src/addressmap.h
===================================================================
--- msh/src/addressmap.h        2013-07-16 09:55:01 UTC (rev 28084)
+++ msh/src/addressmap.h        2013-07-16 09:55:53 UTC (rev 28085)
@@ -153,6 +153,34 @@
 
 
 /**
+ * Callback for iterating all the instance address info objects present in an
+ * address map
+ *
+ * @param cls the closure passed to addressmap_iterate_instance_address_infos()
+ * @param iaddr the instance address info object
+ * @return MSH_OK to continue iteration; MSH_SYSERR to terminate
+ */
+typedef int (*instance_address_info_iterator_cb) (void *cls,
+                                                  struct InstanceAddrInfo 
*iaddr);
+
+
+/**
+ * Function to iterate over all the instace address info objects present in the
+ * given address map
+ *
+ * @param m the address map
+ * @param cb the iterator callback
+ * @param cls the closure to pass to the iterator callback
+ * @return MSH_OK to signify successful completion of the iteration; MSH_SYSERR
+ *           if the iteration was terminated by the callback
+ */
+int
+addressmap_iterate_instance_address_infos (AddressMap *m,
+                                           instance_address_info_iterator_cb 
cb,
+                                           void *cls);
+
+
+/**
  * Function to iterate over address of an instance in a given address map
  *
  * @param m the address map

Modified: msh/src/test_addressmap.c
===================================================================
--- msh/src/test_addressmap.c   2013-07-16 09:55:01 UTC (rev 28084)
+++ msh/src/test_addressmap.c   2013-07-16 09:55:53 UTC (rev 28085)
@@ -49,25 +49,33 @@
 }
 
 
+static int
+instance_address_info_free_iterator (void *cls, struct InstanceAddrInfo 
*iainfo)
+{
+  instance_address_info_destroy (iainfo);
+  return MSH_OK;
+}
+
+
 static void
 test_deserialization ()
 {
   AddressMap *m;
-  struct InstanceAddrInfo *iainfo1;
+  struct InstanceAddrInfo *iainfo;
   struct InstanceAddr *addr;
   struct MSH_MSG_InstanceAdresses **iaddr_msgs;
   
-  iainfo1 = instance_address_info_create (1);
+  iainfo = instance_address_info_create (1);
   addr = instance_address_create_sockaddr_in (0, 12);
-  instance_address_info_add_address (iainfo1, addr);
+  instance_address_info_add_address (iainfo, addr);
   addr = instance_address_create_sockaddr_in (0, 2);
-  instance_address_info_add_address (iainfo1, addr);
+  instance_address_info_add_address (iainfo, addr);
   addr = instance_address_create_sockaddr_in (0, 7);
-  instance_address_info_add_address (iainfo1, addr);
+  instance_address_info_add_address (iainfo, addr);
   addr = instance_address_create_sockaddr_in (0, 14);
-  instance_address_info_add_address (iainfo1, addr);
+  instance_address_info_add_address (iainfo, addr);
   m = addressmap_create (2);
-  addressmap_add (m, iainfo1);
+  addressmap_add (m, iainfo);
   cnt = 0;
   MSH_assert (MSH_OK == 
               addressmap_iterate_instance_addresses (m, 1, &iterator_cb, 
NULL));
@@ -76,24 +84,25 @@
   /* prepare a second addressmap */
   {
     AddressMap *m2;
-    struct InstanceAddrInfo *iainfo1;
-    struct InstanceAddrInfo *iainfo2;
+    struct InstanceAddrInfo *iainfo;
     struct InstanceAddr *addr;
     struct MSH_MSG_AddressMap *map_msg;
-    
-    iainfo1 = instance_address_info_create (1);
+
+    m2 = addressmap_create (2);
+    iainfo = instance_address_info_create (1);
     addr = instance_address_create_sockaddr_in (0, 2);
-    instance_address_info_add_address (iainfo1, addr);
+    instance_address_info_add_address (iainfo, addr);
     addr = instance_address_create_sockaddr_in (0, 7);
-    instance_address_info_add_address (iainfo1, addr);
+    instance_address_info_add_address (iainfo, addr);
     addr = instance_address_create_sockaddr_in (0, 14);
-    instance_address_info_add_address (iainfo1, addr);
-    iainfo2 = instance_address_info_create (0);
+    instance_address_info_add_address (iainfo, addr);
+    addressmap_add (m2, iainfo);
+
+    iainfo = instance_address_info_create (0);
     addr = instance_address_create_sockaddr_in (0, 3);
-    instance_address_info_add_address (iainfo2, addr);
-    m2 = addressmap_create (2);
-    addressmap_add (m2, iainfo1);
-    addressmap_add (m2, iainfo2);
+    instance_address_info_add_address (iainfo, addr);
+    addressmap_add (m2, iainfo);
+
     cnt = 0;
     MSH_assert (MSH_OK == 
                 addressmap_iterate_instance_addresses (m2, 1, &iterator_cb, 
NULL));
@@ -103,9 +112,9 @@
     MSH_assert (MSH_OK == 
                 addressmap_iterate_instance_addresses (m2, 0, &iterator_cb, 
NULL));
     MSH_assert (1 == cnt);
+    addressmap_iterate_instance_address_infos 
+        (m2, &instance_address_info_free_iterator, NULL);
     addressmap_destroy (m2);
-    instance_address_info_destroy (iainfo1);
-    instance_address_info_destroy (iainfo2);
     free (map_msg);
   }
   /* check intersection of the message with the first addressmap */
@@ -114,7 +123,8 @@
   MSH_assert (MSH_OK == 
               addressmap_iterate_instance_addresses (m, 1, &iterator_cb, 
NULL));
   MSH_assert (3 == cnt);
-  instance_address_info_destroy (iainfo1);
+  addressmap_iterate_instance_address_infos
+      (m, &instance_address_info_free_iterator, NULL);
   addressmap_destroy (m);
   free (iaddr_msgs[1]);
   free (iaddr_msgs[0]);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]