1 /* Libvisual - The audio visualisation framework. 2 * 3 * Copyright (C) 2004, 2005, 2006 Dennis Smit <ds@nerds-incorporated.org> 4 * 5 * Authors: Dennis Smit <ds@nerds-incorporated.org> 6 * 7 * $Id: lv_collection.h,v 1.7 2006/01/22 13:23:37 synap Exp $ 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation; either version 2.1 12 * of the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 */ 23 24 #ifndef _LV_COLLECTION_H 25 #define _LV_COLLECTION_H 26 27 #include <libvisual-0.4/libvisual/lv_common.h> 28 29 VISUAL_BEGIN_DECLS 30 31 #define VISUAL_COLLECTION(obj) (VISUAL_CHECK_CAST ((obj), VisCollection)) 32 #define VISUAL_COLLECTIONITER(obj) (VISUAL_CHECK_CAST ((obj), VisCollectionIter)) 33 34 typedef struct _VisCollection VisCollection; 35 typedef struct _VisCollectionIter VisCollectionIter; 36 37 /** 38 * A VisCollection destroyer function needs this signature, these functions are used 39 * to destroy data entries within collections. 40 * 41 * @arg data The data that was stored in a collection entry and thus can be destroyed. 42 * 43 * @return FIXME blah blah blah 44 */ 45 typedef int (*VisCollectionDestroyerFunc)(void *data); 46 47 /** 48 */ 49 typedef int (*VisCollectionDestroyFunc)(VisCollection *collection); 50 51 /** 52 */ 53 typedef int (*VisCollectionSizeFunc)(VisCollection *collection); 54 55 /** 56 */ 57 typedef VisCollectionIter *(*VisCollectionIterFunc)(VisCollection *collection); 58 59 /** 60 */ 61 typedef void (*VisCollectionIterAssignFunc)(VisCollectionIter *iter, VisCollection *collection, VisObject *context, 62 int index); 63 64 /** 65 */ 66 typedef void (*VisCollectionIterNextFunc)(VisCollectionIter *iter, VisCollection *collection, VisObject *context); 67 68 /** 69 */ 70 typedef int (*VisCollectionIterHasMoreFunc)(VisCollectionIter *iter, VisCollection *collection, VisObject *context); 71 72 /** 73 */ 74 typedef void *(*VisCollectionIterGetDataFunc)(VisCollectionIter *iter, VisCollection *collection, VisObject *context); 75 76 /** 77 */ 78 struct _VisCollection { 79 VisObject object; /**< The VisObject data. */ 80 81 VisCollectionDestroyerFunc destroyer; 82 VisCollectionDestroyFunc destroyfunc; 83 VisCollectionSizeFunc sizefunc; 84 VisCollectionIterFunc iterfunc; 85 }; 86 87 /** 88 */ 89 struct _VisCollectionIter { 90 VisObject object; 91 92 VisCollectionIterAssignFunc assignfunc; 93 VisCollectionIterNextFunc nextfunc; 94 VisCollectionIterHasMoreFunc hasmorefunc; 95 VisCollectionIterGetDataFunc getdatafunc; 96 97 VisCollection *collection; 98 99 VisObject *context; 100 }; 101 102 /* prototypes */ 103 int visual_collection_set_destroyer (VisCollection *collection, VisCollectionDestroyerFunc destroyer); 104 VisCollectionDestroyerFunc visual_collection_get_destroyer (VisCollection *collection); 105 106 int visual_collection_set_destroy_func (VisCollection *collection, VisCollectionDestroyFunc destroyfunc); 107 VisCollectionDestroyFunc visual_collection_get_destroy_func (VisCollection *collection); 108 109 int visual_collection_set_size_func (VisCollection *collection, VisCollectionSizeFunc sizefunc); 110 VisCollectionSizeFunc visual_collection_get_size_func (VisCollection *collection); 111 112 int visual_collection_set_iter_func (VisCollection *collection, VisCollectionIterFunc iterfunc); 113 VisCollectionIterFunc visual_collection_get_iter_func (VisCollection *collection); 114 115 int visual_collection_dtor (VisObject *object); 116 117 int visual_collection_destroy (VisCollection *collection); 118 int visual_collection_size (VisCollection *collection); 119 VisCollectionIter *visual_collection_get_iter (VisCollection *collection); 120 121 122 VisCollectionIter *visual_collection_iter_new ( 123 VisCollectionIterAssignFunc assignfunc, VisCollectionIterNextFunc nextfunc, 124 VisCollectionIterHasMoreFunc hasmorefunc, VisCollectionIterGetDataFunc getdatafunc, 125 VisCollection *collection, VisObject *context); 126 int visual_collection_iter_init (VisCollectionIter *iter, 127 VisCollectionIterAssignFunc assignfunc, VisCollectionIterNextFunc nextfunc, 128 VisCollectionIterHasMoreFunc hasmorefunc, VisCollectionIterGetDataFunc getdatafunc, 129 VisCollection *collection, VisObject *context); 130 131 void visual_collection_iter_assign (VisCollectionIter *iter, int index); 132 void visual_collection_iter_next (VisCollectionIter *iter); 133 int visual_collection_iter_has_more (VisCollectionIter *iter); 134 void *visual_collection_iter_get_data (VisCollectionIter *iter); 135 136 VISUAL_END_DECLS 137 138 #endif /* _LV_COLLECTION_H */ 139