12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #pragma once
- #include "Iterator.Base.tlh"
- //-----------------------------------------------------------------------------
- // SequenceIterator
- // 只支持顺序访问, 但是又想要 Skip 功能的迭代器
- //-----------------------------------------------------------------------------
- namespace Iterator
- {
- template <typename IterType>
- class __SequenceIterator : public __BaseIterator <IterType>
- {
- public:
- /// 之前的 Array::Iterator 有防护功能, 因此这里也限制过分的增减
- inline void Skip (int delta)
- {
- if (delta == 0) return;
- if (delta > 0)
- {
- if (m_Index + delta >= m_Count)
- {
- m_Index = m_Count;
- m_stdIter = m_stdEnd;
- }
- else
- {
- for (int Index = 0; Index < delta; Index ++)
- m_stdIter ++;
- m_Index += delta;
- }
- }
- else
- // if (delta < 0)
- {
- if (m_Index + delta < 0)
- {
- m_Index = -1;
- m_stdIter = m_stdEnd;
- }
- else
- {
- for (int Index = 0; Index < -delta; Index ++)
- m_stdIter --;
- m_Index += delta;
- }
- }
- }
- inline void operator += (int N)
- {
- Skip (N);
- }
- inline void operator -= (int N)
- {
- Skip (-N);
- }
- };
- }
|