Files
test/source/blender/makesrna/intern/rna_test.cc
Campbell Barton e955c94ed3 License Headers: Set copyright to "Blender Authors", add AUTHORS
Listing the "Blender Foundation" as copyright holder implied the Blender
Foundation holds copyright to files which may include work from many
developers.

While keeping copyright on headers makes sense for isolated libraries,
Blender's own code may be refactored or moved between files in a way
that makes the per file copyright holders less meaningful.

Copyright references to the "Blender Foundation" have been replaced with
"Blender Authors", with the exception of `./extern/` since these this
contains libraries which are more isolated, any changed to license
headers there can be handled on a case-by-case basis.

Some directories in `./intern/` have also been excluded:

- `./intern/cycles/` it's own `AUTHORS` file is planned.
- `./intern/opensubdiv/`.

An "AUTHORS" file has been added, using the chromium projects authors
file as a template.

Design task: #110784

Ref !110783.
2023-08-16 00:20:26 +10:00

197 lines
6.6 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup RNA
*/
/* Defines a structure with properties used for array manipulation tests in BPY. */
#include <cstdlib>
#include <cstring>
#include "RNA_define.hh"
#include "rna_internal.h"
#ifdef RNA_RUNTIME
# ifdef ARRAY_SIZE
# undef ARRAY_SIZE
# endif
# define ARRAY_SIZE 3
# define DYNAMIC_ARRAY_SIZE 64
# define MARRAY_DIM [3][4][5]
# define MARRAY_TOTDIM 3
# define MARRAY_DIMSIZE 4, 5
# define MARRAY_SIZE(type) (sizeof(type MARRAY_DIM) / sizeof(type))
# define DYNAMIC_MARRAY_DIM [3][4][5]
# define DYNAMIC_MARRAY_SIZE(type) (sizeof(type DYNAMIC_MARRAY_DIM) / sizeof(type))
# ifdef UNIT_TEST
# define DEF_VARS(type, prefix) \
static type prefix##arr[ARRAY_SIZE]; \
static type prefix##darr[DYNAMIC_ARRAY_SIZE]; \
static int prefix##darr_len = ARRAY_SIZE; \
static type prefix##marr MARRAY_DIM; \
static type prefix##dmarr DYNAMIC_MARRAY_DIM; \
static int prefix##dmarr_len = sizeof(prefix##dmarr); \
(void)0
# define DEF_GET_SET(type, arr) \
void rna_Test_##arr##_get(PointerRNA *ptr, type *values) \
{ \
memcpy(values, arr, sizeof(arr)); \
} \
\
void rna_Test_##arr##_set(PointerRNA *ptr, const type *values) \
{ \
memcpy(arr, values, sizeof(arr)); \
} \
((void)0)
# define DEF_GET_SET_LEN(arr, max) \
static int rna_Test_##arr##_get_length(PointerRNA *ptr) \
{ \
return arr##_len; \
} \
\
static int rna_Test_##arr##_set_length(PointerRNA *ptr, int length) \
{ \
if (length > max) { \
return 0; \
} \
arr##_len = length; \
\
return 1; \
} \
((void)0)
DEF_VARS(float, f);
DEF_VARS(int, i);
DEF_VARS(int, b);
DEF_GET_SET(float, farr);
DEF_GET_SET(int, iarr);
DEF_GET_SET(int, barr);
DEF_GET_SET(float, fmarr);
DEF_GET_SET(int, imarr);
DEF_GET_SET(int, bmarr);
DEF_GET_SET(float, fdarr);
DEF_GET_SET_LEN(fdarr, DYNAMIC_ARRAY_SIZE);
DEF_GET_SET(int, idarr);
DEF_GET_SET_LEN(idarr, DYNAMIC_ARRAY_SIZE);
DEF_GET_SET(int, bdarr);
DEF_GET_SET_LEN(bdarr, DYNAMIC_ARRAY_SIZE);
DEF_GET_SET(float, fdmarr);
DEF_GET_SET_LEN(fdmarr, DYNAMIC_MARRAY_SIZE(float));
DEF_GET_SET(int, idmarr);
DEF_GET_SET_LEN(idmarr, DYNAMIC_MARRAY_SIZE(int));
DEF_GET_SET(int, bdmarr);
DEF_GET_SET_LEN(bdmarr, DYNAMIC_MARRAY_SIZE(int));
# endif
#else
void RNA_def_test(BlenderRNA *brna)
{
# ifdef UNIT_TEST
StructRNA *srna;
PropertyRNA *prop;
ushort dimsize[] = {MARRAY_DIMSIZE};
srna = RNA_def_struct(brna, "Test", nullptr);
RNA_def_struct_sdna(srna, "Test");
prop = RNA_def_float_array(
srna, "farr", ARRAY_SIZE, nullptr, 0.0f, 0.0f, "farr", "float array", 0.0f, 0.0f);
RNA_def_property_float_funcs(prop, "rna_Test_farr_get", "rna_Test_farr_set", nullptr);
prop = RNA_def_int_array(srna, "iarr", ARRAY_SIZE, nullptr, 0, 0, "iarr", "int array", 0, 0);
RNA_def_property_int_funcs(prop, "rna_Test_iarr_get", "rna_Test_iarr_set", nullptr);
prop = RNA_def_boolean_array(srna, "barr", ARRAY_SIZE, nullptr, "barr", "boolean array");
RNA_def_property_boolean_funcs(prop, "rna_Test_barr_get", "rna_Test_barr_set");
/* dynamic arrays */
prop = RNA_def_float_array(srna,
"fdarr",
DYNAMIC_ARRAY_SIZE,
nullptr,
0.0f,
0.0f,
"fdarr",
"dynamic float array",
0.0f,
0.0f);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_fdarr_get_length", "rna_Test_fdarr_set_length");
RNA_def_property_float_funcs(prop, "rna_Test_fdarr_get", "rna_Test_fdarr_set", nullptr);
prop = RNA_def_int_array(
srna, "idarr", DYNAMIC_ARRAY_SIZE, nullptr, 0, 0, "idarr", "int array", 0, 0);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_idarr_get_length", "rna_Test_idarr_set_length");
RNA_def_property_int_funcs(prop, "rna_Test_idarr_get", "rna_Test_idarr_set", nullptr);
prop = RNA_def_boolean_array(
srna, "bdarr", DYNAMIC_ARRAY_SIZE, nullptr, "bdarr", "boolean array");
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_bdarr_get_length", "rna_Test_bdarr_set_length");
RNA_def_property_boolean_funcs(prop, "rna_Test_bdarr_get", "rna_Test_bdarr_set");
/* multidimensional arrays */
prop = RNA_def_property(srna, "fmarr", PROP_FLOAT, PROP_NONE);
RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(float), MARRAY_TOTDIM, dimsize);
RNA_def_property_float_funcs(prop, "rna_Test_fmarr_get", "rna_Test_fmarr_set", nullptr);
prop = RNA_def_property(srna, "imarr", PROP_INT, PROP_NONE);
RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
RNA_def_property_int_funcs(prop, "rna_Test_imarr_get", "rna_Test_imarr_set", nullptr);
prop = RNA_def_property(srna, "bmarr", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_multidimensional_array(prop, MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
RNA_def_property_boolean_funcs(prop, "rna_Test_bmarr_get", "rna_Test_bmarr_set");
/* dynamic multidimensional arrays */
prop = RNA_def_property(srna, "fdmarr", PROP_FLOAT, PROP_NONE);
RNA_def_property_multidimensional_array(
prop, DYNAMIC_MARRAY_SIZE(float), MARRAY_TOTDIM, dimsize);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_fdmarr_get_length", "rna_Test_fdmarr_set_length");
RNA_def_property_float_funcs(prop, "rna_Test_fdmarr_get", "rna_Test_fdmarr_set", nullptr);
prop = RNA_def_property(srna, "idmarr", PROP_INT, PROP_NONE);
RNA_def_property_multidimensional_array(prop, DYNAMIC_MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_idmarr_get_length", "rna_Test_idmarr_set_length");
RNA_def_property_int_funcs(prop, "rna_Test_idmarr_get", "rna_Test_idmarr_set", nullptr);
prop = RNA_def_property(srna, "bdmarr", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_multidimensional_array(prop, DYNAMIC_MARRAY_SIZE(int), MARRAY_TOTDIM, dimsize);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_Test_bdmarr_get_length", "rna_Test_bdmarr_set_length");
RNA_def_property_boolean_funcs(prop, "rna_Test_bdmarr_get", "rna_Test_bdmarr_set");
# else
(void)brna;
# endif
}
#endif /* RNA_RUNTIME */