[Bf-blender-cvs] [e493f20] object_nodes: Keep a list of input arguments of a function in addition to return values.

Lukas Tönne noreply at git.blender.org
Tue Dec 8 14:52:26 CET 2015


Commit: e493f2039e3787564090192e6e5c8be9473cfdb0
Author: Lukas Tönne
Date:   Tue Dec 8 12:36:16 2015 +0100
Branches: object_nodes
https://developer.blender.org/rBe493f2039e3787564090192e6e5c8be9473cfdb0

Keep a list of input arguments of a function in addition to return values.

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

M	source/blender/blenvm/bvm/bvm_eval.cc
M	source/blender/blenvm/bvm/bvm_function.cc
M	source/blender/blenvm/bvm/bvm_function.h

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

diff --git a/source/blender/blenvm/bvm/bvm_eval.cc b/source/blender/blenvm/bvm/bvm_eval.cc
index 2d4f8c7..27d38bf 100644
--- a/source/blender/blenvm/bvm/bvm_eval.cc
+++ b/source/blender/blenvm/bvm/bvm_eval.cc
@@ -806,8 +806,8 @@ void EvalContext::eval_function(const EvalGlobals *globals, const EvalData *data
 	
 	eval_instructions(globals, data, fn, fn->entry_point(), stack);
 	
-	for (int i = 0; i < fn->return_values_size(); ++i) {
-		const ReturnValue &rval = fn->return_value(i);
+	for (int i = 0; i < fn->num_return_values(); ++i) {
+		const Argument &rval = fn->return_value(i);
 		float *value = &stack[rval.stack_offset];
 		
 		rval.typedesc.copy_value(results[i], (void *)value);
diff --git a/source/blender/blenvm/bvm/bvm_function.cc b/source/blender/blenvm/bvm/bvm_function.cc
index e1f6753..4f99a9d 100644
--- a/source/blender/blenvm/bvm/bvm_function.cc
+++ b/source/blender/blenvm/bvm/bvm_function.cc
@@ -52,27 +52,50 @@ void Function::set_entry_point(int entry_point)
 	m_entry_point = entry_point;
 }
 
-void Function::add_return_value(const TypeDesc &typedesc, const string &name, StackIndex stack_offset)
+size_t Function::num_arguments() const
+{
+	return m_arguments.size();
+}
+
+const Argument &Function::argument(size_t index) const
 {
-	m_return_values.push_back(ReturnValue(typedesc, name, stack_offset));
+	return m_arguments[index];
+}
+
+const Argument &Function::argument(const string &name) const
+{
+	for (ArgumentList::const_iterator it = m_arguments.begin(); it != m_arguments.end(); ++it)
+		if ((*it).name == name)
+			return *it;
+	return *(m_arguments.end());
 }
 
-size_t Function::return_values_size() const
+size_t Function::num_return_values() const
 {
 	return m_return_values.size();
 }
 
-const ReturnValue &Function::return_value(size_t index) const
+const Argument &Function::return_value(size_t index) const
 {
 	return m_return_values[index];
 }
 
-const ReturnValue &Function::return_value(const string &name) const
+const Argument &Function::return_value(const string &name) const
 {
-	for (ReturnValueList::const_iterator it = m_return_values.begin(); it != m_return_values.end(); ++it)
+	for (ArgumentList::const_iterator it = m_return_values.begin(); it != m_return_values.end(); ++it)
 		if ((*it).name == name)
 			return *it;
 	return *(m_return_values.end());
 }
 
+void Function::add_argument(const TypeDesc &typedesc, const string &name, StackIndex stack_offset)
+{
+	m_arguments.push_back(Argument(typedesc, name, stack_offset));
+}
+
+void Function::add_return_value(const TypeDesc &typedesc, const string &name, StackIndex stack_offset)
+{
+	m_return_values.push_back(Argument(typedesc, name, stack_offset));
+}
+
 } /* namespace bvm */
diff --git a/source/blender/blenvm/bvm/bvm_function.h b/source/blender/blenvm/bvm/bvm_function.h
index dd40ce7..f8875ce 100644
--- a/source/blender/blenvm/bvm/bvm_function.h
+++ b/source/blender/blenvm/bvm/bvm_function.h
@@ -97,8 +97,8 @@ static inline void *instruction_to_pointer(Instruction hi, Instruction lo)
 	return u.v;
 }
 
-struct ReturnValue {
-	ReturnValue(const TypeDesc &typedesc, const string &name, StackIndex stack_offset) :
+struct Argument {
+	Argument(const TypeDesc &typedesc, const string &name, StackIndex stack_offset) :
 	    typedesc(typedesc),
 	    name(name),
 	    stack_offset(stack_offset)
@@ -112,7 +112,7 @@ struct ReturnValue {
 };
 
 struct Function {
-	typedef std::vector<ReturnValue> ReturnValueList;
+	typedef std::vector<Argument> ArgumentList;
 	typedef std::vector<Instruction> InstructionList;
 	
 	Function();
@@ -215,13 +215,19 @@ struct Function {
 	int entry_point() const { return m_entry_point; }
 	void set_entry_point(int entry_point);
 	
+	size_t num_return_values() const;
+	const Argument &return_value(size_t index) const;
+	const Argument &return_value(const string &name) const;
+	size_t num_arguments() const;
+	const Argument &argument(size_t index) const;
+	const Argument &argument(const string &name) const;
+	
+	void add_argument(const TypeDesc &typedesc, const string &name, StackIndex stack_offset);
 	void add_return_value(const TypeDesc &typedesc, const string &name, StackIndex stack_offset);
-	size_t return_values_size() const;
-	const ReturnValue &return_value(size_t index) const;
-	const ReturnValue &return_value(const string &name) const;
 	
 private:
-	ReturnValueList m_return_values;
+	ArgumentList m_arguments;
+	ArgumentList m_return_values;
 	InstructionList m_instructions;
 	int m_entry_point;




More information about the Bf-blender-cvs mailing list