Iterator.Sequence.tlh 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include "Iterator.Base.tlh"
  3. //-----------------------------------------------------------------------------
  4. // SequenceIterator
  5. // 只支持顺序访问, 但是又想要 Skip 功能的迭代器
  6. //-----------------------------------------------------------------------------
  7. namespace Iterator
  8. {
  9. template <typename IterType>
  10. class __SequenceIterator : public __BaseIterator <IterType>
  11. {
  12. public:
  13. /// 之前的 Array::Iterator 有防护功能, 因此这里也限制过分的增减
  14. inline void Skip (int delta)
  15. {
  16. if (delta == 0) return;
  17. if (delta > 0)
  18. {
  19. if (m_Index + delta >= m_Count)
  20. {
  21. m_Index = m_Count;
  22. m_stdIter = m_stdEnd;
  23. }
  24. else
  25. {
  26. for (int Index = 0; Index < delta; Index ++)
  27. m_stdIter ++;
  28. m_Index += delta;
  29. }
  30. }
  31. else
  32. // if (delta < 0)
  33. {
  34. if (m_Index + delta < 0)
  35. {
  36. m_Index = -1;
  37. m_stdIter = m_stdEnd;
  38. }
  39. else
  40. {
  41. for (int Index = 0; Index < -delta; Index ++)
  42. m_stdIter --;
  43. m_Index += delta;
  44. }
  45. }
  46. }
  47. inline void operator += (int N)
  48. {
  49. Skip (N);
  50. }
  51. inline void operator -= (int N)
  52. {
  53. Skip (-N);
  54. }
  55. };
  56. }