[Bf-blender-cvs] [6b9e7dc585c] functions: simplify conversion insertion

Jacques Lucke noreply at git.blender.org
Sat Jan 4 16:39:07 CET 2020


Commit: 6b9e7dc585cf0f74d5fbc182462d8b0d48b15cc2
Author: Jacques Lucke
Date:   Sat Jan 4 13:59:39 2020 +0100
Branches: functions
https://developer.blender.org/rB6b9e7dc585cf0f74d5fbc182462d8b0d48b15cc2

simplify conversion insertion

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

M	source/blender/functions/FN_multi_function_data_type.h
M	source/blender/functions/intern/node_tree_multi_function_network/generate.cc
M	source/blender/functions/intern/node_tree_multi_function_network/mappings.h
M	source/blender/functions/intern/node_tree_multi_function_network/mappings_sockets.cc

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

diff --git a/source/blender/functions/FN_multi_function_data_type.h b/source/blender/functions/FN_multi_function_data_type.h
index 4dfd5fa7357..f1eadc5c0a4 100644
--- a/source/blender/functions/FN_multi_function_data_type.h
+++ b/source/blender/functions/FN_multi_function_data_type.h
@@ -3,6 +3,8 @@
 
 #include "FN_cpp_type.h"
 
+#include "BLI_hash_cxx.h"
+
 namespace FN {
 
 struct MFDataType {
@@ -98,8 +100,20 @@ struct MFDataType {
  private:
   Category m_category;
   const CPPType *m_base_type;
+
+  friend BLI::DefaultHash<MFDataType>;
 };
 
 }  // namespace FN
 
+namespace BLI {
+template<> struct DefaultHash<FN::MFDataType> {
+  uint32_t operator()(const FN::MFDataType &value) const
+  {
+    return DefaultHash<FN::CPPType *>{}(value.m_base_type) + 243523 * (uint)value.m_category;
+  }
+};
+
+}  // namespace BLI
+
 #endif /* __FN_MULTI_FUNCTION_DATA_TYPE_H__ */
diff --git a/source/blender/functions/intern/node_tree_multi_function_network/generate.cc b/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
index ca993c27f5a..56036815a13 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
+++ b/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
@@ -69,21 +69,18 @@ static bool insert_links(CommonBuilderData &common)
     }
 
     MFBuilderOutputSocket *from_socket = nullptr;
-    StringRef from_idname;
 
     if (origin_sockets.size() == 1) {
       if (!common.fsocket_data_types.is_data_socket(*origin_sockets[0])) {
         return false;
       }
       from_socket = &common.socket_map.lookup(*origin_sockets[0]);
-      from_idname = origin_sockets[0]->idname();
     }
     else {
       if (!common.fsocket_data_types.is_data_group_input(*origin_group_inputs[0])) {
         return false;
       }
       from_socket = &common.socket_map.lookup(*origin_group_inputs[0]);
-      from_idname = origin_group_inputs[0]->vsocket().idname();
     }
 
     Vector<MFBuilderInputSocket *> to_sockets = common.socket_map.lookup(*to_fsocket);
@@ -94,7 +91,7 @@ static bool insert_links(CommonBuilderData &common)
 
     if (from_type != to_type) {
       const ConversionInserter *inserter = common.mappings.conversion_inserters.lookup_ptr(
-          {from_idname, to_fsocket->idname()});
+          {from_type, to_type});
       if (inserter == nullptr) {
         return false;
       }
diff --git a/source/blender/functions/intern/node_tree_multi_function_network/mappings.h b/source/blender/functions/intern/node_tree_multi_function_network/mappings.h
index 658cc22e886..963e503a80f 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/mappings.h
+++ b/source/blender/functions/intern/node_tree_multi_function_network/mappings.h
@@ -28,7 +28,7 @@ struct FunctionTreeMFMappings {
   Map<const CPPType *, std::string> type_name_from_cpp_type;
   StringMap<FNodeInserter> fnode_inserters;
   StringMap<VSocketInserter> fsocket_inserters;
-  Map<std::pair<std::string, std::string>, ConversionInserter> conversion_inserters;
+  Map<std::pair<MFDataType, MFDataType>, ConversionInserter> conversion_inserters;
 };
 
 void add_function_tree_socket_mapping_info(FunctionTreeMFMappings &mappings);
diff --git a/source/blender/functions/intern/node_tree_multi_function_network/mappings_sockets.cc b/source/blender/functions/intern/node_tree_multi_function_network/mappings_sockets.cc
index d14bdfd519b..699d18c4742 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/mappings_sockets.cc
+++ b/source/blender/functions/intern/node_tree_multi_function_network/mappings_sockets.cc
@@ -115,15 +115,20 @@ static void add_basic_type(FunctionTreeMFMappings &mappings,
   std::string list_idname = "fn_" + base_name_without_spaces + "ListSocket";
   std::string list_name = base_name + " List";
 
-  mappings.cpp_type_by_type_name.add_new(base_name, &CPP_TYPE<T>());
-  mappings.data_type_by_idname.add_new(base_idname, MFDataType::ForSingle<T>());
-  mappings.data_type_by_idname.add_new(list_idname, MFDataType::ForVector<T>());
-  mappings.data_type_by_type_name.add_new(base_name, MFDataType::ForSingle<T>());
-  mappings.data_type_by_type_name.add_new(list_name, MFDataType::ForVector<T>());
+  const CPPType &cpp_type = CPP_TYPE<T>();
+  MFDataType base_data_type = MFDataType::ForSingle(cpp_type);
+  MFDataType list_data_type = MFDataType::ForVector(cpp_type);
+
+  mappings.cpp_type_by_type_name.add_new(base_name, &cpp_type);
+  mappings.data_type_by_idname.add_new(base_idname, base_data_type);
+  mappings.data_type_by_idname.add_new(list_idname, list_data_type);
+  mappings.data_type_by_type_name.add_new(base_name, base_data_type);
+  mappings.data_type_by_type_name.add_new(list_name, list_data_type);
   mappings.fsocket_inserters.add_new(base_idname, base_inserter);
   mappings.fsocket_inserters.add_new(list_idname, INSERT_empty_list_socket<T>);
-  mappings.conversion_inserters.add_new({base_idname, list_idname}, INSERT_element_to_list<T>);
-  mappings.type_name_from_cpp_type.add_new(&CPP_TYPE<T>(), base_name);
+  mappings.conversion_inserters.add_new({base_data_type, list_data_type},
+                                        INSERT_element_to_list<T>);
+  mappings.type_name_from_cpp_type.add_new(&cpp_type, base_name);
 }
 
 template<typename T>
@@ -146,10 +151,11 @@ static void add_implicit_conversion(FunctionTreeMFMappings &mappings)
   std::string to_base_idname = "fn_" + to_name + "Socket";
   std::string to_list_idname = "fn_" + to_name + "ListSocket";
 
-  mappings.conversion_inserters.add_new({from_base_idname, to_base_idname},
-                                        INSERT_convert<FromT, ToT>);
-  mappings.conversion_inserters.add_new({from_list_idname, to_list_idname},
-                                        INSERT_convert_list<FromT, ToT>);
+  mappings.conversion_inserters.add_new(
+      {MFDataType::ForSingle<FromT>(), MFDataType::ForSingle<ToT>()}, INSERT_convert<FromT, ToT>);
+  mappings.conversion_inserters.add_new(
+      {MFDataType::ForVector<FromT>(), MFDataType::ForVector<ToT>()},
+      INSERT_convert_list<FromT, ToT>);
 }
 
 template<typename T1, typename T2>



More information about the Bf-blender-cvs mailing list