#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 (this->m_Index + delta >= this->m_Count) { this->m_Index = this->m_Count; this->m_stdIter = this->m_stdEnd; } else { for (int Index = 0; Index < delta; Index ++) this->m_stdIter ++; this->m_Index += delta; } } else // if (delta < 0) { if (this->m_Index + delta < 0) { this->m_Index = -1; this->m_stdIter = this->m_stdEnd; } else { for (int Index = 0; Index < -delta; Index ++) this->m_stdIter --; this->m_Index += delta; } } } inline void operator += (int N) { Skip (N); } inline void operator -= (int N) { Skip (-N); } }; }