/* * Value_impl.hpp * * Created on: Apr 13, 2012 * Author: ankele */ #ifndef VALUE_IMPL_HPP_ #define VALUE_IMPL_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include #include "CodePatterns/Assert.hpp" #include "CodePatterns/Log.hpp" #include "Validators/DiscreteValidator.hpp" #include "Validators/RangeValidator.hpp" /** Constructor of class Value. */ template Value::Value() : ValueSet(false), validator(NULL) {} /** Constructor of class Value with a validator. * * @param _validator general validator to use */ template Value::Value(const Validator &_validator) : ValueSet(false), validator(_validator.clone()) {} /** Constructor of class Value with a discrete validator. * * @param _ValidValues vector with all valid values */ template Value::Value(const std::vector &_ValidValues) : ValueSet(false), validator(NULL) { validator = new DiscreteValidator(_ValidValues); } /** Constructor of class Value with a range validator. * * @param _ValidRange range of valid values */ template Value::Value(const range &_ValidRange) : ValueSet(false), validator(NULL) { validator = new RangeValidator(_ValidRange); } /** Destructor of class Value. */ template Value::~Value() { if (validator) delete(validator); } /** Checks whether \a _value is a valid value. * \param _value value to check for validity. * \return true - \a _value is valid, false - is not */ template bool Value::isValid(const T & _value) const { if (validator) return (*validator)(_value); return true; } /** Compares this discrete value against another \a _instance. * * @param _instance other value to compare to * @return true - if value and valid ranges are the same, false - else */ template bool Value::operator==(const Value &_instance) const { bool status = true; status = status && (*validator == *_instance.validator); status = status && (ValueSet == _instance.ValueSet); if (ValueSet && _instance.ValueSet) status = status && (value == _instance.value); return status; } /** Getter of value * * @return value */ template const T & Value::get() const { ASSERT(ValueSet, "Value::get() - value has never been set."); return value; } /** Setter of value * * @param _value new value */ template void Value::set(const T & _value) { ASSERT(isValid(_value), "Value::setValue() - trying to set invalid value "+toString(_value)+"."); if (!ValueSet) ValueSet = true; value = _value; } /** Returns the validator as a const reference. * * @return the validator */ template const Validator &Value::getValidator() const { return *validator; } /** Returns the validator. * * @return the validator */ template Validator &Value::getValidator() { return *validator; } #endif /* VALUE_IMPL_HPP_ */