// #pragma once #include #include #include //----------------------------------------------------------------------------- // TmplMould //----------------------------------------------------------------------------- namespace DIOS::Dev::Detail { template class TmplMould { public: TmplMould (T init, T min, T max, T accuracy) { m_Value = init; m_LimitMin = min; m_LimitMax = max; m_Accuracy = accuracy; assert (m_LimitMin < m_LimitMax); } public: bool CanInc () const; // 能加 1 吗 bool CanDec () const; // 能减 1 吗 bool Verify (T value) const; // 值在界限内吗 bool Inc (); // 加 1 bool Dec (); // 减 1 bool Update (T value); // 更新为指定值 T Get () const; // 获得当前值 bool ToNext (const std::vector & ar); bool ToPrev (const std::vector & ar); bool ToUpdate (T value, const std::vector & ar); protected: T m_LimitMin; T m_LimitMax; T m_Accuracy; T m_Value; }; template class TmplMouldWithWarn : public TmplMould { protected: T m_WarningMin; T m_WarningMax; public: std::function m_OnWarningMin; std::function m_OnWarningMax; public: using super = TmplMould; TmplMouldWithWarn(T init, T min, T WarnMin, T WarnMax, T max, T accuracy) :super(init, min, max, accuracy) { m_WarningMin = WarnMin; m_WarningMax = WarnMax; assert(m_WarningMin < m_WarningMax); } }; }