// 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-2007 Emergent Game Technologies. // All Rights Reserved. // // Emergent Game Technologies, Chapel Hill, North Carolina 27517 // http://www.emergent.net //--------------------------------------------------------------------------- // NiTListBase inline functions //--------------------------------------------------------------------------- template inline NiTListBase::NiTListBase() { m_kAllocator.m_uiCount = 0; m_pkHead = 0; m_pkTail = 0; } //--------------------------------------------------------------------------- template inline NiTListBase::~NiTListBase() { // RemoveAll() must be called from derived classes as it relies on // the pure virtual DeleteItem(). If RemoveAll is called here without // being called in the derived class, R6025 runtime error will be // generated (pure virtual function called). } //--------------------------------------------------------------------------- template inline unsigned int NiTListBase::GetSize() const { return m_kAllocator.m_uiCount; } //--------------------------------------------------------------------------- template inline bool NiTListBase::IsEmpty() const { return m_kAllocator.m_uiCount == 0; } //--------------------------------------------------------------------------- template inline void NiTListBase::RemoveAll() { NiTListItem* pkCurr = m_pkHead; while (pkCurr) { NiTListItem* pkDel = pkCurr; pkCurr = pkCurr->m_pkNext; DeleteItem(pkDel); } m_kAllocator.m_uiCount = 0; m_pkHead = 0; m_pkTail = 0; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase::GetHeadPos() const { return m_pkHead; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase::GetTailPos() const { return m_pkTail; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase:: GetNextPos(NiTListIterator kPos) const { return kPos ? ((NiTListItem*) kPos)->m_pkNext : 0; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase:: GetPrevPos(NiTListIterator kPos) const { return kPos ? ((NiTListItem*) kPos)->m_pkPrev : 0; } //--------------------------------------------------------------------------- template inline void NiTListBase::AddNodeHead(NiTListItem* pkNode) { pkNode->m_pkPrev = 0; pkNode->m_pkNext = m_pkHead; if (m_pkHead) m_pkHead->m_pkPrev = pkNode; else m_pkTail = pkNode; m_pkHead = pkNode; m_kAllocator.m_uiCount++; } //--------------------------------------------------------------------------- template inline void NiTListBase::AddNodeTail(NiTListItem* pkNode) { pkNode->m_pkNext = 0; pkNode->m_pkPrev = m_pkTail; if (m_pkTail) m_pkTail->m_pkNext = pkNode; else m_pkHead = pkNode; m_pkTail = pkNode; m_kAllocator.m_uiCount++; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase:: AddNodeBefore(NiTListIterator kPos, NiTListItem* pkNode) { NiTListItem* pkNext = (NiTListItem*) kPos; pkNode->m_pkNext = pkNext; pkNode->m_pkPrev = pkNext->m_pkPrev; if (pkNext->m_pkPrev) pkNext->m_pkPrev->m_pkNext = pkNode; else m_pkHead = pkNode; pkNext->m_pkPrev = pkNode; m_kAllocator.m_uiCount++; return pkNode; } //--------------------------------------------------------------------------- template inline NiTListIterator NiTListBase:: AddNodeAfter(NiTListIterator kPos, NiTListItem* pkNode) { NiTListItem* pkPrev = (NiTListItem*) kPos; pkNode->m_pkPrev = pkPrev; pkNode->m_pkNext = pkPrev->m_pkNext; if (pkPrev->m_pkNext) pkPrev->m_pkNext->m_pkPrev = pkNode; else m_pkTail = pkNode; pkPrev->m_pkNext = pkNode; m_kAllocator.m_uiCount++; return pkNode; } //---------------------------------------------------------------------------