1/* 2 * Author: William Chia-Wei Cheng (bill.cheng@acm.org) 3 * 4 * Copyright (C) 2001-2009, William Chia-Wei Cheng. 5 * 6 * This file may be distributed under the terms of the Q Public License 7 * as defined by Trolltech AS of Norway and appearing in the file 8 * LICENSE.QPL included in the packaging of this file. 9 * 10 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 11 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 12 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 13 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 14 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 15 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 16 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 * 18 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/list.e,v 1.6 2011/05/16 16:21:58 william Exp $ 19 */ 20 21#ifndef _TGIF_LIST_E_ 22#define _TGIF_LIST_E_ 23 24typedef int (CMPFN)ARGS_DECL((void*, void*)); /* a comparison function */ 25 26typedef struct tagCVListElem { 27 void *obj; 28 struct tagCVListElem *next; 29 struct tagCVListElem *prev; 30} CVListElem; 31 32typedef struct tagCVList { 33 int num_members; 34 CVListElem anchor; 35 36 int (*Length)(struct tagCVList *); 37 int (*Empty)(struct tagCVList *); 38 39 int (*Append)(struct tagCVList *, void*); 40 int (*Prepend)(struct tagCVList *, void*); 41 void (*Unlink)(struct tagCVList *, CVListElem*); 42 void (*UnlinkAll)(struct tagCVList *); 43 int (*InsertBefore)(struct tagCVList *, void*, CVListElem*); 44 int (*InsertAfter)(struct tagCVList *, void*, CVListElem*); 45 46 CVListElem *(*First)(struct tagCVList *); 47 CVListElem *(*Last)(struct tagCVList *); 48 CVListElem *(*Next)(struct tagCVList *, CVListElem *cur); 49 CVListElem *(*Prev)(struct tagCVList *, CVListElem *cur); 50 51 /* returns the CVListElem that contains obj */ 52 CVListElem *(*Find)(struct tagCVList *, void*, CMPFN*); 53} CVList; 54 55#ifdef _INCLUDE_FROM_LIST_C_ 56#undef extern 57#define extern 58#endif /*_INCLUDE_FROM_LIST_C_*/ 59 60extern int CompareForStringList ARGS_DECL((void *pv1, void *pv2)); 61 62extern int ListLength ARGS_DECL((CVList*)); 63extern int ListEmpty ARGS_DECL((CVList*)); 64 65extern int ListAppend ARGS_DECL((CVList*, void*)); 66extern int ListPrepend ARGS_DECL((CVList*, void*)); 67 68extern void ListUnlink ARGS_DECL((CVList*, CVListElem*)); 69extern void ListUnlinkAll ARGS_DECL((CVList*)); 70 71extern int ListInsertAfter ARGS_DECL((CVList*, void*, CVListElem*)); 72extern int ListInsertBefore ARGS_DECL((CVList*, void*, CVListElem*)); 73 74extern CVListElem *ListFirst ARGS_DECL((CVList*)); 75extern CVListElem *ListLast ARGS_DECL((CVList*)); 76extern CVListElem *ListNext ARGS_DECL((CVList*, CVListElem*)); 77extern CVListElem *ListPrev ARGS_DECL((CVList*, CVListElem*)); 78 79extern CVListElem *ListFind ARGS_DECL((CVList*, void*, CMPFN*)); 80 81extern void CVListCleanUp ARGS_DECL((CVList*)); 82extern int CVListInit ARGS_DECL((CVList*)); 83 84#ifdef _INCLUDE_FROM_LIST_C_ 85#undef extern 86#ifndef _NO_RECURSIVE_EXTERN 87#define extern extern 88#endif /* ~_NO_RECURSIVE_EXTERN */ 89#endif /*_INCLUDE_FROM_LIST_C_*/ 90 91#endif /*_TGIF_LIST_E_*/ 92