X-Git-Url: http://git.silcnet.org/gitweb/?p=runtime.git;a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcdlist.h;h=a6b2b8c2484ff76b9787a206a76f311ff040472a;hp=e20cdb38f6b0e5615be1aae76c7187f67abea0e1;hb=8eeb9ea5a9819773084c782d10c693b341c6903e;hpb=76c779783817ba7cdbe67ca83971134ce70e662f diff --git a/lib/silcutil/silcdlist.h b/lib/silcutil/silcdlist.h index e20cdb38..a6b2b8c2 100644 --- a/lib/silcutil/silcdlist.h +++ b/lib/silcutil/silcdlist.h @@ -57,7 +57,7 @@ * * NAME * - * typedef struct { ... } *SilcDList; + * typedef struct { ... } *SilcDList, SilcDListStruct; * * DESCRIPTION * @@ -66,12 +66,12 @@ * 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. */ @@ -143,6 +143,26 @@ SilcDList silc_dlist_sinit(SilcStack stack) return list; } +/****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 @@ -175,6 +195,34 @@ void silc_dlist_uninit(SilcDList list) } } +/****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