Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_genfile.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup DNA
21  *  \brief blenloader genfile private function prototypes
22  */
23
24 #ifndef __DNA_GENFILE_H__
25 #define __DNA_GENFILE_H__
26
27 struct SDNA;
28
29 /**
30  * DNAstr contains the prebuilt SDNA structure defining the layouts of the types
31  * used by this version of Blender. It is defined in a file dna.c, which is
32  * generated by the makesdna program during the build process (see makesdna.c).
33  */
34 extern const unsigned char DNAstr[];
35 /** Length of DNAstr. */
36 extern const int DNAlen;
37
38 /**
39  * Primitive (non-struct, non-pointer/function/array) types,
40  * \warning Don't change these values!
41  * Currently changes here here will work on native endianness,
42  * however #DNA_struct_switch_endian currently checks these
43  * hard-coded values against those from old files.
44  */
45 typedef enum eSDNA_Type {
46         SDNA_TYPE_CHAR     = 0,
47         SDNA_TYPE_UCHAR    = 1,
48         SDNA_TYPE_SHORT    = 2,
49         SDNA_TYPE_USHORT   = 3,
50         SDNA_TYPE_INT      = 4,
51         /* SDNA_TYPE_LONG     = 5, */  /* deprecated (use as int) */
52         /* SDNA_TYPE_ULONG    = 6, */  /* deprecated (use as int) */
53         SDNA_TYPE_FLOAT    = 7,
54         SDNA_TYPE_DOUBLE   = 8,
55         /* ,SDNA_TYPE_VOID = 9 */
56 /* define so switch statements don't complain */
57 #define SDNA_TYPE_VOID 9
58         SDNA_TYPE_INT64    = 10,
59         SDNA_TYPE_UINT64   = 11,
60 } eSDNA_Type;
61
62 /**
63  * For use with #DNA_struct_reconstruct & #DNA_struct_get_compareflags
64  */
65 enum eSDNA_StructCompare {
66         /* Struct has disappeared
67          * (values of this struct type will not be loaded by the current Blender) */
68         SDNA_CMP_REMOVED    = 0,
69         /* Struct is the same
70          * (can be loaded with straight memory copy after any necessary endian conversion) */
71         SDNA_CMP_EQUAL      = 1,
72         /* Struct is different in some way
73          * (needs to be copied/converted field by field) */
74         SDNA_CMP_NOT_EQUAL  = 2,
75 };
76
77 struct SDNA *DNA_sdna_from_data(
78         const void *data, const int datalen,
79         bool do_endian_swap, bool data_alloc,
80         const char **r_error_message);
81 void DNA_sdna_free(struct SDNA *sdna);
82
83 /* Access for current Blender versions SDNA*/
84 void               DNA_sdna_current_init(void);
85 /* borrowed reference */
86 const struct SDNA *DNA_sdna_current_get(void);
87 void               DNA_sdna_current_free(void);
88
89 int DNA_struct_find_nr_ex(const struct SDNA *sdna, const char *str, unsigned int *index_last);
90 int DNA_struct_find_nr(const struct SDNA *sdna, const char *str);
91 void DNA_struct_switch_endian(const struct SDNA *oldsdna, int oldSDNAnr, char *data);
92 const char *DNA_struct_get_compareflags(const struct SDNA *sdna, const struct SDNA *newsdna);
93 void *DNA_struct_reconstruct(
94         const struct SDNA *newsdna, const struct SDNA *oldsdna,
95         const char *compflags, int oldSDNAnr, int blocks, const void *data);
96
97 int DNA_elem_array_size(const char *str);
98 int DNA_elem_offset(struct SDNA *sdna, const char *stype, const char *vartype, const char *name);
99
100 bool DNA_struct_find(const struct SDNA *sdna, const char *stype);
101 bool DNA_struct_elem_find(const struct SDNA *sdna, const char *stype, const char *vartype, const char *name);
102
103
104 int DNA_elem_type_size(const eSDNA_Type elem_nr);
105
106 #endif /* __DNA_GENFILE_H__ */