/* * Copyright (c) 2014, Oculus VR, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ /// \file DS_QueueLinkedList.h /// \internal /// \brief A queue implemented as a linked list. /// #ifndef __QUEUE_LINKED_LIST_H #define __QUEUE_LINKED_LIST_H #include "DS_LinkedList.hpp" #include "Export.hpp" #include "RakMemoryOverride.hpp" /// 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: 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