[Bf-blender-cvs] [5e20def930c] functions-experimental-refactor: cleanup function allocation

Jacques Lucke noreply at git.blender.org
Sun Nov 3 14:31:11 CET 2019


Commit: 5e20def930c79bf2a92b14082150b60a32a6a86d
Author: Jacques Lucke
Date:   Sun Nov 3 14:30:45 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rB5e20def930c79bf2a92b14082150b60a32a6a86d

cleanup function allocation

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

M	source/blender/functions2/intern/vtree_multi_function_network/builder.cc
M	source/blender/functions2/intern/vtree_multi_function_network/builder.h
M	source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
M	source/blender/functions2/intern/vtree_multi_function_network/mappings_sockets.cc

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

diff --git a/source/blender/functions2/intern/vtree_multi_function_network/builder.cc b/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
index b5c6412d2be..1eb0e0af387 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
@@ -141,7 +141,7 @@ const CPPType &VTreeMFNetworkBuilder::cpp_type_from_property(const VNode &vnode,
 
 std::unique_ptr<VTreeMFNetwork> VTreeMFNetworkBuilder::build()
 {
-  m_builder->to_dot__clipboard();
+  // m_builder->to_dot__clipboard();
 
   Array<int> socket_ids(m_vtree.socket_count(), -1);
   for (uint vsocket_id = 0; vsocket_id < m_vtree.socket_count(); vsocket_id++) {
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/builder.h b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
index ce8c2776d5d..a12d5413b3e 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/builder.h
+++ b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
@@ -55,6 +55,15 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
     return value_ref;
   }
 
+  template<typename T, typename... Args> T &allocate_function(Args &&... args)
+  {
+    BLI_STATIC_ASSERT((std::is_base_of<MultiFunction, T>::value), "");
+    std::unique_ptr<T> function = BLI::make_unique<T>(std::forward<Args>(args)...);
+    T &function_ref = *function;
+    m_resources.add(std::move(function), function_ref.name().data());
+    return function_ref;
+  }
+
   MFDataType try_get_data_type(const VSocket &vsocket) const
   {
     return m_type_by_vsocket[vsocket.id()];
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
index 22b3987d175..b9431611f7d 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -7,7 +7,7 @@ namespace FN {
 
 static void INSERT_vector_math(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &fn = builder.allocate<FN::MF_AddFloat3s>("vector math function");
+  const MultiFunction &fn = builder.allocate_function<FN::MF_AddFloat3s>();
   builder.add_function(fn, {0, 1}, {2}, vnode);
 }
 
@@ -28,8 +28,7 @@ static const MultiFunction &get_vectorized_function(
   }
 
   if (input_is_vectorized.contains(true)) {
-    return builder.allocate<FN::MF_SimpleVectorize>(
-        "vectorized function", base_function, input_is_vectorized);
+    return builder.allocate_function<FN::MF_SimpleVectorize>(base_function, input_is_vectorized);
   }
   else {
     return base_function;
@@ -38,7 +37,7 @@ static const MultiFunction &get_vectorized_function(
 
 static void INSERT_float_math(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &base_fn = builder.allocate<FN::MF_AddFloats>("float math function");
+  const MultiFunction &base_fn = builder.allocate_function<FN::MF_AddFloats>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__a", "use_list__b"});
 
@@ -47,7 +46,7 @@ static void INSERT_float_math(VTreeMFNetworkBuilder &builder, const VNode &vnode
 
 static void INSERT_combine_vector(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &base_fn = builder.allocate<FN::MF_CombineVector>("combine vector function");
+  const MultiFunction &base_fn = builder.allocate_function<FN::MF_CombineVector>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__x", "use_list__y", "use_list__z"});
   builder.add_function(fn, {0, 1, 2}, {3}, vnode);
@@ -55,8 +54,7 @@ static void INSERT_combine_vector(VTreeMFNetworkBuilder &builder, const VNode &v
 
 static void INSERT_separate_vector(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &base_fn = builder.allocate<FN::MF_SeparateVector>(
-      "separate vector function");
+  const MultiFunction &base_fn = builder.allocate_function<FN::MF_SeparateVector>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__vector"});
   builder.add_function(fn, {0}, {1, 2, 3}, vnode);
@@ -65,15 +63,14 @@ static void INSERT_separate_vector(VTreeMFNetworkBuilder &builder, const VNode &
 static void INSERT_list_length(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const CPPType &type = builder.cpp_type_from_property(vnode, "active_type");
-  const MultiFunction &fn = builder.allocate<FN::MF_ListLength>("list length function", type);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ListLength>(type);
   builder.add_function(fn, {0}, {1}, vnode);
 }
 
 static void INSERT_get_list_element(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const CPPType &type = builder.cpp_type_from_property(vnode, "active_type");
-  const MultiFunction &fn = builder.allocate<FN::MF_GetListElement>("get list element function",
-                                                                    type);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_GetListElement>(type);
   builder.add_function(fn, {0, 1, 2}, {3}, vnode);
 }
 
@@ -103,8 +100,7 @@ static MFBuilderOutputSocket &build_pack_list_node(VTreeMFNetworkBuilder &builde
   uint input_amount = input_is_list.size();
   uint output_param_index = (input_amount > 0 && input_is_list[0]) ? 0 : input_amount;
 
-  const MultiFunction &fn = builder.allocate<FN::MF_PackList>(
-      "pack list function", base_type, input_is_list);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_PackList>(base_type, input_is_list);
   MFBuilderFunctionNode &node = builder.add_function(
       fn, IndexRange(input_amount).as_array_ref(), {output_param_index});
 
@@ -125,21 +121,19 @@ static void INSERT_pack_list(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 
 static void INSERT_object_location(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &fn = builder.allocate<FN::MF_ObjectWorldLocation>(
-      "object location function");
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ObjectWorldLocation>();
   builder.add_function(fn, {0}, {1}, vnode);
 }
 
 static void INSERT_text_length(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &fn = builder.allocate<FN::MF_TextLength>("text length function");
+  const MultiFunction &fn = builder.allocate_function<FN::MF_TextLength>();
   builder.add_function(fn, {0}, {1}, vnode);
 }
 
 static void INSERT_vertex_info(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &fn = builder.allocate<FN::MF_ContextVertexPosition>(
-      "context vertex positions function");
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ContextVertexPosition>();
   builder.add_function(fn, {}, {0}, vnode);
 }
 
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/mappings_sockets.cc b/source/blender/functions2/intern/vtree_multi_function_network/mappings_sockets.cc
index 8f8db4eeb32..5a42fa5fa69 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/mappings_sockets.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/mappings_sockets.cc
@@ -16,8 +16,7 @@ static MFBuilderOutputSocket &INSERT_vector_socket(VTreeMFNetworkBuilder &builde
   BLI::float3 value;
   RNA_float_get_array(vsocket.rna(), "value", value);
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<BLI::float3>>("vector socket",
-                                                                                value);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ConstantValue<BLI::float3>>(value);
   MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
   return *node.outputs()[0];
 }
@@ -27,7 +26,7 @@ static MFBuilderOutputSocket &INSERT_float_socket(VTreeMFNetworkBuilder &builder
 {
   float value = RNA_float_get(vsocket.rna(), "value");
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<float>>("float socket", value);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ConstantValue<float>>(value);
   MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
   return *node.outputs()[0];
 }
@@ -37,7 +36,7 @@ static MFBuilderOutputSocket &INSERT_bool_socket(VTreeMFNetworkBuilder &builder,
 {
   bool value = RNA_boolean_get(vsocket.rna(), "value");
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<bool>>("boolean socket", value);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ConstantValue<bool>>(value);
   MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
   return *node.outputs()[0];
 }
@@ -47,7 +46,7 @@ static MFBuilderOutputSocket &INSERT_int_socket(VTreeMFNetworkBuilder &builder,
 {
   int value = RNA_int_get(vsocket.rna(), "value");
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<int>>("int socket", value);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ConstantValue<int>>(value);
   MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
   return *node.outputs()[0];
 }
@@ -57,8 +56,7 @@ static MFBuilderOutputSocket &INSERT_object_socket(VTreeMFNetworkBuilder &builde
 {
   Object *value = (Object *)RNA_pointer_get(vsocket.rna(), "value").data;
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<Object *>>("object socket",
-                                                                             value);
+  const MultiFunction &fn = builder.allocate_function<FN::MF_ConstantValue<Object *>>(value);
   MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
   return *node.outputs()[0];
 }
@@ -70,8 +68,7 @@ static MFBuilderOutputSocket &INSERT_text_socket(VTreeMFNetworkBuilder &builder,
   std::string text = value;
   MEM_freeN(value);
 
-  const MultiFunction &fn = builder.allocate<FN::MF_ConstantValue<std::string>>("text socket",
-                                                                        

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list