diff options
Diffstat (limited to 'source/blender/functions/FN_multi_function_param_type.hh')
-rw-r--r-- | source/blender/functions/FN_multi_function_param_type.hh | 44 |
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 |