ReverseIterator.Random.tlh 1017 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #pragma once
  2. #include "ReverseIterator.Base.tlh"
  3. //-----------------------------------------------------------------------------
  4. // RandomIterator
  5. // 支持随机访问的迭代器
  6. //-----------------------------------------------------------------------------
  7. namespace ReverseIterator
  8. {
  9. template <typename IterType>
  10. class __RandomIterator : public __BaseIterator <IterType>
  11. {
  12. public:
  13. /// 之前的 Array::Iterator 有防护功能, 因此这里也限制过分的增减
  14. inline void Step (int delta)
  15. {
  16. if (delta > 0)
  17. {
  18. if (m_Index - delta < 0)
  19. {
  20. m_Index = -1;
  21. Iter = _end;
  22. }
  23. else
  24. {
  25. Iter += delta;
  26. m_Index -= delta;
  27. }
  28. }
  29. else
  30. // if (delta < 0)
  31. {
  32. if (m_Index - delta >= m_Count)
  33. {
  34. m_Index = m_Count;
  35. Iter = _end;
  36. }
  37. else
  38. {
  39. Iter += delta;
  40. m_Index -= delta;
  41. }
  42. }
  43. }
  44. inline void operator += (int NumberOfStep)
  45. {
  46. Step (NumberOfStep);
  47. }
  48. inline void operator -= (int NumberOfStep)
  49. {
  50. Step (-NumberOfStep);
  51. }
  52. };
  53. }