1  /*
       2   * Summary: lists interfaces
       3   * Description: this module implement the list support used in
       4   * various place in the library.
       5   *
       6   * Copy: See Copyright for the status of this software.
       7   *
       8   * Author: Gary Pennington <Gary.Pennington@uk.sun.com>
       9   */
      10  
      11  #ifndef __XML_LINK_INCLUDE__
      12  #define __XML_LINK_INCLUDE__
      13  
      14  #include <libxml/xmlversion.h>
      15  
      16  #ifdef __cplusplus
      17  extern "C" {
      18  #endif
      19  
      20  typedef struct _xmlLink xmlLink;
      21  typedef xmlLink *xmlLinkPtr;
      22  
      23  typedef struct _xmlList xmlList;
      24  typedef xmlList *xmlListPtr;
      25  
      26  /**
      27   * xmlListDeallocator:
      28   * @lk:  the data to deallocate
      29   *
      30   * Callback function used to free data from a list.
      31   */
      32  typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
      33  /**
      34   * xmlListDataCompare:
      35   * @data0: the first data
      36   * @data1: the second data
      37   *
      38   * Callback function used to compare 2 data.
      39   *
      40   * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
      41   */
      42  typedef int  (*xmlListDataCompare) (const void *data0, const void *data1);
      43  /**
      44   * xmlListWalker:
      45   * @data: the data found in the list
      46   * @user: extra user provided data to the walker
      47   *
      48   * Callback function used when walking a list with xmlListWalk().
      49   *
      50   * Returns 0 to stop walking the list, 1 otherwise.
      51   */
      52  typedef int (*xmlListWalker) (const void *data, void *user);
      53  
      54  /* Creation/Deletion */
      55  XMLPUBFUN xmlListPtr
      56  		xmlListCreate		(xmlListDeallocator deallocator,
      57  	                                 xmlListDataCompare compare);
      58  XMLPUBFUN void
      59  		xmlListDelete		(xmlListPtr l);
      60  
      61  /* Basic Operators */
      62  XMLPUBFUN void *
      63  		xmlListSearch		(xmlListPtr l,
      64  					 void *data);
      65  XMLPUBFUN void *
      66  		xmlListReverseSearch	(xmlListPtr l,
      67  					 void *data);
      68  XMLPUBFUN int
      69  		xmlListInsert		(xmlListPtr l,
      70  					 void *data) ;
      71  XMLPUBFUN int
      72  		xmlListAppend		(xmlListPtr l,
      73  					 void *data) ;
      74  XMLPUBFUN int
      75  		xmlListRemoveFirst	(xmlListPtr l,
      76  					 void *data);
      77  XMLPUBFUN int
      78  		xmlListRemoveLast	(xmlListPtr l,
      79  					 void *data);
      80  XMLPUBFUN int
      81  		xmlListRemoveAll	(xmlListPtr l,
      82  					 void *data);
      83  XMLPUBFUN void
      84  		xmlListClear		(xmlListPtr l);
      85  XMLPUBFUN int
      86  		xmlListEmpty		(xmlListPtr l);
      87  XMLPUBFUN xmlLinkPtr
      88  		xmlListFront		(xmlListPtr l);
      89  XMLPUBFUN xmlLinkPtr
      90  		xmlListEnd		(xmlListPtr l);
      91  XMLPUBFUN int
      92  		xmlListSize		(xmlListPtr l);
      93  
      94  XMLPUBFUN void
      95  		xmlListPopFront		(xmlListPtr l);
      96  XMLPUBFUN void
      97  		xmlListPopBack		(xmlListPtr l);
      98  XMLPUBFUN int
      99  		xmlListPushFront	(xmlListPtr l,
     100  					 void *data);
     101  XMLPUBFUN int
     102  		xmlListPushBack		(xmlListPtr l,
     103  					 void *data);
     104  
     105  /* Advanced Operators */
     106  XMLPUBFUN void
     107  		xmlListReverse		(xmlListPtr l);
     108  XMLPUBFUN void
     109  		xmlListSort		(xmlListPtr l);
     110  XMLPUBFUN void
     111  		xmlListWalk		(xmlListPtr l,
     112  					 xmlListWalker walker,
     113  					 void *user);
     114  XMLPUBFUN void
     115  		xmlListReverseWalk	(xmlListPtr l,
     116  					 xmlListWalker walker,
     117  					 void *user);
     118  XMLPUBFUN void
     119  		xmlListMerge		(xmlListPtr l1,
     120  					 xmlListPtr l2);
     121  XMLPUBFUN xmlListPtr
     122  		xmlListDup		(const xmlListPtr old);
     123  XMLPUBFUN int
     124  		xmlListCopy		(xmlListPtr cur,
     125  					 const xmlListPtr old);
     126  /* Link operators */
     127  XMLPUBFUN void *
     128  		xmlLinkGetData          (xmlLinkPtr lk);
     129  
     130  /* xmlListUnique() */
     131  /* xmlListSwap */
     132  
     133  #ifdef __cplusplus
     134  }
     135  #endif
     136  
     137  #endif /* __XML_LINK_INCLUDE__ */