/**
* 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;
+};
+
/**
* 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);
};
-/**
- * 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
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);
}
* @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;
}
GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator
*i)
{
- GNUNET_free (i);
}
/* end of container_slist.c */
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;
}
}
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);
}
#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;
}
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
/* 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)
{
GNUNET_DISK_FileHandle));
}
}
- GNUNET_CONTAINER_slist_iter_destroy (i);
}
if (wfds && write_handles)
{
}
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)
{
}
}
}
- GNUNET_CONTAINER_slist_iter_destroy (i);
}
if (nfds > 0)
{
#endif
if (rfds)
{
- struct GNUNET_CONTAINER_SList_Iterator *t;
+ struct GNUNET_CONTAINER_SList_Iterator t;
for (i = 0; i < rfds->sds.fd_count; i++)
{
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
#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++)
{
"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)
{
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;
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)) ==
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 */
}
//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);