williamr@4: /* williamr@4: * Summary: lists interfaces williamr@4: * Description: this module implement the list support used in williamr@4: * various place in the library. williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Gary Pennington williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_LIST_H williamr@4: #define XML_LIST_H williamr@4: williamr@4: #include williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: typedef struct _xmlLink xmlLink; williamr@4: typedef xmlLink *xmlLinkPtr; williamr@4: williamr@4: typedef struct _xmlList xmlList; williamr@4: typedef xmlList *xmlListPtr; williamr@4: williamr@4: /** williamr@4: * xmlListDeallocator: williamr@4: * @param lk the data to deallocate williamr@4: * williamr@4: * Callback function used to free data from a list. williamr@4: */ williamr@4: typedef void (*xmlListDeallocator) (xmlLinkPtr lk); williamr@4: /** williamr@4: * xmlListDataCompare: williamr@4: * @param data0 the first data williamr@4: * @param data1 the second data williamr@4: * williamr@4: * Callback function used to compare 2 data. williamr@4: * williamr@4: * Returns 0 is equality, -1 or 1 otherwise depending on the ordering. williamr@4: */ williamr@4: typedef int (*xmlListDataCompare) (const void *data0, const void *data1); williamr@4: /** williamr@4: * xmlListWalker: williamr@4: * @param data the data found in the list williamr@4: * @param user extra user provided data to the walker williamr@4: * williamr@4: * Callback function used when walking a list with xmlListWalk(). williamr@4: * williamr@4: * Returns 0 to stop walking the list, 1 otherwise. williamr@4: */ williamr@4: typedef int (*xmlListWalker) (const void *data, const void *user); williamr@4: williamr@4: /* Creation/Deletion */ williamr@4: XMLPUBFUN xmlListPtr XMLCALL williamr@4: xmlListCreate (xmlListDeallocator deallocator, xmlListDataCompare compare); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlListDelete (xmlListPtr l); williamr@4: williamr@4: /* Basic Operators */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlListInsert (xmlListPtr l, void *data) ; williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlListAppend (xmlListPtr l, void *data) ; williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlListRemoveFirst (xmlListPtr l, void *data); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlListClear (xmlListPtr l); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlListEmpty (xmlListPtr l); williamr@4: XMLPUBFUN xmlLinkPtr XMLCALL williamr@4: xmlListFront (xmlListPtr l); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN xmlLinkPtr XMLCALL xmlListEnd (xmlListPtr l); williamr@4: XMLPUBFUN void XMLCALL xmlListReverse (xmlListPtr l); williamr@4: XMLPUBFUN void XMLCALL xmlListPopBack (xmlListPtr l); williamr@4: XMLPUBFUN void XMLCALL xmlListSort (xmlListPtr l); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN void* XMLCALL xmlListSearch (xmlListPtr l, void *data); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN void* XMLCALL xmlListReverseSearch(xmlListPtr l, void *data); williamr@4: XMLPUBFUN int XMLCALL xmlListRemoveLast (xmlListPtr l, void *data); williamr@4: XMLPUBFUN int XMLCALL xmlListRemoveAll (xmlListPtr l, void *data); williamr@4: XMLPUBFUN int XMLCALL xmlListPushBack (xmlListPtr l, void *data); williamr@4: XMLPUBFUN void XMLCALL xmlListReverseWalk (xmlListPtr l, williamr@4: xmlListWalker walker, williamr@4: const void *user); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN xmlListPtr XMLCALL xmlListDup (const xmlListPtr old); williamr@4: XMLPUBFUN int XMLCALL xmlListSize (xmlListPtr l); williamr@4: XMLPUBFUN void XMLCALL xmlListPopFront (xmlListPtr l); williamr@4: XMLPUBFUN int XMLCALL xmlListPushFront(xmlListPtr l, void *data); williamr@4: XMLPUBFUN void XMLCALL xmlListWalk (xmlListPtr l, xmlListWalker walker, const void *user); williamr@4: XMLPUBFUN void XMLCALL xmlListMerge (xmlListPtr l1, xmlListPtr l2); williamr@4: XMLPUBFUN int XMLCALL xmlListCopy (xmlListPtr cur, const xmlListPtr old); williamr@4: /* Link operators */ williamr@4: XMLPUBFUN void* XMLCALL xmlLinkGetData (xmlLinkPtr lk); williamr@4: williamr@4: /* xmlListUnique() */ williamr@4: /* xmlListSwap */ williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: williamr@4: #endif /* __XML_LIST_H */ williamr@4: