copying 2.5 over to trunk
[blender-staging.git] / source / blender / blenlib / BLI_dynamiclist.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA        02111-1307, USA.
19  *
20  * Contributor(s): Jiri Hnidek.
21  *
22  * Documentation of Two way dynamic list with access array can be found at:
23  *
24  * http://wiki.blender.org/bin/view.pl/Blenderwiki/DynamicListWithAccessArray
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifndef BLI_DYNAMIC_LIST_H
30 #define BLI_DYNAMIC_LIST_H
31
32 #include "DNA_listBase.h"
33
34 /*
35  * Access array using realloc 
36  */
37 typedef struct DynamicArray{
38         unsigned int count;             /* count of items in list */
39         unsigned int max_item_index;    /* max available index */
40         unsigned int last_item_index;   /* max used index */
41         void **items;                   /* dynamicaly allocated array of pointers
42                                            pointing at items in list */
43 } DynamicArray;
44
45 /*
46  * Two way dynamic list with access array
47  */
48 typedef struct DynamicList {
49         struct DynamicArray da;         /* access array */
50         struct ListBase lb;             /* two way linked dynamic list */
51 } DynamicList;
52
53 /* note: 'index' is a string.h function, do not use in includes */
54 struct DynamicList *BLI_dlist_from_listbase(struct ListBase *);
55 struct ListBase *BLI_listbase_from_dlist(struct DynamicList *, struct ListBase *);
56 void * BLI_dlist_find_link(struct DynamicList *, unsigned int);
57 unsigned int BLI_count_items(struct DynamicList *);
58 void BLI_dlist_free_item(struct DynamicList *, unsigned int);
59 void BLI_dlist_rem_item(struct DynamicList *, unsigned int);
60 void * BLI_dlist_add_item_index(struct DynamicList *, void *, unsigned int);
61 void BLI_dlist_destroy(struct DynamicList *);
62 void BLI_dlist_init(struct DynamicList *);
63 void BLI_dlist_reinit(struct DynamicList *);
64
65 #endif