3434#include < iosfwd>
3535#include < boost/variant.hpp>
3636#include < boost/filesystem/path.hpp>
37- #ifndef Q_MOC_RUN
38- #include < boost/iterator/counting_iterator.hpp>
39- #endif
4037#include < Core/Datatypes/DatatypeFwd.h>
4138#include < Core/Algorithms/Base/AlgorithmFwd.h>
4239#include < Core/Algorithms/Base/Name.h>
@@ -62,7 +59,7 @@ namespace Algorithms {
6259
6360 Variable () {}
6461 Variable (const Name& name, const Value& value);
65- enum DatatypeVariableEnum { DATATYPE_VARIABLE };
62+ enum class DatatypeVariableEnum { DATATYPE_VARIABLE };
6663 Variable (const Name& name, const Datatypes::DatatypeHandle& data, DatatypeVariableEnum) : name_(name), data_(data) {}
6764
6865 const Name& name () const { return name_; }
@@ -88,93 +85,13 @@ namespace Algorithms {
8885 Datatypes::DatatypeHandleOption data_;
8986 };
9087
91- SCISHARE bool operator ==(const Variable& lhs, const Variable& rhs);
92- SCISHARE bool operator !=(const Variable& lhs, const Variable& rhs);
93- SCISHARE std::ostream& operator <<(std::ostream& out, const Variable& var);
94- SCISHARE Variable makeVariable (const std::string& name, const Variable::Value& value);
95- SCISHARE Variable makeVariable (const Name& name, const Variable::Value& value);
96-
97- template <typename ... Ts>
98- Variable::List makeAnonymousVariableList (Ts&&... params)
99- {
100- std::vector<Variable::Value> values{params...};
101- Variable::List vars;
102- std::transform (values.begin (), values.end (), std::back_inserter (vars),
103- [](const Variable::Value& val) { return makeVariable (" listElement" , val); });
104- return vars;
105- }
106-
107- template <typename ... Ts, size_t N>
108- Variable::List makeNamedVariableList (const Name (&namesList)[N], Ts&&... params)
109- {
110- std::vector<Variable::Value> values{ params... };
111-
112- auto namesIter = &namesList[0 ];
113- Variable::List vars;
114- std::transform (values.begin (), values.end (), std::back_inserter (vars),
115- [&namesIter](const Variable::Value& val) { return Variable (*namesIter++, val); });
116- return vars;
117- }
118-
119- template <typename Func>
120- Variable::List makeHomogeneousVariableList (Func valueGenerator, size_t num)
121- {
122- Variable::List vars;
123- std::transform (boost::counting_iterator<size_t >(0 ), boost::counting_iterator<size_t >(num), std::back_inserter (vars), [valueGenerator](size_t i) { return makeVariable (" " , valueGenerator (i)); });
124- return vars;
125- }
126-
127- template <typename T>
128- Variable::List makeHomogeneousVariableListFill (const T& value, size_t num)
129- {
130- return makeHomogeneousVariableList ([value](size_t ) { return value; }, num);
131- }
132-
133- template <typename T>
134- std::vector<T> toTypedVector (const Variable::List& list, std::function<T(const Variable&)> convert)
135- {
136- std::vector<T> ts;
137- std::transform (list.begin (), list.end (), std::back_inserter (ts), convert);
138- return ts;
139- }
140-
141- SCISHARE std::vector<std::string> toStringVector (const Variable::List& list);
142- SCISHARE std::vector<std::string> toNameVector (const Variable::List& list);
143- SCISHARE std::vector<double > toDoubleVector (const Variable::List& list);
144-
14588 typedef Variable AlgorithmParameter;
14689 typedef Variable::List VariableList;
14790 typedef SharedPointer<Variable> VariableHandle;
14891
149- }
150-
151- // type-converting bolt-on class template
152- template <typename T>
153- class TypedVariable : public Algorithms ::Variable
154- {
155- public:
156- using value_type = T;
157- TypedVariable (const std::string& name, const value_type& value) : Algorithms::Variable(Algorithms::Name(name), value) {}
158-
159- operator value_type () const { return {}; }
160- };
161-
162- #define TYPED_VARIABLE_CLASS (varType, func ) template <> \
163- class TypedVariable <varType> : public Algorithms::Variable \
164- {\
165- public: \
166- using value_type = varType;\
167- TypedVariable (const std::string& name, const value_type& value) : Algorithms::Variable(Algorithms::Name(name), value) {}\
168- operator value_type () const { return val (); }\
169- value_type val () const { return func (); }\
170- };
171-
172- TYPED_VARIABLE_CLASS (bool , toBool)
173- TYPED_VARIABLE_CLASS(std::string, toString)
174-
175- using BooleanVariable = TypedVariable<bool>;
176- using StringVariable = TypedVariable<std::string>;
177-
178- }}
92+ SCISHARE bool operator ==(const Variable& lhs, const Variable& rhs);
93+ SCISHARE bool operator !=(const Variable& lhs, const Variable& rhs);
94+ SCISHARE std::ostream& operator <<(std::ostream& out, const Variable& var);
95+ }}}
17996
18097#endif
0 commit comments