[Bf-blender-cvs] [252e46a3464] functions: input and output parameter class

Jacques Lucke noreply at git.blender.org
Sun Feb 10 20:25:54 CET 2019


Commit: 252e46a34640a878adead46fc062ac9da4ab9a69
Author: Jacques Lucke
Date:   Mon Feb 4 13:53:29 2019 +0100
Branches: functions
https://developer.blender.org/rB252e46a34640a878adead46fc062ac9da4ab9a69

input and output parameter class

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

M	source/blender/functions/c_wrapper.cpp
M	source/blender/functions/core/core.hpp
M	source/blender/functions/core/data_flow_graph.cpp

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

diff --git a/source/blender/functions/c_wrapper.cpp b/source/blender/functions/c_wrapper.cpp
index 3449cf07a59..c7823794410 100644
--- a/source/blender/functions/c_wrapper.cpp
+++ b/source/blender/functions/c_wrapper.cpp
@@ -23,13 +23,13 @@ FnCallable FN_function_get_callable(FnFunction fn)
 
 FnTuple FN_tuple_for_input(FnFunction fn)
 {
-	auto tuple = new FN::Tuple(unwrap(fn)->signature().inputs());
+	auto tuple = new FN::Tuple(unwrap(fn)->signature().input_types());
 	return wrap(tuple);
 }
 
 FnTuple FN_tuple_for_output(FnFunction fn)
 {
-	auto tuple = new FN::Tuple(unwrap(fn)->signature().outputs());
+	auto tuple = new FN::Tuple(unwrap(fn)->signature().output_types());
 	return wrap(tuple);
 }
 
@@ -113,8 +113,14 @@ public:
 
 FnFunction FN_get_deform_function(int type)
 {
-	FN::Signature signature({FN::Types::floatvec3d_ty, FN::Types::float_ty}, {FN::Types::floatvec3d_ty});
-	auto fn = new FN::Function(signature);
+	FN::InputParameters inputs;
+	inputs.append(FN::InputParameter("Position", FN::Types::floatvec3d_ty));
+	inputs.append(FN::InputParameter("Control", FN::Types::float_ty));
+
+	FN::OutputParameters outputs;
+	outputs.append(FN::OutputParameter("Position", FN::Types::floatvec3d_ty));
+
+	auto fn = new FN::Function(FN::Signature(inputs, outputs));
 	if (type == 0) {
 		fn->add_body(new Deform1());
 	}
diff --git a/source/blender/functions/core/core.hpp b/source/blender/functions/core/core.hpp
index eb6dc3a73e8..4c85f58be31 100644
--- a/source/blender/functions/core/core.hpp
+++ b/source/blender/functions/core/core.hpp
@@ -72,27 +72,80 @@ namespace FN {
 		Composition m_extensions;
 	};
 
+	class Parameter {
+	public:
+		Parameter(const std::string &name, const Type *type)
+			: m_type(type), m_name(name) {}
+
+		const Type *type() const
+		{
+			return this->m_type;
+		}
+
+		const std::string &name() const
+		{
+			return this->m_name;
+		}
+
+	private:
+		const Type *m_type;
+		const std::string m_name;
+	};
+
+	class InputParameter : public Parameter {
+	public:
+		InputParameter(const std::string &name, const Type *type)
+			: Parameter(name, type) {}
+	};
+
+	class OutputParameter : public Parameter {
+	public:
+		OutputParameter(const std::string &name, const Type *type)
+			: Parameter(name, type) {}
+	};
+
+	using InputParameters = SmallVector<InputParameter>;
+	using OutputParameters = SmallVector<OutputParameter>;
+
 	class Signature {
 	public:
 		Signature() = default;
 		~Signature() = default;
 
-		Signature(const SmallTypeVector &inputs, const SmallTypeVector &outputs)
+		Signature(const InputParameters &inputs, const OutputParameters &outputs)
 			: m_inputs(inputs), m_outputs(outputs) {}
 
-		inline const SmallTypeVector &inputs() const
+		inline const InputParameters &inputs() const
 		{
 			return this->m_inputs;
 		}
 
-		inline const SmallTypeVector &outputs() const
+		inline const OutputParameters &outputs() const
 		{
 			return this->m_outputs;
 		}
 
+		SmallTypeVector input_types() const
+		{
+			SmallTypeVector types;
+			for (const InputParameter &param : this->inputs()) {
+				types.append(param.type());
+			}
+			return types;
+		}
+
+		SmallTypeVector output_types() const
+		{
+			SmallTypeVector types;
+			for (const OutputParameter &param : this->outputs()) {
+				types.append(param.type());
+			}
+			return types;
+		}
+
 	private:
-		const SmallTypeVector m_inputs;
-		const SmallTypeVector m_outputs;
+		const InputParameters m_inputs;
+		const OutputParameters m_outputs;
 	};
 
 	class Function {
diff --git a/source/blender/functions/core/data_flow_graph.cpp b/source/blender/functions/core/data_flow_graph.cpp
index ea7a7778dfa..684310b56dd 100644
--- a/source/blender/functions/core/data_flow_graph.cpp
+++ b/source/blender/functions/core/data_flow_graph.cpp
@@ -4,10 +4,10 @@ namespace FN {
 	const Type *Socket::type() const
 	{
 		if (this->m_is_output) {
-			return this->node()->signature().outputs()[this->m_index];
+			return this->node()->signature().outputs()[this->m_index].type();
 		}
 		else {
-			return this->node()->signature().inputs()[this->m_index];
+			return this->node()->signature().inputs()[this->m_index].type();
 		}
 	}
 };
\ No newline at end of file



More information about the Bf-blender-cvs mailing list