[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