6 #ifndef TAPKEE_PARAMETERS_H_ 7 #define TAPKEE_PARAMETERS_H_ 31 operator std::string()
51 Parameter(
const ParameterName& pname,
const T& value) :
52 valid(true), invalidity_reason(),
53 parameter_name(pname), keeper(tapkee_internal::ValueKeeper(value))
66 valid(false), invalidity_reason(),
67 parameter_name(
"unknown"), keeper(tapkee_internal::ValueKeeper())
72 valid(p.valid), invalidity_reason(p.invalidity_reason),
73 parameter_name(p.name()), keeper(p.keeper)
100 return getValue<T>();
110 template <
typename T>
113 if (!isTypeCorrect<T>())
115 T kv = keeper.getValue<T>();
121 template <
typename T>
129 template <
typename T>
132 return keeper.inRange<T>(lower, upper);
135 template <
typename T>
138 return keeper.equal<T>(value);
141 template <
typename T>
144 return keeper.notEqual<T>(value);
149 return keeper.positive();
154 return keeper.nonNegative();
159 return keeper.negative();
162 template <
typename T>
165 return keeper.greater<T>(lower);
168 template <
typename T>
171 return keeper.lesser<T>(upper);
176 return keeper.isInitialized();
181 return parameter_name;
188 template <
typename T>
191 return keeper.getValue<T>();
194 template <
typename T>
197 return keeper.isTypeCorrect<T>();
203 invalidity_reason = reason;
231 template <
typename T>
234 return parameter.is<T>(v);
237 template <
typename T>
243 template <
typename T>
246 if (!parameter.isInRange(lower, upper))
249 (
Message() <<
"Value of " << parameter.name() <<
" " 250 << parameter.getValue<T>() <<
" doesn't fit the range [" <<
251 lower <<
", " << upper <<
")");
252 parameter.invalidate(reason);
257 template <
typename T>
260 if (!parameter.isInRange(lower, upper) && !parameter.is(upper))
263 (
Message() <<
"Value of " << parameter.name() <<
" " 264 << parameter.getValue<T>() <<
" doesn't fit the range [" <<
265 lower <<
", " << upper <<
"]");
266 parameter.invalidate(reason);
273 if (!parameter.isPositive())
276 (
Message() <<
"Value of " << parameter.name() <<
" is not positive");
277 parameter.invalidate(reason);
284 if (!parameter.isNonNegative())
287 (
Message() <<
"Value of " << parameter.name() <<
" is negative");
288 parameter.invalidate(reason);
316 if (pmap.count(p.
name()))
323 return pmap.count(name) > 0;
327 typedef ParametersMap::const_iterator MapIter;
328 for (MapIter iter = pg.
pmap.begin(); iter!=pg.
pmap.end(); ++iter)
330 if (!pmap.count(iter->first))
332 pmap[iter->first] = iter->second;
338 ParametersMap::const_iterator it = pmap.find(name);
339 if (it != pmap.end())
CheckedParameter(Parameter &p)
An exception type that is thrown in case if wrong parameter value is passed.
CheckedParameter & positive()
static Parameter create(const std::string &name, const T &value)
tapkee_internal::ValueKeeper keeper
Parameter(const Parameter &p)
An exception type that is thrown in case of missed parameter, i.e. when some required parameter is no...
CheckedParameter checked()
bool isEqual(T value) const
ParametersSet operator,(const Parameter &p)
Parameter(const ParameterName &pname, const T &value)
ParameterName parameter_name
void invalidate(const std::string &reason)
An exception type that is thrown when some parameter is passed more than once.
bool isNonNegative() const
bool isLesser(T upper) const
bool operator==(T v) const
bool isInRange(T lower, T upper) const
bool isInitialized() const
std::string invalidity_reason
bool isNotEqual(T value) const
Message & operator<<(const T &data)
CheckedParameter & inRange(T lower, T upper)
CheckedParameter & nonNegative()
std::string ParameterName
bool isGreater(T lower) const
Parameter withDefault(T value)
ParameterName name() const
bool isTypeCorrect() const
CheckedParameter & inClosedRange(T lower, T upper)