[Bf-blender-cvs] [a9a87412708] functions-experimental-refactor: further develop Signature
Jacques Lucke
noreply at git.blender.org
Tue Oct 15 15:57:28 CEST 2019
Commit: a9a87412708a3ffb4d0cf3cf83828ca206432ce7
Author: Jacques Lucke
Date: Sun Oct 13 15:25:39 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rBa9a87412708a3ffb4d0cf3cf83828ca206432ce7
further develop Signature
===================================================================
M source/blender/blenkernel/BKE_multi_function.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_multi_function.h b/source/blender/blenkernel/BKE_multi_function.h
index 1a03de945d0..c2cc848cfa3 100644
--- a/source/blender/blenkernel/BKE_multi_function.h
+++ b/source/blender/blenkernel/BKE_multi_function.h
@@ -4,8 +4,12 @@
#include "BKE_generic_array_ref.h"
#include "BKE_generic_vector_array.h"
+#include "BLI_vector.h"
+
namespace BKE {
+using BLI::Vector;
+
class MultiFunction {
public:
class SignatureBuilder {
@@ -26,22 +30,79 @@ class MultiFunction {
};
class Signature {
+ private:
+ enum ParamCategory {
+ SingleInput,
+ SingleOutput,
+ VectorInput,
+ VectorOutput,
+ MutableVector,
+ };
+
+ Vector<uint> m_corrected_indices;
+ Vector<std::string> m_param_names;
+ Vector<ParamCategory> m_param_categories;
+ Vector<CPPType *> m_param_base_types;
+
public:
- uint get_corrected_index(uint index);
+ uint get_corrected_index(uint index) const
+ {
+ return m_corrected_indices[index];
+ }
+
+ template<typename T> bool is_readonly_single_input(uint index, StringRef name) const
+ {
+ return this->is_valid_param<T>(index, name, ParamCategory::SingleInput);
+ }
+ bool is_readonly_single_input(uint index, StringRef name) const
+ {
+ return this->is_valid_param(index, name, ParamCategory::SingleInput);
+ }
+
+ template<typename T> bool is_single_output(uint index, StringRef name) const
+ {
+ return this->is_valid_param<T>(index, name, ParamCategory::SingleOutput);
+ }
+ bool is_single_output(uint index, StringRef name) const
+ {
+ return this->is_valid_param(index, name, ParamCategory::SingleOutput);
+ }
- template<typename T> bool is_readonly_single_input(uint index, StringRef name) const;
- bool is_readonly_single_input(uint index, StringRef name) const;
+ template<typename T> bool is_readonly_vector_input(uint index, StringRef name) const
+ {
+ return this->is_valid_param<T>(index, name, ParamCategory::VectorInput);
+ }
+ bool is_readonly_vector_input(uint index, StringRef name) const
+ {
+ return this->is_valid_param(index, name, ParamCategory::VectorInput);
+ }
- template<typename T> bool is_single_output(uint index, StringRef name) const;
- bool is_single_output(uint index, StringRef name) const;
+ template<typename T> bool is_vector_output(uint index, StringRef name) const
+ {
+ return this->is_valid_param<T>(index, name, ParamCategory::VectorOutput);
+ }
+ bool is_vector_output(uint index, StringRef name) const
+ {
+ return this->is_valid_param(index, name, ParamCategory::VectorOutput);
+ }
- template<typename T> bool is_readonly_vector_input(uint index, StringRef name) const;
- bool is_readonly_vector_input(uint index, StringRef name) const;
+ bool is_mutable_vector(uint index, StringRef name) const
+ {
+ return this->is_valid_param(index, name, ParamCategory::MutableVector);
+ }
- template<typename T> bool is_vector_output(uint index, StringRef name) const;
- bool is_vector_output(uint index, StringRef name);
+ private:
+ template<typename T>
+ bool is_valid_param(uint index, StringRef name, ParamCategory category) const
+ {
+ return this->is_valid_param(index, name, category) &&
+ m_param_base_types[index] == &GET_TYPE<T>();
+ }
- bool is_mutable_vector(uint index, StringRef name) const;
+ bool is_valid_param(uint index, StringRef name, ParamCategory category) const
+ {
+ return m_param_names[index] == name && m_param_categories[index] == category;
+ }
};
class Params {
More information about the Bf-blender-cvs
mailing list