#pragma once #include "Iterator.Base.tlh" //----------------------------------------------------------------------------- // SequenceIterator // 只支持顺序访问, 但是又想要 Skip 功能的迭代器 //----------------------------------------------------------------------------- namespace Iterator { template class __SequenceIterator : public __BaseIterator { 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); } }; }