[Bf-blender-cvs] [82844c5f116] functions: cleanup dependency builder
Jacques Lucke
noreply at git.blender.org
Fri Jul 12 14:50:40 CEST 2019
Commit: 82844c5f1161ba816fd5527593d9017e7bd79e3e
Author: Jacques Lucke
Date: Fri Jul 12 13:51:20 2019 +0200
Branches: functions
https://developer.blender.org/rB82844c5f1161ba816fd5527593d9017e7bd79e3e
cleanup dependency builder
===================================================================
M source/blender/blenlib/BLI_array_ref.hpp
M source/blender/functions/backends/dependencies/dependencies-c.cpp
M source/blender/functions/backends/dependencies/dependencies.cpp
M source/blender/functions/backends/dependencies/dependencies.hpp
M source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
M source/blender/functions/frontends/data_flow_nodes/inserters.cpp
M source/blender/functions/functions/lists.cpp
M source/blender/functions/functions/object_input.cpp
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/source/blender/blenlib/BLI_array_ref.hpp b/source/blender/blenlib/BLI_array_ref.hpp
index 71f55feea39..197fbc8b433 100644
--- a/source/blender/blenlib/BLI_array_ref.hpp
+++ b/source/blender/blenlib/BLI_array_ref.hpp
@@ -254,6 +254,12 @@ template<typename T> class ArrayRef {
return fallback;
}
+ template<typename NewT> ArrayRef<NewT> cast() const
+ {
+ BLI_STATIC_ASSERT(sizeof(T) == sizeof(NewT), "");
+ return ArrayRef<NewT>((NewT *)m_start, m_size);
+ }
+
template<typename PrintLineF> void print_as_lines(StringRef name, PrintLineF print_line) const
{
std::cout << "ArrayRef: " << name << " \tSize:" << m_size << '\n';
diff --git a/source/blender/functions/backends/dependencies/dependencies-c.cpp b/source/blender/functions/backends/dependencies/dependencies-c.cpp
index ecf7dbfc64b..58f7bf8a6ee 100644
--- a/source/blender/functions/backends/dependencies/dependencies-c.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies-c.cpp
@@ -14,10 +14,14 @@ static void update_depsgraph(DepsNodeHandle *deps_node, ArrayRef<Object *> trans
void FN_function_update_dependencies(FnFunction fn_c, struct DepsNodeHandle *deps_node)
{
Function *fn = unwrap(fn_c);
- DependenciesBody *body = fn->body<DependenciesBody>();
+ DepsBody *body = fn->body<DepsBody>();
if (body) {
- ExternalDependenciesBuilder builder({});
- body->dependencies(builder);
- update_depsgraph(deps_node, builder.get_transform_dependencies());
+ SmallMultiMap<uint, ID *> input_ids;
+ SmallMultiMap<uint, ID *> output_ids;
+ SmallSetVector<Object *> transform_dependencies;
+
+ FunctionDepsBuilder builder(input_ids, output_ids, transform_dependencies);
+ body->build_deps(builder);
+ update_depsgraph(deps_node, transform_dependencies);
}
}
diff --git a/source/blender/functions/backends/dependencies/dependencies.cpp b/source/blender/functions/backends/dependencies/dependencies.cpp
index 94b2ea80bb4..211f65a2b5b 100644
--- a/source/blender/functions/backends/dependencies/dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies.cpp
@@ -2,6 +2,6 @@
namespace FN {
-BLI_COMPOSITION_IMPLEMENTATION(DependenciesBody);
+BLI_COMPOSITION_IMPLEMENTATION(DepsBody);
} /* namespace FN */
diff --git a/source/blender/functions/backends/dependencies/dependencies.hpp b/source/blender/functions/backends/dependencies/dependencies.hpp
index 93b3f53903e..83c2fec4631 100644
--- a/source/blender/functions/backends/dependencies/dependencies.hpp
+++ b/source/blender/functions/backends/dependencies/dependencies.hpp
@@ -2,60 +2,66 @@
#include "FN_core.hpp"
+struct ID;
struct Object;
namespace FN {
-class ExternalDependenciesBuilder {
+class FunctionDepsBuilder {
private:
- SmallMultiMap<uint, Object *> m_input_objects;
- SmallMultiMap<uint, Object *> m_output_objects;
- SmallVector<Object *> m_transform_dependencies;
+ const SmallMultiMap<uint, ID *> &m_input_ids;
+ SmallMultiMap<uint, ID *> &m_output_ids;
+ SmallSetVector<Object *> &m_transform_dependencies;
public:
- ExternalDependenciesBuilder(SmallMultiMap<uint, Object *> inputs) : m_input_objects(inputs)
+ FunctionDepsBuilder(const SmallMultiMap<uint, ID *> &input_ids,
+ SmallMultiMap<uint, ID *> &output_ids,
+ SmallSetVector<Object *> &transform_dependencies)
+ : m_input_ids(input_ids),
+ m_output_ids(output_ids),
+ m_transform_dependencies(transform_dependencies)
{
}
- void pass_through(uint from_index, uint to_index)
+ void pass_ids_through(uint input_index, uint output_index)
{
- this->set_output_objects(to_index, this->get_input_objects(from_index));
+ this->add_output_ids(output_index, this->get_input_ids(input_index));
}
- void set_output_objects(uint index, ArrayRef<Object *> objects)
+ void add_output_ids(uint output_index, ArrayRef<ID *> ids)
{
- m_output_objects.add_multiple(index, objects);
+ m_output_ids.add_multiple(output_index, ids);
}
- ArrayRef<Object *> get_input_objects(uint index)
+ void add_output_objects(uint output_index, ArrayRef<Object *> objects)
{
- return m_input_objects.lookup_default(index);
+ this->add_output_ids(output_index, objects.cast<ID *>());
}
- ArrayRef<Object *> get_output_objects(uint index)
+ ArrayRef<ID *> get_input_ids(uint input_index)
{
- return m_output_objects.lookup_default(index);
+ return m_input_ids.lookup_default(input_index);
}
- void depends_on_transforms_of(ArrayRef<Object *> objects)
+ ArrayRef<Object *> get_input_objects(uint input_index)
{
- m_transform_dependencies.extend(objects);
+ return this->get_input_ids(input_index).cast<Object *>();
}
- ArrayRef<Object *> get_transform_dependencies()
+ void add_transform_dependency(ArrayRef<Object *> objects)
{
- return m_transform_dependencies;
+ m_transform_dependencies.add_multiple(objects);
}
};
-class DependenciesBody : public FunctionBody {
+class DepsBody : public FunctionBody {
public:
- BLI_COMPOSITION_DECLARATION(DependenciesBody);
+ BLI_COMPOSITION_DECLARATION(DepsBody);
- virtual ~DependenciesBody()
+ virtual ~DepsBody()
{
}
- virtual void dependencies(ExternalDependenciesBuilder &deps) const = 0;
+ virtual void build_deps(FunctionDepsBuilder &deps) const = 0;
};
} /* namespace FN */
diff --git a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
index bdb949f5261..d8a867454d1 100644
--- a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
@@ -2,7 +2,7 @@
namespace FN {
-class FGraphDependencies : public DependenciesBody {
+class FGraphDependencies : public DepsBody {
private:
FunctionGraph m_fgraph;
SharedDataFlowGraph m_graph;
@@ -13,51 +13,54 @@ class FGraphDependencies : public DependenciesBody {
{
}
- void dependencies(ExternalDependenciesBuilder &deps) const override
+ void build_deps(FunctionDepsBuilder &builder) const override
{
SmallSetVector<Object *> transform_dependencies;
for (uint i = 0; i < m_fgraph.outputs().size(); i++) {
DFGraphSocket socket = m_fgraph.outputs()[i];
- SmallVector<Object *> outputs = this->find_deps_and_outputs(
- socket, transform_dependencies, deps);
- deps.set_output_objects(i, outputs);
+ SmallVector<ID *> outputs = this->find_deps_and_outputs(
+ socket, transform_dependencies, builder);
+ builder.add_output_ids(i, outputs);
}
- deps.depends_on_transforms_of(transform_dependencies);
+ builder.add_transform_dependency(transform_dependencies);
}
- SmallVector<Object *> find_deps_and_outputs(DFGraphSocket socket,
- SmallSetVector<Object *> &transform_dependencies,
- ExternalDependenciesBuilder &deps) const
+ SmallVector<ID *> find_deps_and_outputs(DFGraphSocket socket,
+ SmallSetVector<Object *> &transform_dependencies,
+ FunctionDepsBuilder &parent_builder) const
{
if (m_fgraph.inputs().contains(socket)) {
- return deps.get_input_objects(m_fgraph.inputs().index(socket));
+ return parent_builder.get_input_ids(m_fgraph.inputs().index(socket));
}
else if (socket.is_input()) {
return this->find_deps_and_outputs(
- m_graph->origin_of_input(socket), transform_dependencies, deps);
+ m_graph->origin_of_input(socket), transform_dependencies, parent_builder);
}
else {
uint node_id = m_graph->node_id_of_output(socket);
SharedFunction &fn = m_graph->function_of_node(node_id);
- DependenciesBody *body = fn->body<DependenciesBody>();
+ DepsBody *body = fn->body<DepsBody>();
if (body == nullptr) {
for (auto input_socket : m_graph->inputs_of_node(node_id)) {
- this->find_deps_and_outputs(input_socket, transform_dependencies, deps);
+ this->find_deps_and_outputs(input_socket, transform_dependencies, parent_builder);
}
return {};
}
else {
- SmallMultiMap<uint, Object *> inputs;
+ SmallMultiMap<uint, ID *> input_ids;
+
for (uint i = 0; i < fn->input_amount(); i++) {
- inputs.add_multiple_new(
+ input_ids.add_multiple_new(
i,
- this->find_deps_and_outputs(
- m_graph->socket_of_node_input(node_id, i), transform_dependencies, deps));
+ this->find_deps_and_outputs(m_graph->socket_of_node_input(node_id, i),
+ transform_dependencies,
+ parent_builder));
}
- ExternalDependenciesBuilder builder(inputs);
- body->dependencies(builder);
- transform_dependencies.add_multiple(builder.get_transform_dependencies());
- return builder.get_output_objects(m_graph->index_of_output(socket));
+
+ SmallMultiMap<uint, ID *> output_ids;
+ FunctionDepsBuilder builder(input_ids, output_ids, transform_dependencies);
+ body->build_deps(builder);
+ return output_ids.lookup_default(m_graph->index_of_output(socket));
}
}
}
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 8719df4406f..53c7c467e7c 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -118,7 +118,7 @@ class SocketLoaderBody : public TupleCallBody {
}
};
-class SocketLoaderDependencies : public DependenciesBody {
+class SocketLoaderDependencies : public DepsBody {
private:
bNodeTree *m_btree;
SmallVector<bNodeSocket *> m_bsockets;
@@ -129,7 +129,7 @@ class SocketLoaderDependencies : public DependenciesBody {
{
}
- void dependencies(ExternalDependenciesBuilder &deps) const
+ void build_deps(FunctionDeps
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list