Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//-------------------------------------------------------------------------------------------------- // qhList.inl // // Copyright(C) 2011 by D. Gregorius. All rights reserved. //--------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------- // qhListNode //-------------------------------------------------------------------------------------------------- template < typename T > inline void qhInsert( T* Node, T* Where ) { QH_ASSERT( !qhInList( Node ) && qhInList( Where ) );
Node->Prev = Where->Prev; Node->Next = Where;
Node->Prev->Next = Node; Node->Next->Prev = Node; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhRemove( T* Node ) { QH_ASSERT( qhInList( Node ) );
Node->Prev->Next = Node->Next; Node->Next->Prev = Node->Prev;
Node->Prev = NULL; Node->Next = NULL; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline bool qhInList( T* Node ) { return Node->Prev != NULL && Node->Next != NULL; }
//-------------------------------------------------------------------------------------------------- // qhList //-------------------------------------------------------------------------------------------------- template < typename T > inline qhList< T >::qhList( void ) { mHead.Prev = &mHead; mHead.Next = &mHead; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline int qhList< T >::Size( void ) const { int Count = 0; for ( const T* Node = Begin(); Node != End(); Node = Node->Next ) { Count++; }
return Count; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline bool qhList< T >::Empty( void ) const { return mHead.Next == &mHead; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::Clear( void ) { mHead.Prev = &mHead; mHead.Next = &mHead; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::PushFront( T* Node ) { qhInsert( Node, mHead.Next ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::PopFront( void ) { QH_ASSERT( !Empty() );
T* Node = mHead.Next; qhRemove( Node ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::PushBack( T* Node ) { qhInsert( Node, mHead.Prev ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::PopBack( void ) { QH_ASSERT( !Empty() );
T* Node = mHead.Prev; qhRemove( Node ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::Insert( T* Node, T* Where ) { qhInsert( Node, Where ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline void qhList< T >::Remove( T* Node ) { qhRemove( Node ); }
//-------------------------------------------------------------------------------------------------- template < typename T > inline int qhList< T >::IndexOf( const T* Node ) const { int Index = 0; for ( const T* First = Begin(); First != End(); First = First->Next ) { if ( First == Node ) { return Index; }
Index++; }
return -1; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline T* qhList< T >::Begin( void ) { return mHead.Next; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline const T* qhList< T >::Begin( void ) const { return mHead.Next; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline T* qhList< T >::End( void ) { return &mHead; }
//-------------------------------------------------------------------------------------------------- template < typename T > inline const T* qhList< T >::End( void ) const { return &mHead; }
|