RNA
[blender.git] / source / blender / makesrna / intern / rna_internal.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): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #ifndef RNA_INTERNAL_H
26 #define RNA_INTERNAL_H
27
28 struct StructRNA;
29 struct PropertyRNA;
30 struct SDNA;
31 struct ListBase;
32
33 /* Data structures used during define */
34
35 typedef struct PropertyDefRNA {
36         struct PropertyDefRNA *next, *prev;
37
38         struct StructRNA *srna;
39         struct PropertyRNA *prop;
40
41         const char *dnastructname;
42         const char *dnaname;
43         const char *dnalengthstructname;
44         const char *dnalengthname;
45         const char *dnatype;
46         int dnaarraylength;
47
48         int booleanbit;
49 } PropertyDefRNA;
50
51 typedef struct StructDefRNA {
52         struct StructDefRNA *next, *prev;
53
54         struct StructRNA *srna;
55
56         const char *dnaname;
57         ListBase properties;
58 } StructDefRNA;
59
60 typedef struct AllocDefRNA {
61         struct AllocDefRNA *next, *prev;
62         void *mem;
63 } AllocDefRNA;
64
65 typedef struct BlenderDefRNA {
66         struct SDNA *sdna;
67         ListBase structs;
68         ListBase allocs;
69         int error, silent;
70 } BlenderDefRNA;
71
72 extern BlenderDefRNA DefRNA;
73
74 /* Define functions for all types */
75
76 extern StructRNA RNA_Main;
77 extern StructRNA RNA_Mesh;
78 extern StructRNA RNA_Object;
79 extern StructRNA RNA_Scene;
80
81 void RNA_def_ID(struct StructRNA *srna);
82
83 void RNA_def_main(struct BlenderRNA *brna);
84 void RNA_def_mesh(struct BlenderRNA *brna);
85 void RNA_def_object(struct BlenderRNA *brna);
86 void RNA_def_scene(struct BlenderRNA *brna);
87
88 /* Standard iterator functions */
89
90 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb);
91 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
92 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
93
94 typedef struct ArrayIterator {
95         char *ptr;
96         char *endptr;
97         int itemsize;
98 } ArrayIterator;
99
100 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length);
101 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
102 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
103 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
104
105 /* Duplicated code since we can't link in blenlib */
106
107 void rna_addtail(struct ListBase *listbase, void *vlink);
108 void rna_freelistN(struct ListBase *listbase);
109
110 #endif /* RNA_INTERNAL_H */
111