29 #ifndef ALGORITHMS_BASE_ALGORITHMBASE_H
30 #define ALGORITHMS_BASE_ALGORITHMBASE_H
36 #include <boost/variant.hpp>
37 #include <boost/function.hpp>
38 #include <boost/noncopyable.hpp>
50 namespace Algorithms {
54 Name() : name_(
"_unspecified_") {}
55 explicit Name(
const std::string&
name);
57 std::string
name()
const {
return name_; }
61 return name_ < rhs.
name_;
78 AlgoOption(
const std::string& option,
const std::set<std::string>& options)
79 : option_(option), options_(options) {}
92 typedef boost::variant<
110 double getDouble()
const;
111 std::string getString()
const;
112 bool getBool()
const;
114 std::vector<Variable> getList()
const;
131 virtual void error(
const std::string& error)
const;
132 virtual void warning(
const std::string& warning)
const;
133 virtual void remark(
const std::string& remark)
const;
134 virtual void status(
const std::string& status)
const;
146 setUpdaterFunc(defaultUpdaterFunc_);
159 UpdaterFunc updaterFunc_;
160 static UpdaterFunc defaultUpdaterFunc_;
175 typedef std::map<Name, std::vector<Datatypes::DatatypeHandle>>
Map;
181 template <
typename T>
184 auto it = data_.find(
name);
186 return it == data_.end() ? boost::shared_ptr<T>() : boost::dynamic_pointer_cast<T>(it->second[0]);
189 template <
typename T>
192 auto it = data_.find(name);
194 return it == data_.end() ? std::vector<boost::shared_ptr<T>>() : downcast_range<T>(it->second);
197 template <
typename T>
200 data_[
name] = upcast_range<Datatypes::Datatype>(list);
209 boost::any transient_;
260 void dumpAlgoState()
const;
262 void add_option(
const AlgorithmParameterName& key,
const std::string& defval,
const std::string& options);
264 typedef std::map<AlgorithmParameterName, AlgorithmParameter> ParameterMap;
265 ParameterMap parameters_;
275 return operator()(name.
name(), d);
277 template <
typename T>
281 map_[
Name(name)] = upcast_range<Datatypes::Datatype>(vec);
284 template <
typename T>
287 return operator()(name.
name(), vec);
317 template <
typename T>
320 return opt.get_value_or(boost::shared_ptr<T>());
325 #define make_input(list) SCIRun::Core::Algorithms::AlgoInputBuilder() list .build()
326 #define make_output(portName) SCIRun::Core::Algorithms::AlgorithmParameterName(#portName)
327 #define get_output(outputObj, portName, type) boost::dynamic_pointer_cast<type>(outputObj[make_output(portName)]);
328 #define ALGORITHM_PARAMETER_DECL(name) namespace Parameters { SCISHARE extern const SCIRun::Core::Algorithms::AlgorithmParameterName name; }
329 #define ALGORITHM_PARAMETER_DEF(ns, name) const SCIRun::Core::Algorithms::AlgorithmParameterName SCIRun::Core::Algorithms::ns::Parameters::name(#name);
Value value_
Definition: AlgorithmBase.h:106
Name AlgorithmInputName
Definition: AlgorithmBase.h:71
Name()
Definition: AlgorithmBase.h:54
boost::shared_ptr< LegacyLoggerInterface > LoggerHandle
Definition: LoggerFwd.h:42
Definition: AlgorithmBase.h:52
Definition: AlgorithmBase.h:141
boost::shared_ptr< AlgorithmInput > AlgorithmInputHandle
Definition: AlgorithmBase.h:221
Definition: AlgorithmBase.h:296
Definition: LoggerInterface.h:43
Definition: AlgorithmBase.h:224
AlgorithmData(const Map &m)
Definition: AlgorithmBase.h:177
virtual void update_progress(double percent) const
Definition: AlgorithmBase.h:153
AlgoOption()
Definition: AlgorithmBase.h:77
virtual ~AlgorithmFactory()
Definition: AlgorithmBase.h:313
Variable(const Name &name, const Value &value)
Definition: AlgorithmBase.h:102
boost::variant< int, double, std::string, bool, AlgoOption, std::vector< Variable > > Value
Definition: AlgorithmBase.h:99
Definition: AlgorithmBase.h:219
void setUpdaterFunc(UpdaterFunc func)
Definition: AlgorithmBase.h:156
boost::function< void(double)> UpdaterFunc
Definition: AlgorithmBase.h:155
#define SCISHARE
Definition: share.h:39
void setList(const Name &name, const std::vector< boost::shared_ptr< T >> &list)
Definition: AlgorithmBase.h:198
bool operator<(const Name &rhs) const
Definition: AlgorithmBase.h:59
Definition: AlgorithmBase.h:245
AlgorithmStatusReporter()
Definition: AlgorithmBase.h:144
std::map< Name, std::vector< Datatypes::DatatypeHandle > > Map
Definition: AlgorithmBase.h:175
virtual ~AlgorithmCollaborator()
Definition: AlgorithmBase.h:305
Definition: AlgorithmBase.h:163
AlgoOption(const std::string &option, const std::set< std::string > &options)
Definition: AlgorithmBase.h:78
Definition: AlgorithmBase.h:302
std::vector< boost::shared_ptr< T > > getList(const Name &name) const
Definition: AlgorithmBase.h:190
virtual void report_start(const std::string &tag) const
Definition: AlgorithmBase.h:150
boost::shared_ptr< T > optionalAlgoInput(boost::optional< boost::shared_ptr< T >> opt)
Definition: AlgorithmBase.h:318
UpdaterFunc getUpdaterFunc() const
Definition: AlgorithmBase.h:157
const char * name[]
Definition: BoostGraphExampleTests.cc:87
Definition: AlgorithmBase.h:123
std::set< std::string > options_
Definition: AlgorithmBase.h:82
Variable AlgorithmParameter
Definition: AlgorithmBase.h:121
std::string name() const
Definition: AlgorithmBase.h:57
SCISHARE bool operator==(const Name &lhs, const Name &rhs)
Definition: AlgorithmBase.cc:269
Variable(const Name &name, const Datatypes::DatatypeHandle &value)
Definition: AlgorithmBase.h:103
std::string name_
Definition: AlgorithmBase.h:64
Definition: AlgorithmBase.h:74
void setTransient(boost::any t)
Definition: AlgorithmBase.h:204
SCISHARE AlgorithmInput makeNullInput()
Definition: AlgorithmBase.cc:279
AlgorithmData()
Definition: AlgorithmBase.h:176
virtual ~AlgorithmInterface()
Definition: AlgorithmBase.h:227
Variable()
Definition: AlgorithmBase.h:101
Definition: AlgorithmBase.h:88
boost::shared_ptr< AlgorithmBase > AlgorithmHandle
Definition: AlgorithmFwd.h:39
Definition: AlgorithmBase.h:310
Definition: AlgorithmBase.h:172
Name AlgorithmParameterName
Definition: AlgorithmBase.h:70
virtual void report_end() const
Definition: AlgorithmBase.h:151
SCISHARE std::ostream & operator<<(std::ostream &out, const Name &name)
Definition: AlgorithmBase.cc:274
std::string option_
Definition: AlgorithmBase.h:81
Datatypes::DatatypeHandle data_
Definition: AlgorithmBase.h:107
~AlgorithmStatusReporter()
Definition: AlgorithmBase.h:148
Definition: ProgressReporter.h:54
boost::shared_ptr< Datatype > DatatypeHandle
Definition: DatatypeFwd.h:44
Name name_
Definition: AlgorithmBase.h:105
Name AlgorithmOutputName
Definition: AlgorithmBase.h:72
boost::shared_ptr< AlgorithmOutput > AlgorithmOutputHandle
Definition: AlgorithmBase.h:222
boost::any getTransient() const
Definition: AlgorithmBase.h:205