#ifndef __NumericParameter_h__ #define __NumericParameter_h__ #include #include #include "Parameter.h" #include #include #include #include namespace GenParam { /** Class of a numeric parameter. The user can define min/max values for this parameter type */ template class NumericParameter : public Parameter { protected: T m_minValue; T m_maxValue; public: NumericParameter(const std::string& name, const std::string& label, T* valuePtr) : Parameter(name, label, ParameterBase::INT32, valuePtr) { setType(m_minValue); m_maxValue = std::numeric_limits::max(); m_minValue = std::numeric_limits::lowest(); Parameter::m_setValue = [&, valuePtr](T value) { *valuePtr = std::max(std::min(value, m_maxValue), m_minValue); }; } NumericParameter(const std::string& name, const std::string& label, ParameterBase::GetFunc getValue, ParameterBase::SetFunc setValue) : Parameter(name, label, ParameterBase::INT32, getValue, setValue) { setType(m_minValue); m_maxValue = std::numeric_limits::max(); m_minValue = std::numeric_limits::lowest(); } virtual ~NumericParameter() {} T getMinValue() const { return m_minValue; } void setMinValue(const T val) { m_minValue = val; } T getMaxValue() const { return m_maxValue; } void setMaxValue(const T val) { m_maxValue = val; } template void setType(TN v) {} void setType(char v) { ParameterBase::m_type = ParameterBase::DataTypes::INT8; } void setType(short v) { ParameterBase::m_type = ParameterBase::DataTypes::INT16; } void setType(int v) { ParameterBase::m_type = ParameterBase::DataTypes::INT32; } void setType(unsigned char v) { ParameterBase::m_type = ParameterBase::DataTypes::UINT8; } void setType(unsigned short v) { ParameterBase::m_type = ParameterBase::DataTypes::UINT16; } void setType(unsigned int v) { ParameterBase::m_type = ParameterBase::DataTypes::UINT32; } void setType(float v) { ParameterBase::m_type = ParameterBase::DataTypes::FLOAT; } void setType(double v) { ParameterBase::m_type = ParameterBase::DataTypes::DOUBLE; } }; using FloatParameter = NumericParameter; using DoubleParameter = NumericParameter; using LongDoubleParameter = NumericParameter; using CharParameter = NumericParameter; using UnsignedShortParameter = NumericParameter; using UnsignedIntParameter = NumericParameter; using UnsignedLongParameter = NumericParameter; using SignedCharParameter = NumericParameter; using ShortParameter = NumericParameter; using IntParameter = NumericParameter; using LongParameter = NumericParameter; } #endif