Eevee: TAA: Remove 32 sample limit.
[blender.git] / source / blender / makesrna / intern / rna_test.c
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Arystanbek Dyussenov
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/makesrna/intern/rna_test.c
24  *  \ingroup RNA
25  */
26
27
28 /* Defines a structure with properties used for array manipulation tests in BPY. */
29
30 #include <stdlib.h>
31 #include <string.h>
32
33 #include "RNA_define.h"
34
35 #include "rna_internal.h"
36
37 #ifdef RNA_RUNTIME
38
39 #ifdef ARRAY_SIZE
40 #  undef ARRAY_SIZE
41 #endif
42
43 #define ARRAY_SIZE 3
44 #define DYNAMIC_ARRAY_SIZE 64
45 #define MARRAY_DIM [3][4][5]
46 #define MARRAY_TOTDIM 3
47 #define MARRAY_DIMSIZE 4, 5
48 #define MARRAY_SIZE(type) (sizeof(type MARRAY_DIM) / sizeof(type))
49 #define DYNAMIC_MARRAY_DIM [3][4][5]
50 #define DYNAMIC_MARRAY_SIZE(type) (sizeof(type DYNAMIC_MARRAY_DIM) / sizeof(type))
51
52 #ifdef UNIT_TEST
53
54 #define DEF_VARS(type, prefix)                                \
55     static type prefix ## arr[ARRAY_SIZE];                    \
56     static type prefix ## darr[DYNAMIC_ARRAY_SIZE];           \
57     static int prefix ## darr_len = ARRAY_SIZE;               \
58     static type prefix ## marr MARRAY_DIM;                    \
59     static type prefix ## dmarr DYNAMIC_MARRAY_DIM;           \
60     static int prefix ## dmarr_len = sizeof(prefix ## dmarr); \
61     (void)0
62
63 #define DEF_GET_SET(type, arr)                                          \
64         void rna_Test_ ## arr ## _get(PointerRNA *ptr, type * values)       \
65         {                                                                   \
66                 memcpy(values, arr, sizeof(arr));                               \
67         }                                                                   \
68                                                                             \
69         void rna_Test_ ## arr ## _set(PointerRNA *ptr, const type * values) \
70         {                                                                   \
71                 memcpy(arr, values, sizeof(arr));                               \
72         }                                                                   \
73         ((void)0)
74
75 #define DEF_GET_SET_LEN(arr, max)                                       \
76         static int rna_Test_ ## arr ## _get_length(PointerRNA * ptr)        \
77         {                                                                   \
78                 return arr ## _len;                                             \
79         }                                                                   \
80                                                                             \
81         static int rna_Test_ ## arr ## _set_length(PointerRNA *ptr, int length) \
82         {                                                                   \
83                 if (length > max)                                               \
84                         return 0;                                                   \
85                                                                                 \
86                 arr ## _len = length;                                           \
87                                                                                 \
88                 return 1;                                                       \
89         }                                                                   \
90         ((void)0)
91
92 DEF_VARS(float, f);
93 DEF_VARS(int, i);
94 DEF_VARS(int, b);
95
96 DEF_GET_SET(float, farr);
97 DEF_GET_SET(int, iarr);
98 DEF_GET_SET(int, barr);
99
100 DEF_GET_SET(float, fmarr);
101 DEF_GET_SET(int, imarr);
102 DEF_GET_SET(int, bmarr);
103
104 DEF_GET_SET(float, fdarr);
105 DEF_GET_SET_LEN(fdarr, DYNAMIC_ARRAY_SIZE);
106 DEF_GET_SET(int, idarr);
107 DEF_GET_SET_LEN(idarr, DYNAMIC_ARRAY_SIZE);
108 DEF_GET_SET(int, bdarr);
109 DEF_GET_SET_LEN(bdarr, DYNAMIC_ARRAY_SIZE);
110
111 DEF_GET_SET(float, fdmarr);
112 DEF_GET_SET_LEN(fdmarr, DYNAMIC_MARRAY_SIZE(float));
113 DEF_GET_SET(int, idmarr);
114 DEF_GET_SET_LEN(idmarr, DYNAMIC_MARRAY_SIZE(int));
115 DEF_GET_SET(int, bdmarr);
116 DEF_GET_SET_LEN(bdmarr, DYNAMIC_MARRAY_SIZE(int));
117
118 #endif
119
120 #else
121
122 void RNA_def_test(BlenderRNA *brna)
123 {
124 #ifdef UNIT_TEST
125         StructRNA *srna;
126         PropertyRNA *prop;
127         unsigned short dimsize[] = {MARRAY_DIMSIZE};
128
129         srna = RNA_def_struct(brna, "Test", NULL);
130         RNA_def_struct_sdna(srna, "Test");
131
132         prop = RNA_def_float_array(srna, "farr", ARRAY_SIZE, NULL, 0.0f, 0.0f, "farr", "float array", 0.0f, 0.0f);
133         RNA_def_property_float_funcs(prop, "rna_Test_farr_get", "rna_Test_farr_set", NULL);
134
135         prop = RNA_def_int_array(srna, "iarr", ARRAY_SIZE, NULL, 0, 0, "iarr", "int array", 0, 0);
136         RNA_def_property_int_funcs(prop, "rna_Test_iarr_get", "rna_Test_iarr_set", NULL);
137
138         prop = RNA_def_boolean_array(srna, "barr", ARRAY_SIZE, NULL, "barr", "boolean array");
139         RNA_def_property_boolean_funcs(prop, "rna_Test_barr_get", "rna_Test_barr_set");
140
141         /* dynamic arrays */
142
143         prop = RNA_def_float_array(srna, "fdarr", DYNAMIC_ARRAY_SIZE, NULL, 0.0f, 0.0f, "fdarr",
144                                    "dynamic float array", 0.0f, 0.0f);
145         RNA_def_property_flag(prop, PROP_DYNAMIC);
146         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_fdarr_get_length", "rna_Test_fdarr_set_length");
147         RNA_def_property_float_funcs(prop, "rna_Test_fdarr_get", "rna_Test_fdarr_set", NULL);
148
149         prop = RNA_def_int_array(srna, "idarr", DYNAMIC_ARRAY_SIZE, NULL, 0, 0, "idarr", "int array", 0, 0);
150         RNA_def_property_flag(prop, PROP_DYNAMIC);
151         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_idarr_get_length", "rna_Test_idarr_set_length");
152         RNA_def_property_int_funcs(prop, "rna_Test_idarr_get", "rna_Test_idarr_set", NULL);
153         
154         prop = RNA_def_boolean_array(srna, "bdarr", DYNAMIC_ARRAY_SIZE, NULL, "bdarr", "boolean array");
155         RNA_def_property_flag(prop, PROP_DYNAMIC);
156         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_bdarr_get_length", "rna_Test_bdarr_set_length");
157         RNA_def_property_boolean_funcs(prop, "rna_Test_bdarr_get", "rna_Test_bdarr_set");
158
159         /* multidimensional arrays */
160
161         prop = RNA_def_property(srna, "fmarr", PROP_FLOAT, PROP_NONE);
162         RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(float), MARRAY_TOTDIM, dimsize);
163         RNA_def_property_float_funcs(prop, "rna_Test_fmarr_get", "rna_Test_fmarr_set", NULL);
164
165         prop = RNA_def_property(srna, "imarr", PROP_INT, PROP_NONE);
166         RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
167         RNA_def_property_int_funcs(prop, "rna_Test_imarr_get", "rna_Test_imarr_set", NULL);
168
169         prop = RNA_def_property(srna, "bmarr", PROP_BOOLEAN, PROP_NONE);
170         RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
171         RNA_def_property_boolean_funcs(prop, "rna_Test_bmarr_get", "rna_Test_bmarr_set");
172
173         /* dynamic multidimensional arrays */
174
175         prop = RNA_def_property(srna, "fdmarr", PROP_FLOAT, PROP_NONE);
176         RNA_def_property_multidimensional_array(prop, DYNAMIC_MARRAY_SIZE(float), MARRAY_TOTDIM, dimsize);
177         RNA_def_property_flag(prop, PROP_DYNAMIC);
178         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_fdmarr_get_length", "rna_Test_fdmarr_set_length");
179         RNA_def_property_float_funcs(prop, "rna_Test_fdmarr_get", "rna_Test_fdmarr_set", NULL);
180
181         prop = RNA_def_property(srna, "idmarr", PROP_INT, PROP_NONE);
182         RNA_def_property_multidimensional_array(prop, DYNAMIC_MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
183         RNA_def_property_flag(prop, PROP_DYNAMIC);
184         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_idmarr_get_length", "rna_Test_idmarr_set_length");
185         RNA_def_property_int_funcs(prop, "rna_Test_idmarr_get", "rna_Test_idmarr_set", NULL);
186
187         prop = RNA_def_property(srna, "bdmarr", PROP_BOOLEAN, PROP_NONE);
188         RNA_def_property_multidimensional_array(prop, DYNAMIC_MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
189         RNA_def_property_flag(prop, PROP_DYNAMIC);
190         RNA_def_property_dynamic_array_funcs(prop, "rna_Test_bdmarr_get_length", "rna_Test_bdmarr_set_length");
191         RNA_def_property_boolean_funcs(prop, "rna_Test_bdmarr_get", "rna_Test_bdmarr_set");
192 #else
193         (void)brna;
194 #endif
195 }
196
197 #endif  /* RNA_RUNTIME */