eis/eqpalg/utility/bound_checker.h

57 lines
1.4 KiB
C
Raw Normal View History

// eqpalg/utility/bound_checker.h
#pragma once
#include <string>
/**
* @brief
*/
enum class DetectMode {
Default = 0, // 双侧检测 (value < down || value > up)
OnlyLeft = 1, // 仅检测左边界 (value < down)
OnlyRight = 2, // 仅检测右边界 (value > up)
ErrorMode = 3 // 错误模式
};
/**
* @brief
*
* ExpBase -32768/32767
*/
class BoundChecker {
public:
BoundChecker() = default;
/**
* @brief
* @param down -32768
* @param up 32767/32768
*/
void setLimits(double down, double up);
/**
* @brief
*/
void setDetectMode(DetectMode mode) { detect_mode_ = mode; }
/**
* @brief value
*/
bool isOutOfBounds(double value) const;
// 访问器
double limitDown() const { return limit_down_; }
double limitUp() const { return limit_up_; }
DetectMode detectMode() const { return detect_mode_; }
/**
* @brief
*/
bool isValid() const { return detect_mode_ != DetectMode::ErrorMode; }
private:
double limit_down_ = -32768;
double limit_up_ = -32768;
DetectMode detect_mode_ = DetectMode::Default;
};