Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/functions/FN_multi_function_param_type.hh')
-rw-r--r--source/blender/functions/FN_multi_function_param_type.hh44
1 files changed, 26 insertions, 18 deletions
diff --git a/source/blender/functions/FN_multi_function_param_type.hh b/source/blender/functions/FN_multi_function_param_type.hh
index 69ac4c2382e..8a7284624d1 100644
--- a/source/blender/functions/FN_multi_function_param_type.hh
+++ b/source/blender/functions/FN_multi_function_param_type.hh
@@ -22,6 +22,23 @@
namespace blender::fn {
+enum class MFParamCategory {
+ SingleInput,
+ VectorInput,
+ SingleOutput,
+ VectorOutput,
+ SingleMutable,
+ VectorMutable,
+};
+
+template<MFParamCategory Category, typename T> struct MFParamTag {
+ static constexpr MFParamCategory category = Category;
+ using base_type = T;
+ /* TODO: Doesn't support all categories yet, this can be generalized when necessary. */
+ using array_type =
+ std::conditional_t<Category == MFParamCategory::SingleInput, VArray<T>, MutableSpan<T>>;
+};
+
class MFParamType {
public:
enum InterfaceType {
@@ -30,15 +47,6 @@ class MFParamType {
Mutable,
};
- enum Category {
- SingleInput,
- VectorInput,
- SingleOutput,
- VectorOutput,
- SingleMutable,
- VectorMutable,
- };
-
private:
InterfaceType interface_type_;
MFDataType data_type_;
@@ -89,34 +97,34 @@ class MFParamType {
return interface_type_;
}
- Category category() const
+ MFParamCategory category() const
{
switch (data_type_.category()) {
case MFDataType::Single: {
switch (interface_type_) {
case Input:
- return SingleInput;
+ return MFParamCategory::SingleInput;
case Output:
- return SingleOutput;
+ return MFParamCategory::SingleOutput;
case Mutable:
- return SingleMutable;
+ return MFParamCategory::SingleMutable;
}
break;
}
case MFDataType::Vector: {
switch (interface_type_) {
case Input:
- return VectorInput;
+ return MFParamCategory::VectorInput;
case Output:
- return VectorOutput;
+ return MFParamCategory::VectorOutput;
case Mutable:
- return VectorMutable;
+ return MFParamCategory::VectorMutable;
}
break;
}
}
- BLI_assert(false);
- return SingleInput;
+ BLI_assert_unreachable();
+ return MFParamCategory::SingleInput;
}
bool is_input_or_mutable() const