/app/libxml2-2.4.28/include/libxml2/libxml/list.h


    1 /*
    2  * list.h: lists interfaces
    3  *
    4  * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
   11  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
   12  * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
   13  * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
   14  *
   15  * Author: Gary.Pennington@uk.sun.com
   16  */
   17 
   18 #ifndef __XML_LINK_INCLUDE__
   19 #define __XML_LINK_INCLUDE__
   20 
   21 #ifdef __cplusplus
   22 extern "C" {
   23 #endif
   24 
   25 typedef struct _xmlLink xmlLink;
   26 typedef xmlLink *xmlLinkPtr;
   27 
   28 typedef struct _xmlList xmlList;
   29 typedef xmlList *xmlListPtr;
   30 
   31 /**
   32  * xmlListDeallocator:
   33  * @lk:  the data to deallocate
   34  *
   35  * Callback function used to free data from a list.
   36  */
   37 typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
   38 /**
   39  * xmlListDataCompare:
   40  * @data0: the first data
   41  * @data1: the second data
   42  *
   43  * Callback function used to compare 2 data.
   44  *
   45  * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
   46  */
   47 typedef int  (*xmlListDataCompare) (const void *data0, const void *data1);
   48 /**
   49  * xmlListWalker:
   50  * @data: the data found in the list
   51  * @user: extra user provided data to the walker
   52  *
   53  * Callback function used when walking a list with xmlListWalk().
   54  *
   55  * Returns 0 to stop walking the list, 1 otherwise.
   56  */
   57 typedef int (*xmlListWalker) (const void *data, const void *user);
   58 
   59 /* Creation/Deletion */
   60 xmlListPtr	xmlListCreate		(xmlListDeallocator deallocator,
   61 	                                 xmlListDataCompare compare);
   62 void		xmlListDelete		(xmlListPtr l);
   63 
   64 /* Basic Operators */
   65 void *		xmlListSearch		(xmlListPtr l,
   66 					 void *data);
   67 void *		xmlListReverseSearch	(xmlListPtr l,
   68 					 void *data);
   69 int		xmlListInsert		(xmlListPtr l,
   70 					 void *data) ;
   71 int		xmlListAppend		(xmlListPtr l,
   72 					 void *data) ;
   73 int		xmlListRemoveFirst	(xmlListPtr l,
   74 					 void *data);
   75 int		xmlListRemoveLast	(xmlListPtr l,
   76 					 void *data);
   77 int		xmlListRemoveAll	(xmlListPtr l,
   78 					 void *data);
   79 void		xmlListClear		(xmlListPtr l);
   80 int		xmlListEmpty		(xmlListPtr l);
   81 xmlLinkPtr	xmlListFront		(xmlListPtr l);
   82 xmlLinkPtr	xmlListEnd		(xmlListPtr l);
   83 int		xmlListSize		(xmlListPtr l);
   84 
   85 void		xmlListPopFront		(xmlListPtr l);
   86 void		xmlListPopBack		(xmlListPtr l);
   87 int		xmlListPushFront	(xmlListPtr l,
   88 					 void *data);
   89 int		xmlListPushBack		(xmlListPtr l,
   90 					 void *data);
   91 
   92 /* Advanced Operators */
   93 void		xmlListReverse		(xmlListPtr l);
   94 void		xmlListSort		(xmlListPtr l);
   95 void		xmlListWalk		(xmlListPtr l,
   96 					 xmlListWalker walker,
   97 					 const void *user);
   98 void		xmlListReverseWalk	(xmlListPtr l,
   99 					 xmlListWalker walker,
  100 					 const void *user);
  101 void		xmlListMerge		(xmlListPtr l1,
  102 					 xmlListPtr l2);
  103 xmlListPtr	xmlListDup		(const xmlListPtr old);
  104 int		xmlListCopy		(xmlListPtr cur,
  105 					 const xmlListPtr old);
  106 /* Link operators */
  107 void *          xmlLinkGetData          (xmlLinkPtr lk);
  108 
  109 /* xmlListUnique() */
  110 /* xmlListSwap */
  111 
  112 #ifdef __cplusplus
  113 }
  114 #endif
  115 
  116 #endif /* __XML_LINK_INCLUDE__ */