[Bf-blender-cvs] [72878c2] object_nodes: Cleanup: Use node/socket pair keys more consistently instead of pointers.
Lukas Tönne
noreply at git.blender.org
Mon Jan 4 15:21:52 CET 2016
Commit: 72878c26a2666fd7dce41ed58854231d0ba4a1e3
Author: Lukas Tönne
Date: Mon Jan 4 15:21:14 2016 +0100
Branches: object_nodes
https://developer.blender.org/rB72878c26a2666fd7dce41ed58854231d0ba4a1e3
Cleanup: Use node/socket pair keys more consistently instead of pointers.
===================================================================
M source/blender/blenvm/compile/bvm_codegen.cc
M source/blender/blenvm/compile/bvm_nodegraph.cc
M source/blender/blenvm/compile/bvm_nodegraph.h
M source/blender/blenvm/intern/bvm_api.cc
M source/blender/blenvm/util/bvm_util_debug.h
===================================================================
diff --git a/source/blender/blenvm/compile/bvm_codegen.cc b/source/blender/blenvm/compile/bvm_codegen.cc
index a8ef742..ff76230 100644
--- a/source/blender/blenvm/compile/bvm_codegen.cc
+++ b/source/blender/blenvm/compile/bvm_codegen.cc
@@ -118,10 +118,10 @@ void Compiler::resolve_basic_block_symbols(const NodeGraph &graph, Compiler::Bas
ConstInputKey key(&node, input->name);
assert(block.input_index.find(key) == block.input_index.end());
- if (node.is_input_constant(i)) {
+ if (key.is_constant()) {
/* stored directly in the instructions list after creating values */
}
- else if (node.is_input_expression(i)) {
+ else if (key.is_expression()) {
BasicBlock &expr_block = expression_map.at(key);
/* initialize local arguments */
@@ -129,19 +129,16 @@ void Compiler::resolve_basic_block_symbols(const NodeGraph &graph, Compiler::Bas
resolve_basic_block_symbols(graph, expr_block);
- ConstOutputKey link_key = key.node->link(key.socket);
- if (link_key.node) {
- expr_block.return_index = expr_block.output_index.at(link_key);
+ if (key.link()) {
+ expr_block.return_index = expr_block.output_index.at(key.link());
}
else {
expr_block.return_index = assign_stack_index(input->typedesc);
}
block.input_index[key] = expr_block.return_index;
}
- else if (node.has_input_link(i)) {
- ConstOutputKey link_key(node.find_input_link_node(i),
- node.find_input_link_socket(i)->name);
- block.input_index[key] = block.output_index.at(link_key);
+ else if (key.link()) {
+ block.input_index[key] = block.output_index.at(key.link());
}
else {
block.input_index[key] = assign_stack_index(input->typedesc);
@@ -162,9 +159,9 @@ void Compiler::expression_node_append(const NodeInstance *node,
visited.insert(node);
for (size_t i = 0; i < node->num_inputs(); ++i) {
- const NodeInstance *link_node = node->find_input_link_node(i);
- if (link_node) {
- expression_node_append(link_node, sorted_nodes, visited);
+ ConstOutputKey link = node->link(i);
+ if (link) {
+ expression_node_append(link.node, sorted_nodes, visited);
}
}
@@ -181,19 +178,19 @@ void Compiler::graph_node_append(const NodeInstance *node,
for (size_t i = 0; i < node->num_inputs(); ++i) {
const NodeInput *socket = node->type->find_input(i);
- const NodeInstance *link_node = node->find_input_link_node(i);
+ ConstOutputKey link = node->link(i);
if (socket->value_type == INPUT_EXPRESSION) {
BasicBlock &expr_block = expression_map[node->input(i)];
- if (link_node) {
+ if (link) {
NodeSet expr_visited;
- expression_node_append(link_node, expr_block.nodes, expr_visited);
+ expression_node_append(link.node, expr_block.nodes, expr_visited);
}
}
else {
- if (link_node) {
- graph_node_append(link_node, sorted_nodes, visited);
+ if (link) {
+ graph_node_append(link.node, sorted_nodes, visited);
}
}
}
@@ -421,10 +418,8 @@ static void count_output_users(const NodeGraph &graph,
continue;
for (int i = 0; i < node->num_inputs(); ++i) {
- if (node->has_input_link(i)) {
- ConstOutputKey key(node->find_input_link_node(i),
- node->find_input_link_socket(i)->name);
- users[key] += 1;
+ if (node->link(i)) {
+ users[node->link(i)] += 1;
}
}
}
@@ -450,19 +445,17 @@ int Compiler::codegen_basic_block(const Compiler::BasicBlock &block,
/* store values for unconnected inputs */
for (int i = 0; i < node.num_inputs(); ++i) {
- const NodeInput *input = node.type->find_input(i);
- ConstInputKey key(&node, input->name);
+ ConstInputKey key = node.input(i);
- if (node.is_input_constant(i) || node.is_input_expression(i)) {
+ if (key.is_constant() || key.is_expression()) {
/* stored directly in instructions */
}
- else if (node.has_input_link(i)) {
+ else if (key.link()) {
/* uses linked output value on the stack */
}
else {
/* create a value node for the input */
- const Value *value = (node.has_input_value(i)) ? node.find_input_value(i) : input->default_value;
- codegen_value(value, block.input_index.at(key));
+ codegen_value(key.value(), block.input_index.at(key));
}
}
/* initialize output data stack entries */
@@ -488,17 +481,13 @@ int Compiler::codegen_basic_block(const Compiler::BasicBlock &block,
push_opcode(op);
/* write input stack offsets and constants */
for (int i = 0; i < node.num_inputs(); ++i) {
- const NodeInput *input = node.type->find_input(i);
- ConstInputKey key(&node, input->name);
+ ConstInputKey key = node.input(i);
- if (node.is_input_constant(i)) {
- const Value *value = node.find_input_value(i);
- if (!value)
- value = node.type->find_input(i)->default_value;
- push_constant(value);
+ if (key.is_constant()) {
+ push_constant(key.value());
}
else {
- if (node.is_input_expression(i)) {
+ if (key.is_expression()) {
const BasicBlock &expr_block = expression_map.at(key);
push_jump_address(expr_block.entry_point);
}
@@ -508,8 +497,7 @@ int Compiler::codegen_basic_block(const Compiler::BasicBlock &block,
}
/* write output stack offsets */
for (int i = 0; i < node.num_outputs(); ++i) {
- const NodeOutput *output = node.type->find_output(i);
- ConstOutputKey key(&node, output->name);
+ ConstOutputKey key = node.output(i);
push_stack_index(block.output_index.at(key));
}
@@ -517,20 +505,18 @@ int Compiler::codegen_basic_block(const Compiler::BasicBlock &block,
/* release input data stack entries */
for (int i = 0; i < node.num_inputs(); ++i) {
+ ConstInputKey key = node.input(i);
const NodeInput *input = node.type->find_input(i);
- if (node.is_input_constant(i) || node.is_input_expression(i)) {
+ if (key.is_constant() || key.is_expression()) {
/* pass */
}
- else if (node.has_input_link(i)) {
- ConstOutputKey link_key(node.find_input_link_node(i),
- node.find_input_link_socket(i)->name);
-
+ else if (node.link(i)) {
OpCode release_op = ptr_release_opcode(input->typedesc);
if (release_op != OP_NOOP) {
push_opcode(release_op);
- push_stack_index(block.output_index.at(link_key));
+ push_stack_index(block.output_index.at(node.link(i)));
}
}
}
@@ -553,14 +539,11 @@ int Compiler::codegen_main(const NodeGraph &graph)
block.entry_point = codegen_basic_block(block, output_users);
- ConstOutputKey link_key = key.node->link(key.socket);
- if (link_key.node) {
+ if (key.link()) {
/* uses output value from the stack */
}
else {
- const NodeInput *input = key.node->type->find_input(key.socket);
- Value *value = input->default_value;
- codegen_value(value, block.return_index);
+ codegen_value(key.value(), block.return_index);
}
}
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index 5626368..2303675 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -235,10 +235,14 @@ const NodeOutput *NodeType::add_output(const string &name,
/* ------------------------------------------------------------------------- */
ConstOutputKey::ConstOutputKey() :
- node(NULL), socket("")
+ node(NULL), socket(NULL)
{}
ConstOutputKey::ConstOutputKey(const NodeInstance *node, const string &socket) :
+ node(node), socket(node->type->find_output(socket))
+{}
+
+ConstOutputKey::ConstOutputKey(const NodeInstance *node, const NodeOutput *socket) :
node(node), socket(socket)
{}
@@ -254,16 +258,20 @@ bool ConstOutputKey::operator < (const ConstOutputKey &other) const
ConstOutputKey::operator bool() const
{
- return node != NULL && !socket.empty();
+ return node != NULL && socket != NULL;
}
/*****/
OutputKey::OutputKey() :
- node(NULL), socket("")
+ node(NULL), socket(NULL)
{}
OutputKey::OutputKey(NodeInstance *node, const string &socket) :
+ node(node), socket(node->type->find_output(socket))
+{}
+
+OutputKey::OutputKey(NodeInstance *node, const NodeOutput *socket) :
node(node), socket(socket)
{}
@@ -284,16 +292,20 @@ bool OutputKey::operator < (const OutputKey &other) const
OutputKey::operator bool() const
{
- return node != NULL && !socket.empty();
+ return node != NULL && socket != NULL;
}
/*****/
ConstInputKey::ConstInputKey() :
- node(NULL), socket("")
+ node(NULL), socket(NULL)
{}
ConstInputKey::ConstInputKey(const NodeInstance *node, const string &socket) :
+ node(node), socket(node->type->find_input(socket))
+{}
+
+ConstInputKey::ConstInputKey(const NodeInstance *node, const NodeInput *socket) :
node(node), socket(socket)
{}
@@ -309,24 +321,43 @@ bool ConstInputKey::operator < (const ConstInputKey &other) const
ConstInputKey::operator bool() const
{
- return node != NULL && !socket.empty();
+ return node != NULL && socket != NULL;
}
ConstOutputKey ConstInputKey::link() const
{
if (node)
- return node->link(socket);
+ return node->link(socket->name);
else
return ConstOutputKey();
}
+const Value *ConstInputKey::value() const
+{
+ return node->input_value(socket->name);
+}
+
+bool ConstInputKey::is_constant() const
+{
+ return socket->value_type == INPUT_CONSTANT;
+}
+
+bool ConstInputKey::is_expression() const
+{
+ return socket->value_type == INPUT_EXPRESSION;
+}
+
/*****/
InputKey::InputKey() :
- node(NULL), socket("")
+ node(NULL), socket(NULL)
{}
InputKey::InputKey(NodeInstance *node, const string &socket) :
+ node(node), socket(node->type->find_input(socket))
+{}
+
+InputKey::InputKey(NodeInstance *node, const NodeInput *socket) :
node(node), socket(socket)
{}
@@ -347,17 +378,37 @@ bool InputKey::operator < (const InputKey &other) const
InputKey::operator bool() const
{
- return node != NULL && !socket.empty();
+ return node != NULL && socket != NULL;
}
OutputKey InputKey::link() const
{
if (node)
- return node->link(socket);
+ return node->link(socket->name)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list