TmplMould.tlh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //
  2. #pragma once
  3. #include <assert.h>
  4. #include <vector>
  5. #include <functional>
  6. //-----------------------------------------------------------------------------
  7. // TmplMould
  8. //-----------------------------------------------------------------------------
  9. namespace DIOS::Dev::Detail
  10. {
  11. template <typename T>
  12. class TmplMould
  13. {
  14. public:
  15. TmplMould (T init, T min, T max, T accuracy)
  16. {
  17. m_Value = init;
  18. m_LimitMin = min;
  19. m_LimitMax = max;
  20. m_Accuracy = accuracy;
  21. assert (m_LimitMin < m_LimitMax);
  22. }
  23. public:
  24. bool CanInc () const; // 能加 1 吗
  25. bool CanDec () const; // 能减 1 吗
  26. bool Verify (T value) const; // 值在界限内吗
  27. bool Inc (); // 加 1
  28. bool Dec (); // 减 1
  29. bool Update (T value); // 更新为指定值
  30. T Get () const; // 获得当前值
  31. bool ToNext (const std::vector <typename T> & ar);
  32. bool ToPrev (const std::vector <typename T> & ar);
  33. bool ToUpdate (T value, const std::vector <typename T> & ar);
  34. protected:
  35. T m_LimitMin;
  36. T m_LimitMax;
  37. T m_Accuracy;
  38. T m_Value;
  39. };
  40. template <typename T>
  41. class TmplMouldWithWarn : public TmplMould <T>
  42. {
  43. protected:
  44. T m_WarningMin;
  45. T m_WarningMax;
  46. public:
  47. std::function <void ()> m_OnWarningMin;
  48. std::function <void ()> m_OnWarningMax;
  49. public:
  50. using super = TmplMould;
  51. TmplMouldWithWarn(T init, T min, T WarnMin, T WarnMax, T max, T accuracy)
  52. :super(init, min, max, accuracy)
  53. {
  54. m_WarningMin = WarnMin;
  55. m_WarningMax = WarnMax;
  56. assert(m_WarningMin < m_WarningMax);
  57. }
  58. };
  59. }