123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- //
- #pragma once
- #include "TmplMould.tlh"
- //-----------------------------------------------------------------------------
- // TmplMould
- //-----------------------------------------------------------------------------
- namespace DIOS::Dev::Detail
- {
- template <typename T>
- bool TmplMould <T>::CanInc () const
- {
- return m_Value < m_LimitMax;
- }
- template <typename T>
- bool TmplMould <T>::CanDec () const
- {
- return m_Value > m_LimitMin;
- }
- template <typename T>
- bool TmplMould <T>::Verify (T value) const
- {
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- template <typename T>
- bool TmplMould <T>::Inc ()
- {
- if (m_Value >= m_LimitMax) return false;
- m_Value += m_Accuracy;
- return true;
- }
- template <typename T>
- bool TmplMould <T>::Dec ()
- {
- if (m_Value <= m_LimitMin) return false;
- m_Value -= m_Accuracy;
- return true;
- }
- template <typename T>
- bool TmplMould <T>::Update (T value)
- {
- if (value < m_LimitMin) return false;
- if (value > m_LimitMax) return false;
- if(value== m_Value) return false;
- m_Value = value;
- return true;
- }
- template <typename T>
- bool TmplMould <T>::UpdateLimitMax(T value)
- {
- m_LimitMax = value;
- return true;
- }
- template <typename T>
- bool TmplMould <T>::UpdateLimitMin(T value)
- {
- m_LimitMin = value;
- return true;
- }
- template <typename T>
- T TmplMould <T>::Get () const { return m_Value; }
- template <typename T>
- T TmplMould <T>::GetLimitMax() const { return m_LimitMax; }
- template <typename T>
- T TmplMould <T>::GetLimitMin() const { return m_LimitMin; }
- //change by wxx for 万东:丰富基类方法(要求ar按从小到大排列) 20230803
- template <typename T>
- bool TmplMould <T>::CanToNext(T & value, const std::vector <typename T>& ar)
- {
- value = m_Value;
- int setSize = ar.size();
- for (int i = 0; i < setSize; i++)
- {
- if (ar[i] == value)
- {
- if (i < setSize - 1)
- {
- value = ar[i + 1];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- }
- else if (ar[i] - value > FLT_MIN)
- {
- value = ar[i];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- }
- return false;
- }
- template <typename T>
- bool TmplMould <T>::CanToPrev(T & value, const std::vector <typename T>& ar)
- {
- value = m_Value;
- int setSize = ar.size();
- for (int i = setSize - 1; i >=0; i--)
- {
- if (ar[i] == value)
- {
- if (i > 0)
- {
- value = ar[i - 1];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- }
- else if (value - ar[i] > FLT_MIN)
- {
- value = ar[i];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- }
- return false;
- }
- template <typename T>
- bool TmplMould <T>::CanToUpdate(T & value, const std::vector <typename T>& ar)
- {
- int setSize = ar.size();
- if (value <= ar[0])
- {
- value = ar[0];
- return (m_LimitMin <= value && value <= m_LimitMax);;
- }
- else if (value >= ar[setSize - 1])
- {
- value = ar[setSize - 1];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- else
- {
- for (int i = 0; i < setSize - 1; i++)
- {
- if (value == ar[i])
- {
- value = ar[i];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- else if (value == ar[i + 1])
- {
- value = ar[i + 1];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- else if (value > ar[i] && value < ar[i + 1])
- {
- (value - ar[i]) > (ar[i + 1] - value) ? value = ar[i + 1] : value = ar[i];
- return (m_LimitMin <= value && value <= m_LimitMax);
- }
- }
- }
- return false;
- }
- template <typename T>
- bool TmplMould <T>::ToNext (const std::vector <typename T>& ar)
- {
- int setSize = ar.size();
- for (int i = 0; i < setSize; i++)
- {
- if (ar[i] == m_Value)
- {
- if (i < setSize - 1)
- {
- m_Value = ar[i + 1];
- return true;
- }
- }
- else if (ar[i] - m_Value > FLT_MIN)
- {
- m_Value = ar[i];
- return true;
- }
- }
- return false;
- }
- template <typename T>
- bool TmplMould <T>::ToPrev (const std::vector <typename T>& ar)
- {
- int setSize = ar.size();
- for (int i = setSize - 1; i >= 0; i--)
- {
- if (ar[i] == m_Value)
- {
- if (i > 0)
- {
- m_Value = ar[i - 1];
- return true;
- }
- }
- else if (m_Value - ar[i] > FLT_MIN)
- {
- m_Value = ar[i];
- return true;
- }
- }
- return false;
- }
- template <typename T>
- bool TmplMould <T>::ToUpdate (T value, const std::vector <typename T>& ar)
- {
- int setSize = ar.size();
- if (value <= ar[0])
- {
- m_Value = ar[0];
- return true;
- }
- else if(value >= ar[setSize -1])
- {
- m_Value = ar[setSize - 1];
- return true;
- }
- else
- {
- for (int i = 0; i < setSize - 1; i++)
- {
- if (value == ar[i])
- {
- m_Value = ar[i];
- return true;
- }
- else if (value == ar[i+1])
- {
- m_Value = ar[i+1];
- return true;
- }
- else if (value > ar[i] && value < ar[i + 1])
- {
- (value - ar[i]) > (ar[i + 1] - value) ? m_Value = ar[i + 1] : m_Value = ar[i];
- return true;
- }
- }
- }
- return false;
- }
- };
|