xlist.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * xlist.h : a simple doubly linked list in C (header file)
  3.  *****************************************************************************
  4.  * Copyright (C) 2003-2004 Commonwealth Scientific and Industrial Research
  5.  *                         Organisation (CSIRO) Australia
  6.  * Copyright (C) 2000-2004 the VideoLAN team
  7.  *
  8.  * $Id: 7bb94dd3d0c18cff5b2b8d3070195de0914392a3 $
  9.  *
  10.  * Authors: Conrad Parker <Conrad.Parker@csiro.au>
  11.  *          Andre Pang <Andre.Pang@csiro.au>
  12.  *
  13.  * This program is free software; you can redistribute it and/or modify
  14.  * it under the terms of the GNU General Public License as published by
  15.  * the Free Software Foundation; either version 2 of the License, or
  16.  * (at your option) any later version.
  17.  *
  18.  * This program is distributed in the hope that it will be useful,
  19.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  * GNU General Public License for more details.
  22.  *
  23.  * You should have received a copy of the GNU General Public License
  24.  * along with this program; if not, write to the Free Software
  25.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  26.  *****************************************************************************/
  27. #ifndef __XLIST__
  28. #define __XLIST__
  29. /**
  30.  * A doubly linked list
  31.  */
  32. typedef struct _XList XList;
  33. struct _XList {
  34.   XList * prev;
  35.   XList * next;
  36.   void * data;
  37. };
  38. /**
  39.  * Signature of a cloning function.
  40.  */
  41. typedef void * (*XCloneFunc) (void * data);
  42. /**
  43.  * Signature of a freeing function.
  44.  */
  45. typedef void * (*XFreeFunc) (void * data);
  46. /** Create a new list
  47.  * return a new list
  48.  */
  49. XList * xlist_new (void);
  50. /**
  51.  * Clone a list using the default clone function
  52.  * param list the list to clone
  53.  * returns a newly cloned list
  54.  */
  55. XList * xlist_clone (XList * list);
  56. /**
  57.  * Clone a list using a custom clone function
  58.  * param list the list to clone
  59.  * param clone the function to use to clone a list item
  60.  * returns a newly cloned list
  61.  */
  62. XList * xlist_clone_with (XList * list, XCloneFunc clone);
  63. /**
  64.  * Return the tail element of a list
  65.  * param list the list
  66.  * returns the tail element
  67.  */
  68. XList * xlist_tail (XList * list);
  69. /**
  70.  * Prepend a new node to a list containing given data
  71.  * param list the list
  72.  * param data the data element of the newly created node
  73.  * returns the new list head
  74.  */
  75. XList * xlist_prepend (XList * list, void * data);
  76. /**
  77.  * Append a new node to a list containing given data
  78.  * param list the list
  79.  * param data the data element of the newly created node
  80.  * returns the head of the list
  81.  */
  82. XList * xlist_append (XList * list, void * data);
  83. /**
  84.  * Add a new node containing given data before a given node
  85.  * param list the list
  86.  * param data the data element of the newly created node
  87.  * param node the node before which to add the newly created node
  88.  * returns the head of the list (which may have changed)
  89.  */
  90. XList * xlist_add_before (XList * list, void * data, XList * node);
  91. /**
  92.  * Add a new node containing given data after a given node
  93.  * param list the list
  94.  * param data the data element of the newly created node
  95.  * param node the node after which to add the newly created node
  96.  * returns the head of the list
  97.  */
  98. XList * xlist_add_after (XList * list, void * data, XList * node);
  99. /**
  100.  * Find the first node containing given data in a list
  101.  * param list the list
  102.  * param data the data element to find
  103.  * returns the first node containing given data, or NULL if it is not found
  104.  */
  105. XList * xlist_find (XList * list, void * data);
  106. /**
  107.  * Remove a node from a list
  108.  * param list the list
  109.  * param node the node to remove
  110.  * returns the head of the list (which may have changed)
  111.  */
  112. XList * xlist_remove (XList * list, XList * node);
  113. /**
  114.  * Query the number of items in a list
  115.  * param list the list
  116.  * returns the number of nodes in the list
  117.  */
  118. int xlist_length (XList * list);
  119. /**
  120.  * Query if a list is empty, ie. contains no items
  121.  * param list the list
  122.  * returns 1 if the list is empty, 0 otherwise
  123.  */
  124. int xlist_is_empty (XList * list);
  125. /**
  126.  * Query if the list is singleton, ie. contains exactly one item
  127.  * param list the list
  128.  * returns 1 if the list is singleton, 0 otherwise
  129.  */
  130. int xlist_is_singleton (XList * list);
  131. /**
  132.  * Free a list, using a given function to free each data element
  133.  * param list the list
  134.  * param free_func a function to free each data element
  135.  * returns NULL on success
  136.  */
  137. XList * xlist_free_with (XList * list, XFreeFunc free_func);
  138. /**
  139.  * Free a list, using anx_free() to free each data element
  140.  * param list the list
  141.  * returns NULL on success
  142.  */
  143. XList * xlist_free (XList * list);
  144. #endif /* __XLIST__ */