gnunet-svn
[Top][All Lists]
Advanced

[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);




reply via email to

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