[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r17472 - in gnunet/src: include util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r17472 - in gnunet/src: include util |
Date: |
Fri, 14 Oct 2011 09:22:42 +0200 |
Author: grothoff
Date: 2011-10-14 09:22:42 +0200 (Fri, 14 Oct 2011)
New Revision: 17472
Modified:
gnunet/src/include/gnunet_container_lib.h
gnunet/src/util/container_slist.c
gnunet/src/util/network.c
gnunet/src/util/test_container_slist.c
Log:
LRN loves slist: Use stack allocation for slist iterator
Modified: gnunet/src/include/gnunet_container_lib.h
===================================================================
--- gnunet/src/include/gnunet_container_lib.h 2011-10-13 23:27:22 UTC (rev
17471)
+++ gnunet/src/include/gnunet_container_lib.h 2011-10-14 07:22:42 UTC (rev
17472)
@@ -1054,9 +1054,26 @@
/**
* Handle to a singly linked list iterator
*/
-struct GNUNET_CONTAINER_SList_Iterator;
+struct GNUNET_CONTAINER_SList_Iterator
+{
+ /**
+ * Linked list that we are iterating over.
+ */
+ struct GNUNET_CONTAINER_SList *list;
+ /**
+ * Last element accessed.
+ */
+ struct GNUNET_CONTAINER_SList_Elem *last;
+ /**
+ * Current list element.
+ */
+ struct GNUNET_CONTAINER_SList_Elem *elem;
+};
+
+
+
/**
* Add a new element to the list
* @param l list
@@ -1113,9 +1130,11 @@
* Return the beginning of a list
*
* @param l list
- * @return iterator pointing to the beginning, free using "GNUNET_free"
+ * @return iterator pointing to the beginning (by value! Either allocate the
+ * structure on the stack, or use GNUNET_malloc() yourself! All other
+ * functions do take pointer to this struct though)
*/
-struct GNUNET_CONTAINER_SList_Iterator *
+struct GNUNET_CONTAINER_SList_Iterator
GNUNET_CONTAINER_slist_begin (struct GNUNET_CONTAINER_SList *l);
Modified: gnunet/src/util/container_slist.c
===================================================================
--- gnunet/src/util/container_slist.c 2011-10-13 23:27:22 UTC (rev 17471)
+++ gnunet/src/util/container_slist.c 2011-10-14 07:22:42 UTC (rev 17472)
@@ -78,28 +78,7 @@
};
-/**
- * Handle to a singly linked list iterator
- */
-struct GNUNET_CONTAINER_SList_Iterator
-{
- /**
- * Linked list that we are iterating over.
- */
- struct GNUNET_CONTAINER_SList *list;
- /**
- * Last element accessed.
- */
- struct GNUNET_CONTAINER_SList_Elem *last;
-
- /**
- * Current list element.
- */
- struct GNUNET_CONTAINER_SList_Elem *elem;
-};
-
-
/**
* Create a new element that is to be inserted into the list
* @internal
@@ -186,22 +165,22 @@
GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst,
struct GNUNET_CONTAINER_SList *src)
{
- struct GNUNET_CONTAINER_SList_Iterator *i;
+ struct GNUNET_CONTAINER_SList_Iterator i;
for (i = GNUNET_CONTAINER_slist_begin (src);
- GNUNET_CONTAINER_slist_end (i) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (i))
+ GNUNET_CONTAINER_slist_end (&i) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&i))
{
GNUNET_CONTAINER_slist_add (dst,
- (i->elem->disp ==
+ (i.elem->disp ==
GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC)
? GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC
:
GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
- i->elem->elem, i->elem->len);
+ i.elem->elem, i.elem->len);
}
- GNUNET_CONTAINER_slist_iter_destroy (i);
+ GNUNET_CONTAINER_slist_iter_destroy (&i);
}
@@ -233,14 +212,14 @@
* @param l list
* @return iterator pointing to the beginning
*/
-struct GNUNET_CONTAINER_SList_Iterator *
+struct GNUNET_CONTAINER_SList_Iterator
GNUNET_CONTAINER_slist_begin (struct GNUNET_CONTAINER_SList *l)
{
- struct GNUNET_CONTAINER_SList_Iterator *ret;
+ struct GNUNET_CONTAINER_SList_Iterator ret;
- ret = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_SList_Iterator));
- ret->elem = l->head;
- ret->list = l;
+ memset (&ret, 0, sizeof (ret));
+ ret.elem = l->head;
+ ret.list = l;
return ret;
}
@@ -405,7 +384,6 @@
GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator
*i)
{
- GNUNET_free (i);
}
/* end of container_slist.c */
Modified: gnunet/src/util/network.c
===================================================================
--- gnunet/src/util/network.c 2011-10-13 23:27:22 UTC (rev 17471)
+++ gnunet/src/util/network.c 2011-10-14 07:22:42 UTC (rev 17472)
@@ -1010,7 +1010,7 @@
return GNUNET_YES;
}
#else
- struct GNUNET_CONTAINER_SList_Iterator *it;
+ struct GNUNET_CONTAINER_SList_Iterator it;
struct GNUNET_DISK_FileHandle *h;
int i;
int j;
@@ -1027,25 +1027,25 @@
}
}
it = GNUNET_CONTAINER_slist_begin (fds1->handles);
- while (GNUNET_CONTAINER_slist_end (it) != GNUNET_YES)
+ while (GNUNET_CONTAINER_slist_end (&it) != GNUNET_YES)
{
#if DEBUG_NETWORK
- struct GNUNET_CONTAINER_SList_Iterator *t;
+ struct GNUNET_CONTAINER_SList_Iterator t;
#endif
h =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (it,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&it,
NULL);
#if DEBUG_NETWORK
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Checking that FD 0x%x is in another set:\n", h->h);
for (t = GNUNET_CONTAINER_slist_begin (fds2->handles);
- GNUNET_CONTAINER_slist_end (t) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (t))
+ GNUNET_CONTAINER_slist_end (&t) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&t))
{
struct GNUNET_DISK_FileHandle *fh;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (t,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&t,
NULL);
LOG (GNUNET_ERROR_TYPE_DEBUG, "0x%x\n", fh->h);
}
@@ -1056,12 +1056,10 @@
#if DEBUG_NETWORK
LOG (GNUNET_ERROR_TYPE_DEBUG, "Match!\n");
#endif
- GNUNET_CONTAINER_slist_iter_destroy (it);
return GNUNET_YES;
}
- GNUNET_CONTAINER_slist_next (it);
+ GNUNET_CONTAINER_slist_next (&it);
}
- GNUNET_CONTAINER_slist_iter_destroy (it);
#endif
return GNUNET_NO;
}
@@ -1161,21 +1159,20 @@
handles += read_handles = GNUNET_CONTAINER_slist_count (rfds->handles);
#if DEBUG_NETWORK
{
- struct GNUNET_CONTAINER_SList_Iterator *t;
+ struct GNUNET_CONTAINER_SList_Iterator t;
for (t = GNUNET_CONTAINER_slist_begin (rfds->handles);
- GNUNET_CONTAINER_slist_end (t) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (t))
+ GNUNET_CONTAINER_slist_end (&t) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&t))
{
struct GNUNET_DISK_FileHandle *fh;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (t,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&t,
NULL);
LOG (GNUNET_ERROR_TYPE_DEBUG, "FD 0x%x (0x%x) is SET in rfds\n",
fh->h, fh);
}
- GNUNET_CONTAINER_slist_iter_destroy (t);
}
#endif
#endif
@@ -1291,16 +1288,16 @@
/* Read Pipes */
if (rfds && read_handles)
{
- struct GNUNET_CONTAINER_SList_Iterator *i;
+ struct GNUNET_CONTAINER_SList_Iterator i;
for (i = GNUNET_CONTAINER_slist_begin (rfds->handles);
- GNUNET_CONTAINER_slist_end (i) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (i))
+ GNUNET_CONTAINER_slist_end (&i) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&i))
{
struct GNUNET_DISK_FileHandle *fh;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&i,
NULL);
if (fh->type == GNUNET_PIPE)
{
@@ -1350,7 +1347,6 @@
GNUNET_DISK_FileHandle));
}
}
- GNUNET_CONTAINER_slist_iter_destroy (i);
}
if (wfds && write_handles)
{
@@ -1363,17 +1359,17 @@
}
if (efds && ex_handles)
{
- struct GNUNET_CONTAINER_SList_Iterator *i;
+ struct GNUNET_CONTAINER_SList_Iterator i;
for (i = GNUNET_CONTAINER_slist_begin (efds->handles);
- GNUNET_CONTAINER_slist_end (i) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (i))
+ GNUNET_CONTAINER_slist_end (&i) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&i))
{
struct GNUNET_DISK_FileHandle *fh;
DWORD dwBytes;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&i,
NULL);
if (fh->type == GNUNET_PIPE)
{
@@ -1388,7 +1384,6 @@
}
}
}
- GNUNET_CONTAINER_slist_iter_destroy (i);
}
if (nfds > 0)
{
@@ -1610,7 +1605,7 @@
#endif
if (rfds)
{
- struct GNUNET_CONTAINER_SList_Iterator *t;
+ struct GNUNET_CONTAINER_SList_Iterator t;
for (i = 0; i < rfds->sds.fd_count; i++)
{
@@ -1618,20 +1613,19 @@
nsock++;
}
for (t = GNUNET_CONTAINER_slist_begin (rfds->handles);
- GNUNET_CONTAINER_slist_end (t) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (t))
+ GNUNET_CONTAINER_slist_end (&t) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&t))
{
struct GNUNET_DISK_FileHandle *fh;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (t,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&t,
NULL);
if (fh->type == GNUNET_PIPE)
{
CancelIo (fh->h);
}
}
- GNUNET_CONTAINER_slist_iter_destroy (t);
#if DEBUG_NETWORK
LOG (GNUNET_ERROR_TYPE_DEBUG, "Zeroing rfds\n");
#endif
@@ -1676,7 +1670,7 @@
#if DEBUG_NETWORK
if (rfds)
{
- struct GNUNET_CONTAINER_SList_Iterator *t;
+ struct GNUNET_CONTAINER_SList_Iterator t;
for (i = 0; i < bread.fd_count; i++)
{
@@ -1687,17 +1681,16 @@
"NOT SET");
}
for (t = GNUNET_CONTAINER_slist_begin (rfds->handles);
- GNUNET_CONTAINER_slist_end (t) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (t))
+ GNUNET_CONTAINER_slist_end (&t) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&t))
{
struct GNUNET_DISK_FileHandle *fh;
fh =
- (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (t,
+ (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (&t,
NULL);
LOG (GNUNET_ERROR_TYPE_DEBUG, "FD 0x%x is SET in rfds\n", fh->h);
}
- GNUNET_CONTAINER_slist_iter_destroy (t);
}
if (wfds)
{
Modified: gnunet/src/util/test_container_slist.c
===================================================================
--- gnunet/src/util/test_container_slist.c 2011-10-13 23:27:22 UTC (rev
17471)
+++ gnunet/src/util/test_container_slist.c 2011-10-14 07:22:42 UTC (rev
17472)
@@ -32,7 +32,7 @@
main (int argc, char *argv[])
{
struct GNUNET_CONTAINER_SList *l;
- struct GNUNET_CONTAINER_SList_Iterator *it;
+ struct GNUNET_CONTAINER_SList_Iterator it;
unsigned int i;
int *ip;
unsigned int j;
@@ -52,47 +52,45 @@
GNUNET_assert (GNUNET_CONTAINER_slist_count (l) == 100);
for (it = GNUNET_CONTAINER_slist_begin (l), i = 99;
- GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (it), i--)
+ GNUNET_CONTAINER_slist_end (&it) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&it), i--)
{
- p = GNUNET_CONTAINER_slist_get (it, &s);
+ p = GNUNET_CONTAINER_slist_get (&it, &s);
if ((p == NULL) || (i != (j = *(int *) p)) || (s != sizeof (i)))
{
- GNUNET_CONTAINER_slist_iter_destroy (it);
+ GNUNET_CONTAINER_slist_iter_destroy (&it);
GNUNET_assert (0);
}
j *= 2;
- GNUNET_CONTAINER_slist_insert (it,
+ GNUNET_CONTAINER_slist_insert (&it,
GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
&j, sizeof (j));
}
- GNUNET_CONTAINER_slist_iter_destroy (it);
GNUNET_assert (GNUNET_CONTAINER_slist_count (l) == 200);
i = 198;
GNUNET_assert (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)));
for (it = GNUNET_CONTAINER_slist_begin (l);
- GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;)
+ GNUNET_CONTAINER_slist_end (&it) != GNUNET_YES;)
{
- p = GNUNET_CONTAINER_slist_get (it, &s);
+ p = GNUNET_CONTAINER_slist_get (&it, &s);
GNUNET_assert (p != NULL);
GNUNET_assert (s == sizeof (i));
i = *(int *) p;
- GNUNET_assert (GNUNET_CONTAINER_slist_next (it) == GNUNET_YES);
- GNUNET_assert (GNUNET_CONTAINER_slist_end (it) != GNUNET_YES);
+ GNUNET_assert (GNUNET_CONTAINER_slist_next (&it) == GNUNET_YES);
+ GNUNET_assert (GNUNET_CONTAINER_slist_end (&it) != GNUNET_YES);
- p = GNUNET_CONTAINER_slist_get (it, &s);
+ p = GNUNET_CONTAINER_slist_get (&it, &s);
GNUNET_assert (p != NULL);
GNUNET_assert (s == sizeof (j));
j = *(int *) p;
GNUNET_assert (j * 2 == i);
- GNUNET_CONTAINER_slist_erase (it);
+ GNUNET_CONTAINER_slist_erase (&it);
}
- GNUNET_CONTAINER_slist_iter_destroy (it);
GNUNET_assert (GNUNET_CONTAINER_slist_count (l) == 100);
i = 99;
GNUNET_assert (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)) ==
@@ -124,18 +122,16 @@
GNUNET_assert (GNUNET_CONTAINER_slist_count (l) == 100);
for (it = GNUNET_CONTAINER_slist_begin (l), i = 0;
- GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;
- GNUNET_CONTAINER_slist_next (it), i++)
+ GNUNET_CONTAINER_slist_end (&it) != GNUNET_YES;
+ GNUNET_CONTAINER_slist_next (&it), i++)
{
- p = GNUNET_CONTAINER_slist_get (it, &s);
+ p = GNUNET_CONTAINER_slist_get (&it, &s);
if ((p == NULL) || (i != *(int *) p) || (s != sizeof (i)))
{
- GNUNET_CONTAINER_slist_iter_destroy (it);
GNUNET_assert (0);
}
}
- GNUNET_CONTAINER_slist_iter_destroy (it);
GNUNET_CONTAINER_slist_destroy (l);
/*check if disp = GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC */
@@ -151,12 +147,12 @@
}
//creat_add
it = GNUNET_CONTAINER_slist_begin (l);
- p = GNUNET_CONTAINER_slist_get (it, &s);
+ p = GNUNET_CONTAINER_slist_get (&it, &s);
GNUNET_assert (p != NULL);
//slist_erase
- GNUNET_assert (GNUNET_CONTAINER_slist_next (it) == GNUNET_YES);
- GNUNET_CONTAINER_slist_erase (it);
- GNUNET_CONTAINER_slist_iter_destroy (it);
+ GNUNET_assert (GNUNET_CONTAINER_slist_next (&it) == GNUNET_YES);
+ GNUNET_CONTAINER_slist_erase (&it);
+ GNUNET_CONTAINER_slist_iter_destroy (&it);
GNUNET_assert (GNUNET_CONTAINER_slist_count (l) == 99);
//slist_clear
GNUNET_CONTAINER_slist_clear (l);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17472 - in gnunet/src: include util,
gnunet <=