[Bf-blender-cvs] [3901ae2cb76] functions: init defaults in tuple

Jacques Lucke noreply at git.blender.org
Mon Feb 25 10:30:54 CET 2019


Commit: 3901ae2cb76429dbef1563e5fb4d0c6308b66d60
Author: Jacques Lucke
Date:   Fri Feb 22 15:42:32 2019 +0100
Branches: functions
https://developer.blender.org/rB3901ae2cb76429dbef1563e5fb4d0c6308b66d60

init defaults in tuple

===================================================================

M	source/blender/blenkernel/intern/fcurve.c
M	source/blender/functions/core/cpu.cpp
M	source/blender/functions/core/cpu.hpp

===================================================================

diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index d7ed30bf06b..bbdebf22c04 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -1623,7 +1623,7 @@ static float dvar_eval_function(ChannelDriver *UNUSED(driver), DriverVar *dvar)
 
 	FnTuple fn_in = FN_tuple_for_input(fn);
 	FnTuple fn_out = FN_tuple_for_output(fn);
-	FN_tuple_set_int32(fn_in, 0, (int32_t)dvar);
+	FN_tuple_set_int32(fn_in, 0, (int64_t)dvar);
 	FnTupleCallBody callable = FN_function_get_callable(fn);
 
 	FN_function_call(callable, fn_in, fn_out);
diff --git a/source/blender/functions/core/cpu.cpp b/source/blender/functions/core/cpu.cpp
index 04b783cfcd6..6d670060662 100644
--- a/source/blender/functions/core/cpu.cpp
+++ b/source/blender/functions/core/cpu.cpp
@@ -13,6 +13,11 @@ namespace FN {
 		delete v;
 	}
 
+	void TupleCallBody::init_defaults(Tuple &fn_in) const
+	{
+		fn_in.init_default_all();
+	}
+
 
 	const char *CPPTypeInfo::identifier_in_composition()
 	{
diff --git a/source/blender/functions/core/cpu.hpp b/source/blender/functions/core/cpu.hpp
index 1c45ae638ba..ff9b283067e 100644
--- a/source/blender/functions/core/cpu.hpp
+++ b/source/blender/functions/core/cpu.hpp
@@ -18,6 +18,7 @@ namespace FN {
 
 		virtual void call(const Tuple &fn_in, Tuple &fn_out) const = 0;
 		virtual void dependencies(Dependencies &UNUSED(deps)) const {}
+		virtual void init_defaults(Tuple &fn_in) const;
 	};
 
 	class CPPTypeInfo {
@@ -28,6 +29,7 @@ namespace FN {
 		virtual ~CPPTypeInfo() {};
 
 		virtual uint size_of_type() const = 0;
+		virtual void construct_default(void *ptr) const = 0;
 		virtual void destruct_type(void *ptr) const = 0;
 		virtual void copy_to_initialized(void *src, void *dst) const = 0;
 		virtual void copy_to_uninitialized(void *src, void *dst) const = 0;
@@ -41,6 +43,11 @@ namespace FN {
 			return sizeof(T);
 		}
 
+		virtual void construct_default(void *ptr) const override
+		{
+			new(ptr) T();
+		}
+
 		virtual void destruct_type(void *ptr) const override
 		{
 			T *ptr_ = (T *)ptr;
@@ -138,6 +145,19 @@ namespace FN {
 				from.element_ptr(from_index), to.element_ptr(to_index));
 		}
 
+		inline void init_default(uint index) const
+		{
+			m_type_info[index]->construct_default(this->element_ptr(index));
+			m_initialized[index] = true;
+		}
+
+		inline void init_default_all() const
+		{
+			for (uint i = 0; i < m_types.size(); i++) {
+				this->init_default(i);
+			}
+		}
+
 	private:
 		inline uint element_size(uint index) const
 		{



More information about the Bf-blender-cvs mailing list