[Bf-blender-cvs] [ae8332f7c67] functions-experimental-refactor: introduce MFMask
Jacques Lucke
noreply at git.blender.org
Fri Nov 1 14:38:32 CET 2019
Commit: ae8332f7c670810e14e1dbea7352b4b9fc2a169d
Author: Jacques Lucke
Date: Fri Nov 1 14:17:09 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBae8332f7c670810e14e1dbea7352b4b9fc2a169d
introduce MFMask
===================================================================
M source/blender/blenkernel/BKE_multi_function.h
M source/blender/blenkernel/BKE_multi_functions.h
M source/blender/blenkernel/intern/multi_functions.cc
M source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_multi_function.h b/source/blender/blenkernel/BKE_multi_function.h
index 19f75a42476..cfe8fe8a9fd 100644
--- a/source/blender/blenkernel/BKE_multi_function.h
+++ b/source/blender/blenkernel/BKE_multi_function.h
@@ -182,6 +182,31 @@ struct MFParamType {
const CPPType *m_base_type = nullptr;
};
+class MFMask {
+ private:
+ ArrayRef<uint> m_indices;
+
+ public:
+ MFMask(ArrayRef<uint> indices) : m_indices(indices)
+ {
+ }
+
+ uint indices_amount() const
+ {
+ return m_indices.size();
+ }
+
+ uint min_array_size() const
+ {
+ return (m_indices.size() == 0) ? 0 : m_indices.last() + 1;
+ }
+
+ ArrayRef<uint> indices() const
+ {
+ return m_indices;
+ }
+};
+
class MFContext {
};
@@ -485,7 +510,7 @@ class MultiFunction {
virtual ~MultiFunction()
{
}
- virtual void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const = 0;
+ virtual void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const = 0;
IndexRange param_indices() const
{
diff --git a/source/blender/blenkernel/BKE_multi_functions.h b/source/blender/blenkernel/BKE_multi_functions.h
index 7c132fddeb4..1805535d969 100644
--- a/source/blender/blenkernel/BKE_multi_functions.h
+++ b/source/blender/blenkernel/BKE_multi_functions.h
@@ -8,55 +8,55 @@ namespace BKE {
class MultiFunction_AddFloats final : public MultiFunction {
public:
MultiFunction_AddFloats();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_AddFloat3s final : public MultiFunction {
public:
MultiFunction_AddFloat3s();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_CombineVector final : public MultiFunction {
public:
MultiFunction_CombineVector();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_SeparateVector final : public MultiFunction {
public:
MultiFunction_SeparateVector();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_VectorDistance final : public MultiFunction {
public:
MultiFunction_VectorDistance();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_FloatArraySum final : public MultiFunction {
public:
MultiFunction_FloatArraySum();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_FloatRange final : public MultiFunction {
public:
MultiFunction_FloatRange();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_ObjectWorldLocation final : public MultiFunction {
public:
MultiFunction_ObjectWorldLocation();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_TextLength final : public MultiFunction {
public:
MultiFunction_TextLength();
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_GetListElement final : public MultiFunction {
@@ -65,7 +65,7 @@ class MultiFunction_GetListElement final : public MultiFunction {
public:
MultiFunction_GetListElement(const CPPType &base_type);
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_ListLength final : public MultiFunction {
@@ -74,7 +74,7 @@ class MultiFunction_ListLength final : public MultiFunction {
public:
MultiFunction_ListLength(const CPPType &base_type);
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
class MultiFunction_PackList final : public MultiFunction {
@@ -84,7 +84,7 @@ class MultiFunction_PackList final : public MultiFunction {
public:
MultiFunction_PackList(const CPPType &base_type, ArrayRef<bool> input_list_status);
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
private:
bool input_is_list(uint index) const;
@@ -102,13 +102,11 @@ template<typename T> class MultiFunction_ConstantValue : public MultiFunction {
this->set_signature(signature);
}
- void call(ArrayRef<uint> mask_indices,
- MFParams ¶ms,
- MFContext &UNUSED(context)) const override
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &UNUSED(context)) const override
{
MutableArrayRef<T> output = params.single_output<T>(0, "Output");
- for (uint i : mask_indices) {
+ for (uint i : mask.indices()) {
new (output.begin() + i) T(m_value);
}
}
@@ -123,7 +121,7 @@ template<typename T> class MultiFunction_EmptyList : public MultiFunction {
this->set_signature(signature);
}
- void call(ArrayRef<uint> UNUSED(mask_indices),
+ void call(const MFMask &UNUSED(mask),
MFParams &UNUSED(params),
MFContext &UNUSED(context)) const override
{
@@ -140,14 +138,12 @@ template<typename FromT, typename ToT> class MultiFunction_Convert : public Mult
this->set_signature(signature);
}
- void call(ArrayRef<uint> mask_indices,
- MFParams ¶ms,
- MFContext &UNUSED(context)) const override
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &UNUSED(context)) const override
{
VirtualListRef<FromT> inputs = params.readonly_single_input<FromT>(0, "Input");
MutableArrayRef<ToT> outputs = params.single_output<ToT>(1, "Output");
- for (uint i : mask_indices) {
+ for (uint i : mask.indices()) {
const FromT &from_value = inputs[i];
new (outputs.begin() + i) ToT(from_value);
}
@@ -165,14 +161,12 @@ template<typename FromT, typename ToT> class MultiFunction_ConvertList : public
this->set_signature(signature);
}
- void call(ArrayRef<uint> mask_indices,
- MFParams ¶ms,
- MFContext &UNUSED(context)) const override
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &UNUSED(context)) const override
{
VirtualListListRef<FromT> inputs = params.readonly_vector_input<FromT>(0, "Inputs");
GenericVectorArray::MutableTypedRef<ToT> outputs = params.vector_output<ToT>(1, "Outputs");
- for (uint index : mask_indices) {
+ for (uint index : mask.indices()) {
VirtualListRef<FromT> input_list = inputs[index];
for (uint i = 0; i < input_list.size(); i++) {
@@ -194,14 +188,12 @@ template<typename T> class MultiFunction_SingleElementList : public MultiFunctio
this->set_signature(signature);
}
- void call(ArrayRef<uint> mask_indices,
- MFParams ¶ms,
- MFContext &UNUSED(context)) const override
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &UNUSED(context)) const override
{
VirtualListRef<T> inputs = params.readonly_single_input<T>(0, "Input");
GenericVectorArray::MutableTypedRef<T> outputs = params.vector_output<T>(1, "Outputs");
- for (uint i : mask_indices) {
+ for (uint i : mask.indices()) {
outputs.append_single(i, inputs[i]);
}
}
@@ -216,7 +208,7 @@ class MultiFunction_SimpleVectorize final : public MultiFunction {
public:
MultiFunction_SimpleVectorize(const MultiFunction &function, ArrayRef<bool> input_is_vectorized);
- void call(ArrayRef<uint> mask_indices, MFParams ¶ms, MFContext &context) const override;
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
};
}; // namespace BKE
diff --git a/source/blender/blenkernel/intern/multi_functions.cc b/source/blender/blenkernel/intern/multi_functions.cc
index 64c2d6d6621..a576dab0ca4 100644
--- a/source/blender/blenkernel/intern/multi_functions.cc
+++ b/source/blender/blenkernel/intern/multi_functions.cc
@@ -21,7 +21,7 @@ MultiFunction_AddFloats::MultiFunction_AddFloats()
this->set_signature(signature);
}
-void MultiFunction_AddFloats::call(ArrayRef<uint> mask_indices,
+void MultiFunction_AddFloats::call(const MFMask &mask,
MFParams ¶ms,
MFContext &UNUSED(context)) const
{
@@ -29,7 +29,7 @@ void MultiFunction_AddFloats::call(ArrayRef<uint> mask_indices,
auto b = params.readonly_single_input<float>(1, "B");
auto result = params.single_output<float>(2, "Result");
- for (uint i : mask_indices) {
+ for (uint i : mask.indices()) {
result[i] = a[i] + b[i];
}
}
@@ -43,7 +43,7 @@ MultiFunction_AddFloat3s::MultiFunction_AddFloat3s()
this->set_signature(signature);
}
-void MultiFunction_AddFloat3s::call(ArrayRef<uint> mask_indices,
+void MultiFunction_AddFloat3s::call(const MFMask &mask,
MFParams ¶ms,
MFContext &UNUSED(context)) const
{
@@ -51,7 +51,7 @@ void MultiFunction_AddFloat3s::call(ArrayRef<uint> mask_indices,
auto b = params.readonly_single_input<float3>(1, "B");
auto result =
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list