[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