1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- //
- #pragma once
- #include <assert.h>
- #include <vector>
- #include <functional>
- //-----------------------------------------------------------------------------
- // TmplMould
- //-----------------------------------------------------------------------------
- namespace DIOS::Dev::Detail
- {
- template <typename T>
- 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 <typename T> & ar);
- bool ToPrev (const std::vector <typename T> & ar);
- bool ToUpdate (T value, const std::vector <typename T> & ar);
- protected:
- T m_LimitMin;
- T m_LimitMax;
- T m_Accuracy;
- T m_Value;
- };
- template <typename T>
- class TmplMouldWithWarn : public TmplMould <T>
- {
- protected:
- T m_WarningMin;
- T m_WarningMax;
- public:
- std::function <void ()> m_OnWarningMin;
- std::function <void ()> 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);
- }
- };
- }
|