[Bf-blender-cvs] [ed727f3c0f1] functions-experimental-refactor: refactor mapping from vtree to multi functions

Jacques Lucke noreply at git.blender.org
Sat Nov 2 13:26:07 CET 2019


Commit: ed727f3c0f18aba2c1a8776ec3f805f845940e28
Author: Jacques Lucke
Date:   Sat Nov 2 13:26:02 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBed727f3c0f18aba2c1a8776ec3f805f845940e28

refactor mapping from vtree to multi functions

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

M	source/blender/functions2/CMakeLists.txt
M	source/blender/functions2/FN_multi_function.h
M	source/blender/functions2/intern/vtree_multi_function_network/generate.cc
A	source/blender/functions2/intern/vtree_multi_function_network/mappings.cc
A	source/blender/functions2/intern/vtree_multi_function_network/mappings.h

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

diff --git a/source/blender/functions2/CMakeLists.txt b/source/blender/functions2/CMakeLists.txt
index 10bdca0e31a..b9ce480fc88 100644
--- a/source/blender/functions2/CMakeLists.txt
+++ b/source/blender/functions2/CMakeLists.txt
@@ -26,6 +26,7 @@ set(SRC
   intern/multi_functions/mixed.cc
   intern/multi_functions/network.cc
   intern/vtree_multi_function_network/generate.cc
+  intern/vtree_multi_function_network/mappings.cc
   intern/cpp_type.cc
   intern/cpp_types.cc
   intern/generic_tuple.cc
@@ -49,6 +50,7 @@ set(SRC
   intern/multi_functions/lists.h
   intern/multi_functions/mixed.h
   intern/multi_functions/network.h
+  intern/vtree_multi_function_network/mappings.h
   intern/cpp_types.h
 )
 
diff --git a/source/blender/functions2/FN_multi_function.h b/source/blender/functions2/FN_multi_function.h
index c8b7d0359c1..eee1f59de5a 100644
--- a/source/blender/functions2/FN_multi_function.h
+++ b/source/blender/functions2/FN_multi_function.h
@@ -26,6 +26,11 @@ struct MFDataType {
   {
   }
 
+  static MFDataType ForNone()
+  {
+    return MFDataType{};
+  }
+
   template<typename T> static MFDataType ForSingle()
   {
     return MFDataType(Category::Single, GET_TYPE<T>());
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/generate.cc b/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
index b1cc5f53c8b..ce13f341333 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
@@ -5,55 +5,13 @@
 #include "BLI_math_cxx.h"
 #include "BLI_string_map.h"
 
+#include "mappings.h"
+
 namespace FN {
 
 using BLI::float3;
 using BLI::StringMap;
 
-static MFDataType get_type_by_socket(const VSocket &vsocket)
-{
-  StringRef idname = vsocket.idname();
-
-  if (idname == "fn_FloatSocket") {
-    return MFDataType::ForSingle<float>();
-  }
-  else if (idname == "fn_VectorSocket") {
-    return MFDataType::ForSingle<float3>();
-  }
-  else if (idname == "fn_IntegerSocket") {
-    return MFDataType::ForSingle<int32_t>();
-  }
-  else if (idname == "fn_BooleanSocket") {
-    return MFDataType::ForSingle<bool>();
-  }
-  else if (idname == "fn_ObjectSocket") {
-    return MFDataType::ForSingle<Object *>();
-  }
-  else if (idname == "fn_TextSocket") {
-    return MFDataType::ForSingle<std::string>();
-  }
-  else if (idname == "fn_FloatListSocket") {
-    return MFDataType::ForVector<float>();
-  }
-  else if (idname == "fn_VectorListSocket") {
-    return MFDataType::ForVector<float3>();
-  }
-  else if (idname == "fn_IntegerListSocket") {
-    return MFDataType::ForVector<int32_t>();
-  }
-  else if (idname == "fn_BooleanListSocket") {
-    return MFDataType::ForVector<bool>();
-  }
-  else if (idname == "fn_ObjectListSocket") {
-    return MFDataType::ForVector<Object *>();
-  }
-  else if (idname == "fn_TextListSocket") {
-    return MFDataType::ForVector<std::string>();
-  }
-
-  return MFDataType();
-}
-
 static const CPPType &get_cpp_type_by_name(StringRef name)
 {
   if (name == "Float") {
@@ -275,161 +233,6 @@ static StringMap<InsertVNodeFunction> get_node_inserters()
   return inserters;
 }
 
-static MFBuilderOutputSocket &INSERT_vector_socket(VTreeMFNetworkBuilder &builder,
-                                                   OwnedResources &resources,
-                                                   const VSocket &vsocket)
-{
-  float3 value;
-  RNA_float_get_array(vsocket.rna(), "value", value);
-
-  const MultiFunction &fn = allocate_resource<FN::MF_ConstantValue<float3>>(
-      "vector socket", resources, value);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-static MFBuilderOutputSocket &INSERT_float_socket(VTreeMFNetworkBuilder &builder,
-                                                  OwnedResources &resources,
-                                                  const VSocket &vsocket)
-{
-  float value = RNA_float_get(vsocket.rna(), "value");
-
-  const MultiFunction &fn = allocate_resource<FN::MF_ConstantValue<float>>(
-      "float socket", resources, value);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-static MFBuilderOutputSocket &INSERT_int_socket(VTreeMFNetworkBuilder &builder,
-                                                OwnedResources &resources,
-                                                const VSocket &vsocket)
-{
-  int value = RNA_int_get(vsocket.rna(), "value");
-
-  const MultiFunction &fn = allocate_resource<FN::MF_ConstantValue<int>>(
-      "int socket", resources, value);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-static MFBuilderOutputSocket &INSERT_object_socket(VTreeMFNetworkBuilder &builder,
-                                                   OwnedResources &resources,
-                                                   const VSocket &vsocket)
-{
-  Object *value = (Object *)RNA_pointer_get(vsocket.rna(), "value").data;
-
-  const MultiFunction &fn = allocate_resource<FN::MF_ConstantValue<Object *>>(
-      "object socket", resources, value);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-static MFBuilderOutputSocket &INSERT_text_socket(VTreeMFNetworkBuilder &builder,
-                                                 OwnedResources &resources,
-                                                 const VSocket &vsocket)
-{
-  char *value = RNA_string_get_alloc(vsocket.rna(), "value", nullptr, 0);
-  std::string text = value;
-  MEM_freeN(value);
-
-  const MultiFunction &fn = allocate_resource<FN::MF_ConstantValue<std::string>>(
-      "text socket", resources, text);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-template<typename T>
-static MFBuilderOutputSocket &INSERT_empty_list_socket(VTreeMFNetworkBuilder &builder,
-                                                       OwnedResources &resources,
-                                                       const VSocket &UNUSED(vsocket))
-{
-  const MultiFunction &fn = allocate_resource<FN::MF_EmptyList<T>>("empty list socket", resources);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
-  return *node.outputs()[0];
-}
-
-static StringMap<InsertUnlinkedInputFunction> get_unlinked_input_inserter()
-{
-  StringMap<InsertUnlinkedInputFunction> inserters;
-  inserters.add_new("fn_VectorSocket", INSERT_vector_socket);
-  inserters.add_new("fn_FloatSocket", INSERT_float_socket);
-  inserters.add_new("fn_IntegerSocket", INSERT_int_socket);
-  inserters.add_new("fn_ObjectSocket", INSERT_object_socket);
-  inserters.add_new("fn_TextSocket", INSERT_text_socket);
-  inserters.add_new("fn_VectorListSocket", INSERT_empty_list_socket<float3>);
-  inserters.add_new("fn_FloatListSocket", INSERT_empty_list_socket<float>);
-  inserters.add_new("fn_IntegerListSocket", INSERT_empty_list_socket<int32_t>);
-  inserters.add_new("fn_ObjectListSocket", INSERT_empty_list_socket<Object *>);
-  inserters.add_new("fn_TextListSocket", INSERT_empty_list_socket<std::string>);
-  return inserters;
-}
-
-template<typename FromT, typename ToT>
-static std::pair<MFBuilderInputSocket *, MFBuilderOutputSocket *> INSERT_convert(
-    VTreeMFNetworkBuilder &builder, OwnedResources &resources)
-{
-  const MultiFunction &fn = allocate_resource<FN::MF_Convert<FromT, ToT>>("converter function",
-                                                                          resources);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {0}, {1});
-  return {node.inputs()[0], node.outputs()[0]};
-}
-
-template<typename FromT, typename ToT>
-static std::pair<MFBuilderInputSocket *, MFBuilderOutputSocket *> INSERT_convert_list(
-    VTreeMFNetworkBuilder &builder, OwnedResources &resources)
-{
-  const MultiFunction &fn = allocate_resource<FN::MF_ConvertList<FromT, ToT>>(
-      "convert list function", resources);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {0}, {1});
-  return {node.inputs()[0], node.outputs()[0]};
-}
-
-template<typename T>
-static std::pair<MFBuilderInputSocket *, MFBuilderOutputSocket *> INSERT_element_to_list(
-    VTreeMFNetworkBuilder &builder, OwnedResources &resources)
-{
-  const MultiFunction &fn = allocate_resource<FN::MF_SingleElementList<T>>(
-      "single element list function", resources);
-  MFBuilderFunctionNode &node = builder.add_function(fn, {0}, {1});
-  return {node.inputs()[0], node.outputs()[0]};
-}
-
-static Map<std::pair<std::string, std::string>, InsertImplicitConversionFunction>
-get_conversion_inserters()
-{
-  Map<std::pair<std::string, std::string>, InsertImplicitConversionFunction> inserters;
-
-  inserters.add_new({"fn_IntegerSocket", "fn_FloatSocket"}, INSERT_convert<int, float>);
-  inserters.add_new({"fn_FloatSocket", "fn_IntegerSocket"}, INSERT_convert<float, int>);
-
-  inserters.add_new({"fn_FloatSocket", "fn_BooleanSocket"}, INSERT_convert<float, bool>);
-  inserters.add_new({"fn_BooleanSocket", "fn_FloatSocket"}, INSERT_convert<bool, float>);
-
-  inserters.add_new({"fn_IntegerSocket", "fn_BooleanSocket"}, INSERT_convert<int, bool>);
-  inserters.add_new({"fn_BooleanSocket", "fn_IntegerSocket"}, INSERT_convert<bool, int>);
-
-  inserters.add_new({"fn_IntegerListSocket", "fn_FloatListSocket"},
-                    INSERT_convert_list<int, float>);
-  inserters.add_new({"fn_FloatListSocket", "fn_IntegerListSocket"},
-                    INSERT_convert_list<float, int>);
-
-  inserters.add_new({"fn_FloatListSocket", "fn_BooleanListSocket"},
-                    INSERT_convert_list<float, bool>);
-  inserters.add_new({"fn_BooleanListSocket", "fn_FloatListSocket"},
-                    INSERT_convert_list<bool, float>);
-
-  inserters.add_new({"fn_IntegerListSocket", "fn_BooleanListSocket"},
-                    INSERT_convert_list<int, bool>);
-  inserters.add_new({"fn_BooleanListSocket", "fn_IntegerListSocket"},
-                    INSERT_convert_list<bool, int>);
-
-  inserters.add_new({"fn_IntegerSocket", "fn_IntegerListSocket"}, INSERT_element_to_list<int>);
-  inserters.add_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list