[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