Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2000 - 2007 Pekka Riikonen
+ Copyright (C) 2000 - 2008 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
#include "silclist.h"
-/****h* silcutil/SILC Dynamic List Interface
+/****h* silcutil/Dynamic List Interface
*
* DESCRIPTION
*
* SILC Dynamic List API can be used to add opaque contexts to list that
- * will automatically allocate list entries. Normal SILC List API cannot
+ * will automatically allocate list entries. The simpler SilcList cannot
* be used for this purpose because in that case the context passed to the
* list must be defined as list structure already. This is not the case in
* SilcDList. But SilcDList is a bit slower than SilcList because it
* SILC Dynamic List is not thread-safe. If the same list context must be
* used in multithreaded environment concurrency control must be employed.
*
+ * EXAMPLE
+ *
+ * SilcDList list = silc_dlist_init();
+ *
+ * silc_dlist_add(list, entry1);
+ * silc_dlist_add(list, entry2);
+ *
+ * // Traverse the list from the beginning to the end
+ * silc_dlist_start(list)
+ * while ((entry = silc_dlist_get(list)) != SILC_LIST_END) {
+ * ...
+ * }
+ *
+ * silc_dlist_uninit(list);
+ *
***/
-/****s* silcutil/SilcDListAPI/SilcDList
+/****s* silcutil/SilcDList
*
* NAME
*
struct SilcDListEntryStruct *prev;
} *SilcDListEntry;
-/****f* silcutil/SilcDListAPI/silc_dlist_init
+/****f* silcutil/silc_dlist_init
*
* SYNOPSIS
*
*
* DESCRIPTION
*
- * Initializes SilcDList. Returns the SilcDList context or NULL on error.
+ * Initializes SilcDList. Returns the SilcDList context or NULL if system
+ * is out of memory.
*
***/
list = (SilcDList)silc_malloc(sizeof(*list));
if (!list)
return NULL;
- list->current = list->prev = NULL;
+ list->stack = list->current = list->prev = NULL;
silc_list_init_prev(list->list, struct SilcDListEntryStruct, next, prev);
return list;
}
-/****f* silcutil/SilcDListAPI/silc_dlist_sinit
+/****f* silcutil/silc_dlist_sinit
*
* SYNOPSIS
*
return list;
}
-/****f* silcutil/SilcDListAPI/silc_dlist_uninit
+/****f* silcutil/silc_dlist_uninit
*
* SYNOPSIS
*
}
}
-/****f* silcutil/SilcDListAPI/silc_dlist_count
+/****f* silcutil/silc_dlist_count
*
* SYNOPSIS
*
return silc_list_count(list->list);
}
-/****f* silcutil/SilcDListAPI/silc_dlist_start
+/****f* silcutil/silc_dlist_start
*
* SYNOPSIS
*
list->current = list->prev = NULL;
}
-/****f* silcutil/SilcDListAPI/silc_dlist_end
+/****f* silcutil/silc_dlist_end
*
* SYNOPSIS
*
list->current = list->prev = NULL;
}
-/****f* silcutil/SilcDListAPI/silc_dlist_add
+/****f* silcutil/silc_dlist_add
*
* SYNOPSIS
*
return TRUE;
}
-/****f* silcutil/SilcDList/silc_dlist_insert
+/****f* silcutil/silc_dlist_insert
*
* SYNOPSIS
*
return TRUE;
}
-/****f* silcutil/SilcDListAPI/silc_dlist_del
+/****f* silcutil/silc_dlist_del
*
* SYNOPSIS
*
}
}
-/****f* silcutil/SilcDListAPI/silc_dlist_get
+/****f* silcutil/silc_dlist_get
*
* SYNOPSIS
*