[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