// EMERGENT GAME TECHNOLOGIES PROPRIETARY INFORMATION // // This software is supplied under the terms of a license agreement or // nondisclosure agreement with Emergent Game Technologies and may not // be copied or disclosed except in accordance with the terms of that // agreement. // // Copyright (c) 1996-2008 Emergent Game Technologies. // All Rights Reserved. // // Emergent Game Technologies, Chapel Hill, North Carolina 27517 // http://www.emergent.net //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator::NiTStridedRandomAccessIterator() : m_pcObject(0) , m_dtStride(0) { } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator::NiTStridedRandomAccessIterator( T* pkObject, ptrdiff_t dtStride) : m_pcObject((char*)pkObject) , m_dtStride(dtStride) { } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::Exists() const { return m_pcObject != 0; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator& NiTStridedRandomAccessIterator ::operator++() { m_pcObject += m_dtStride; return *this; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator& NiTStridedRandomAccessIterator ::operator--() { m_pcObject -= m_dtStride; return *this; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator NiTStridedRandomAccessIterator ::operator++(int) { NiTStridedRandomAccessIterator kResult(reinterpret_cast(m_pcObject), m_dtStride); m_pcObject += m_dtStride; return kResult; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator NiTStridedRandomAccessIterator ::operator--(int) { NiTStridedRandomAccessIterator kResult(reinterpret_cast(m_pcObject), m_dtStride); m_pcObject -= m_dtStride; return kResult; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator& NiTStridedRandomAccessIterator ::operator+=(ptrdiff_t dtElements) { m_pcObject += m_dtStride * dtElements; return *this; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator& NiTStridedRandomAccessIterator ::operator-=(ptrdiff_t dtElements) { m_pcObject -= m_dtStride * dtElements; return *this; } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator NiTStridedRandomAccessIterator ::operator+(ptrdiff_t dtElements) const { return NiTStridedRandomAccessIterator( reinterpret_cast(m_pcObject + m_dtStride * dtElements), m_dtStride); } //--------------------------------------------------------------------------- template inline NiTStridedRandomAccessIterator NiTStridedRandomAccessIterator ::operator-(ptrdiff_t dtElements) const { return NiTStridedRandomAccessIterator( reinterpret_cast(m_pcObject - m_dtStride * dtElements), m_dtStride); } //--------------------------------------------------------------------------- template inline ptrdiff_t NiTStridedRandomAccessIterator::operator-( const NiTStridedRandomAccessIterator& kRhs) const { return (m_pcObject - kRhs.m_pcObject) / m_dtStride; } //--------------------------------------------------------------------------- template inline T& NiTStridedRandomAccessIterator::operator*() const { return *reinterpret_cast(m_pcObject); } //--------------------------------------------------------------------------- template inline T* NiTStridedRandomAccessIterator::operator->() const { return reinterpret_cast(m_pcObject); } //--------------------------------------------------------------------------- template inline T& NiTStridedRandomAccessIterator::operator[](size_t stIndex) const { return *reinterpret_cast(m_pcObject + m_dtStride * stIndex); } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator==( const NiTStridedRandomAccessIterator& kRhs) const { bool bTest1 = m_pcObject == kRhs.m_pcObject; bool bTest2 = m_dtStride == kRhs.m_dtStride; return bTest1 && bTest2; } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator!=( const NiTStridedRandomAccessIterator& kRhs) const { bool bTest1 = m_pcObject != kRhs.m_pcObject; bool bTest2 = m_dtStride != kRhs.m_dtStride; return bTest1 || bTest2; } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator<( const NiTStridedRandomAccessIterator& kRhs) const { return m_pcObject < kRhs.m_pcObject; } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator>( const NiTStridedRandomAccessIterator& kRhs) const { return m_pcObject > kRhs.m_pcObject; } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator<=( const NiTStridedRandomAccessIterator& kRhs) const { return m_pcObject <= kRhs.m_pcObject; } //--------------------------------------------------------------------------- template inline bool NiTStridedRandomAccessIterator::operator>=( const NiTStridedRandomAccessIterator& kRhs) const { return m_pcObject >= kRhs.m_pcObject; } //---------------------------------------------------------------------------