[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]);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r28085 - msh/src,
gnunet <=