[Bf-blender-cvs] [144a90688cb] functions: better lazy init macro
Jacques Lucke
noreply at git.blender.org
Tue Feb 19 19:28:44 CET 2019
Commit: 144a90688cbcb225431079ae787e993a52f8c499
Author: Jacques Lucke
Date: Tue Feb 19 17:54:00 2019 +0100
Branches: functions
https://developer.blender.org/rB144a90688cbcb225431079ae787e993a52f8c499
better lazy init macro
===================================================================
M source/blender/blenlib/BLI_lazy_init.hpp
M source/blender/functions/c_wrapper.cpp
M source/blender/functions/types/numeric.cpp
===================================================================
diff --git a/source/blender/blenlib/BLI_lazy_init.hpp b/source/blender/blenlib/BLI_lazy_init.hpp
index 654674fa1c1..1e7cb9af72f 100644
--- a/source/blender/blenlib/BLI_lazy_init.hpp
+++ b/source/blender/blenlib/BLI_lazy_init.hpp
@@ -1,9 +1,18 @@
-#define LAZY_INIT_NO_ARG(final_ret_type, builder_ret_type, func_name) \
+#define LAZY_INIT__NO_ARG(final_ret_type, builder_ret_type, func_name) \
static builder_ret_type func_name##_impl(void); \
- final_ret_type func_name(void); \
final_ret_type func_name(void) \
{ \
static builder_ret_type value = func_name##_impl(); \
return value; \
} \
builder_ret_type func_name##_impl(void)
+
+#define LAZY_INIT_STATIC__NO_ARG(final_ret_type, builder_ret_type, func_name) \
+ static final_ret_type func_name(void); \
+ LAZY_INIT__NO_ARG(final_ret_type, builder_ret_type, func_name)
+
+#define LAZY_INIT_REF__NO_ARG(type, func_name) \
+ LAZY_INIT__NO_ARG(type &, type, func_name)
+
+#define LAZY_INIT_REF_STATIC__NO_ARG(type, func_name) \
+ LAZY_INIT_STATIC__NO_ARG(type &, type, func_name)
diff --git a/source/blender/functions/c_wrapper.cpp b/source/blender/functions/c_wrapper.cpp
index 6f227a5d4aa..4ecf404571c 100644
--- a/source/blender/functions/c_wrapper.cpp
+++ b/source/blender/functions/c_wrapper.cpp
@@ -240,7 +240,7 @@ class GetFloatListElement : public FN::TupleCallBody {
}
};
-LAZY_INIT_NO_ARG(FN::SharedFunction&, FN::SharedFunction, get__get_float_list_element)
+LAZY_INIT_REF_STATIC__NO_ARG(FN::SharedFunction, get__get_float_list_element)
{
auto signature = FN::Signature({
FN::InputParameter("List", FN::Types::get_float_list_type()),
diff --git a/source/blender/functions/types/numeric.cpp b/source/blender/functions/types/numeric.cpp
index b3b4ac231e0..fbf7045c2f4 100644
--- a/source/blender/functions/types/numeric.cpp
+++ b/source/blender/functions/types/numeric.cpp
@@ -3,33 +3,28 @@
namespace FN { namespace Types {
-
- struct Vector {
- float x, y, z;
- };
-
- LAZY_INIT_NO_ARG(SharedType&, SharedType, get_float_type)
+ LAZY_INIT_REF__NO_ARG(SharedType, get_float_type)
{
SharedType type = SharedType::New("Float");
type->extend(new CPPTypeInfoForType<float>());
return type;
}
- LAZY_INIT_NO_ARG(SharedType&, SharedType, get_int32_type)
+ LAZY_INIT_REF__NO_ARG(SharedType, get_int32_type)
{
SharedType type = SharedType::New("Int32");
type->extend(new CPPTypeInfoForType<int32_t>());
return type;
}
- LAZY_INIT_NO_ARG(SharedType&, SharedType, get_fvec3_type)
+ LAZY_INIT_REF__NO_ARG(SharedType, get_fvec3_type)
{
SharedType type = SharedType::New("FloatVector3D");
type->extend(new CPPTypeInfoForType<Vector>());
return type;
}
- LAZY_INIT_NO_ARG(SharedType &, SharedType, get_float_list_type)
+ LAZY_INIT_REF__NO_ARG(SharedType, get_float_list_type)
{
SharedType type = SharedType::New("Float List");
type->extend(new CPPTypeInfoForType<SmallVector<float>>());
More information about the Bf-blender-cvs
mailing list