Iterator.Random.tlh 987 B

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