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
*
*
***/
-/****s* silcutil/SilcDListAPI/SilcDList
+/****s* silcutil/SilcDList
*
* NAME
*
- * typedef struct { ... } *SilcDList;
+ * typedef struct { ... } *SilcDList, SilcDListStruct;
*
* DESCRIPTION
*
* Dynamic List Interface functions.
*
***/
-typedef struct SilcDListStruct {
+typedef struct SilcDListObject {
SilcStack stack;
SilcList list;
void *current;
void *prev;
-} *SilcDList;
+} *SilcDList, SilcDListStruct;
/* SilcDListEntry structure, one entry in the list. This MUST NOT be used
directly by the application. */
struct SilcDListEntryStruct *prev;
} *SilcDListEntry;
-/****f* silcutil/SilcDListAPI/silc_dlist_init
+/****f* silcutil/silc_dlist_init
*
* SYNOPSIS
*
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_init_static
+ *
+ * SYNOPSIS
+ *
+ * static inline
+ * void silc_dlist_init_static(SilcDlist list);
+ *
+ * DESCRIPTION
+ *
+ * Initialize a pre-allocated allocated SilcDList.
+ *
+ ***/
+
+static inline
+void silc_dlist_init_static(SilcDList list)
+{
+ list->stack = list->current = list->prev = NULL;
+ silc_list_init_prev(list->list, struct SilcDListEntryStruct, next, prev);
+}
+
+/****f* silcutil/silc_dlist_uninit
*
* SYNOPSIS
*
}
}
-/****f* silcutil/SilcDListAPI/silc_dlist_count
+/****f* silcutil/silc_dlist_uninit_static
+ *
+ * SYNOPSIS
+ *
+ * static inline
+ * void silc_dlist_uninit_static(SilcDList list);
+ *
+ * DESCRIPTION
+ *
+ * Uninits and frees all memory. Must be called to free memory. Does NOT
+ * free the contexts saved by caller. Used to uninit a list initialized
+ * with silc_dlist_init_static.
+ *
+ ***/
+
+static inline
+void silc_dlist_uninit_static(SilcDList list)
+{
+ if (list) {
+ SilcDListEntry e;
+ silc_list_start(list->list);
+ while ((e = (SilcDListEntry)silc_list_get(list->list)) != SILC_LIST_END) {
+ silc_list_del(list->list, e);
+ silc_free(e);
+ }
+ }
+}
+
+/****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
*