Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2002 - 2005 Pekka Riikonen
+ Copyright (C) 2002 - 2007 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
* DESCRIPTION
*
* Implementation of the SilcList interface. This interface provides
- * simple linked list.
+ * simple linked list. This interface does not allocate any memory.
+ *
+ * SILC List is not thread-safe. If the same list context must be used
+ * in multithreaded environment concurrency control must be employed.
*
***/
* function silc_list_init.
*
***/
-typedef struct {
+typedef struct SilcListStruct {
void *head; /* Start of the list */
void *tail; /* End of the list */
void *current; /* Current pointer in list */
- unsigned int next_offset : 16; /* Offset to 'next' pointer */
- unsigned int prev_offset : 16; /* Offset to 'prev' pointer */
+ SilcUInt16 next_offset; /* Offset to 'next' pointer */
+ SilcUInt16 prev_offset; /* Offset to 'prev' pointer */
unsigned int prev_set : 1; /* Set if 'prev' exists */
unsigned int end_set : 1; /* Set if silc_list_end was called */
unsigned int count : 30; /* Number of entries in the list */
(list).next_offset = silc_offsetof(type, nextfield); \
(list).prev_set = 0; \
(list).prev_offset = 0; \
+ (list).end_set = 0; \
(list).head = (list).tail = (list).current = NULL; \
} while(0)
(list).next_offset = silc_offsetof(type, nextfield); \
(list).prev_offset = silc_offsetof(type, prevfield); \
(list).prev_set = 1; \
+ (list).end_set = 0; \
(list).head = (list).tail = (list).current = NULL; \
} while(0)