/// \file /// \brief \b [Internal] A queue implemented as a linked list. /// /// This file is part of RakNet Copyright 2003 Kevin Jenkins. /// /// Usage of RakNet is subject to the appropriate license agreement. /// Creative Commons Licensees are subject to the /// license found at /// http://creativecommons.org/licenses/by-nc/2.5/ /// Single application licensees are subject to the license found at /// http://www.jenkinssoftware.com/SingleApplicationLicense.html /// Custom license users are subject to the terms therein. /// GPL license users are subject to the GNU General Public /// License as published by the Free /// Software Foundation; either version 2 of the License, or (at your /// option) any later version. #ifndef __QUEUE_LINKED_LIST_H #define __QUEUE_LINKED_LIST_H #include "DS_LinkedList.h" #include "Export.h" #include "RakMemoryOverride.h" /// The namespace DataStructures was only added to avoid compiler errors for commonly named data structures /// As these data structures are stand-alone, you can use them outside of RakNet for your own projects if you wish. namespace DataStructures { /// \brief A queue implemented using a linked list. Rarely used. template class RAK_DLL_EXPORT QueueLinkedList : public RakNet::RakMemoryOverride { public: QueueLinkedList(); QueueLinkedList( const QueueLinkedList& original_copy ); bool operator= ( const QueueLinkedList& original_copy ); QueueType Pop( void ); QueueType& Peek( void ); QueueType& EndPeek( void ); void Push( const QueueType& input ); unsigned int Size( void ); void Clear( void ); void Compress( void ); private: LinkedList data; }; template QueueLinkedList::QueueLinkedList() { } template inline unsigned int QueueLinkedList::Size() { return data.Size(); } template inline QueueType QueueLinkedList::Pop( void ) { data.Beginning(); return ( QueueType ) data.Pop(); } template inline QueueType& QueueLinkedList::Peek( void ) { data.Beginning(); return ( QueueType ) data.Peek(); } template inline QueueType& QueueLinkedList::EndPeek( void ) { data.End(); return ( QueueType ) data.Peek(); } template void QueueLinkedList::Push( const QueueType& input ) { data.End(); data.Add( input ); } template QueueLinkedList::QueueLinkedList( const QueueLinkedList& original_copy ) { data = original_copy.data; } template bool QueueLinkedList::operator= ( const QueueLinkedList& original_copy ) { if ( ( &original_copy ) == this ) return false; data = original_copy.data; } template void QueueLinkedList::Clear ( void ) { data.Clear(); } } // End namespace #endif