1 /* 2 Copyright (C) 2005, 2008, 2017 Rocky Bernstein <rocky@gnu.org> 3 Copyright (C) 2000, 2004 Herbert Valerio Riedel <hvr@gnu.org> 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 /** \file ds.h 20 * \brief The top-level header for list-related data structures. 21 22 Note: this header will is slated to get removed and libcdio will use 23 glib.h routines instead. 24 */ 25 26 27 #ifndef CDIO_DS_H_ 28 #define CDIO_DS_H_ 29 30 #include <cdio/types.h> 31 32 /** opaque types... */ 33 typedef struct _CdioList CdioList_t; 34 typedef struct _CdioListNode CdioListNode_t; 35 36 typedef int (*_cdio_list_cmp_func_t) (void *p_data1, void *p_data2); 37 typedef int (*_cdio_list_iterfunc_t) (void *p_data, void *p_user_data); 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif /* __cplusplus */ 42 43 /** methods */ 44 CdioList_t *_cdio_list_new (void); 45 46 void _cdio_list_free (CdioList_t *p_list, int free_data, CdioDataFree_t free_fn); 47 48 unsigned _cdio_list_length (const CdioList_t *list); 49 50 void _cdio_list_prepend (CdioList_t *p_list, void *p_data); 51 52 void _cdio_list_append (CdioList_t *p_list, void *p_data); 53 54 void _cdio_list_foreach (CdioList_t *p_list, _cdio_list_iterfunc_t func, 55 void *p_user_data); 56 57 CdioListNode_t *_cdio_list_find (CdioList_t *p_list, 58 _cdio_list_iterfunc_t cmp_func, 59 void *p_user_data); 60 61 #define _CDIO_LIST_FOREACH(node, list) \ 62 for (node = _cdio_list_begin (list); node; node = _cdio_list_node_next (node)) 63 64 /** node operations */ 65 66 CdioListNode_t *_cdio_list_begin (const CdioList_t *p_list); 67 68 CdioListNode_t *_cdio_list_end (CdioList_t *p_list); 69 70 CdioListNode_t *_cdio_list_node_next (CdioListNode_t *p_node); 71 72 void _cdio_list_node_free (CdioListNode_t *p_node, int i_free_data, 73 CdioDataFree_t free_fn); 74 75 void *_cdio_list_node_data (CdioListNode_t *p_node); 76 77 #ifdef __cplusplus 78 } 79 #endif /* __cplusplus */ 80 81 #endif /* CDIO_DS_H_ */ 82 83 /* 84 * Local variables: 85 * c-file-style: "gnu" 86 * tab-width: 8 87 * indent-tabs-mode: nil 88 * End: 89 */ 90