Files
GdCpp12/include/json/ParaHelper_core.h

71 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef _PARAHELPER_CORE_H
#define _PARAHELPER_CORE_H
/// \brief 定义整形、浮点型参数的缺省值和取值范围类型T可以为8/16/32/64位的有符号或无符号数、float/double。
template <typename T>
struct sParaRange
{
/// 默认构造后不能直接使用必须正确设置Def/Min/Max参数才能使用
sParaRange() = default;
/// 带所有参数测构造函数。当所有参数都是常数或constexpr时构造的实例可以是constexpr
constexpr sParaRange(const T &def, const T & min, const T & max, const T& step=1, int dec=2)
: Def(def), Min(min), Max(max), Step(step)
, Decimal(dec)
{
}
/// 必须设的参数:缺省值, 最小值, 最大值。默认构造为0是没法使用的
T Def=0, Min=0, Max=0;
/// 可选设置的参数在UI控件中调整参数的步进值默认为1
T Step=1;
/// 小数位数仅用于float/double浮点型数据整形数据忽略此项
int Decimal=2;
/// 判断输入参数是否在[Min, Max]范围内
bool inRange(const T & val) const {
return (val>=Min && val <= Max);
}
/// @brief 校验参数如果小于Min设置为Min大于Max设置为Max
bool verify(T& val) const {
if (val < Min) { val = Min; return false; }
else if (val > Max) { val = Max; return false; }
else return true;
}
/// @brief 校验参数如果小于Min设置为Min大于Max设置为Max
/// @param err 误差值,多用于浮点数比较
bool verify(T& val, const T err) const {
if (val < Min-err) { val = Min; return false; }
else if (val > Max+err) { val = Max; return false; }
else return true;
}
/// @brief 校验参数,如果超出范围,设置为缺省值
bool verifyToDefault(T& val) const{
if (val <Min || val > Max) { val = Def; return false;}
else return true;
}
/// @brief 校验参数,如果超出范围,设置为缺省值
bool verifyToDefault(T& val, const T err) const {
if (val <Min-err || val > Max+err) { val = Def; return false; }
else return true;
}
sParaRange operator+(T d) const
{
return sParaRange(Def + d, Min + d, Max + d, Step, Decimal);
}
sParaRange operator-(T d) const
{
return sParaRange(Def - d, Min - d, Max - d, Step, Decimal);
}
};
#endif