31#ifndef DRAIN_BEANLIKE_H_
32#define DRAIN_BEANLIKE_H_
43#include <drain/StringBuilder.h>
46#include "ReferenceMap.h"
74 BeanLike(
const std::string & name,
const std::string & description=
"") : name(name), description(description) {
82 const std::string &
getName()
const {
return name; };
93 bool hasParameters()
const {
94 return !parameters.empty();
100 if (parameters.hasKey(p))
101 return parameters[p];
103 throw std::runtime_error(p +
": no such parameter (BeanLike::getParameter)");
108 const map_t & getParameters()
const {
return parameters; };
111 map_t & getParameters() {
return parameters; };
116 void setParametersFromEntries(
const F & args){
118 map_t & parameters = getParameters();
119 std::stringstream sstr;
121 for (
const auto & entry: args){
122 parameters[entry.first] = entry.second;
128 sstr << entry.first <<
'=' << entry.second;
146 setParametersFromEntries(args);
177 void setParameters(
const std::string &p,
char assignmentSymbol=
'=',
char separatorSymbol=0){
178 parameters.setValues(p, assignmentSymbol, separatorSymbol);
189 setParametersFromEntries(args);
202 setParametersFromEntries(args);
212 parameters[p].assignCastable(value);
222 parameters[p].assignCastable(value);
240 parameters[p] = value;
249 void setParameter(
const std::string &p, std::initializer_list<F> value){
250 parameters[p] = value;
259 parameters.importMap(b.getParameters());
266 std::ostream & toStream(std::ostream & ostr,
bool compact =
true)
const;
283 const std::string name;
285 const std::string description;
304std::ostream & operator<<(std::ostream &ostr,
const BeanLike & bean){
Something which has a name, a description and possibly some parameters of varying type.
Definition BeanLike.h:60
virtual const std::string & getName() const
Return the name of an instance.
Definition BeanLike.h:82
virtual const std::string & getDescription() const
Return a brief description.
Definition BeanLike.h:87
F getParameter(const std::string &p) const
Gets a single parameter.
Definition BeanLike.h:99
void setParameter(const std::string &p, const VariableT< T > &value)
Definition BeanLike.h:221
void setParameters(const std::map< std::string, T > &args)
Set parameters.
Definition BeanLike.h:188
void setParameter(const std::string &p, std::initializer_list< F > value)
Sets a single parameter.
Definition BeanLike.h:249
virtual void setParameters(const std::string &p, char assignmentSymbol='=', char separatorSymbol=0)
Sets comma-separated parameters in a predetermined order "a,b,c" or by specifing them "b=2".
Definition BeanLike.h:177
void setParameters(std::initializer_list< Variable::init_pair_t > args)
Grants access to (if above hidden)
Definition BeanLike.h:144
void setParameters(const SmartMap< T > &args)
Set parameters.
Definition BeanLike.h:201
void setParameter(const std::string &p, const F &value)
Sets a single parameter.
Definition BeanLike.h:239
void setParameter(const std::string &p, const Castable &value)
Sets a single parameter.
Definition BeanLike.h:211
virtual void storeLastArguments(const std::string &p)
Called after setParameters()
Definition BeanLike.h:292
virtual void updateBean() const
Called after setParameters()
Definition BeanLike.h:296
Definition ReferenceMap.h:207
void copyStruct(const ReferenceMap &m, const T &src, T &dst, extLinkPolicy policy=RESERVE)
Experimental. Copies references and values of a structure to another.
Definition ReferenceMap.h:399
@ RESERVE
Definition ReferenceMap.h:385
A base class for smart maps providing methods for importing and exporting values, among others.
Definition SmartMap.h:66
Definition StringBuilder.h:58
VariableT is a final class applied through typedefs Variable, Reference and FlexibleVariable.
Definition VariableT.h:87
Definition DataSelector.cpp:1277