[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