#ifndef NETWORK_DEPENDENCIES_POST_BOX_H #define NETWORK_DEPENDENCIES_POST_BOX_H ///////////////////////////////////// // Created by Pontus Fransson 2013 // ///////////////////////////////////// #include "IPostBox.h" #include "../../Misc/Thread/OysterMutex.h" #include "../../Misc/ThreadSafeQueue.h" namespace Oyster { namespace Network { //With this class you can post items to it and then fetch them somewhere else. //It is thread safe beacause of the ThreadSafeQueue. template class PostBox : public IPostBox { public: PostBox(); virtual ~PostBox(); virtual void PostMessage(T& message); virtual T FetchMessage(); virtual bool IsFull(); private: Utility::Container::ThreadSafeQueue messages; }; //Implementation of PostBox template PostBox::PostBox() { } template PostBox::~PostBox() { } template void PostBox::PostMessage(T& message) { messages.Push(message); } template T PostBox::FetchMessage() { return messages.Pop(); } template bool PostBox::IsFull() { return !messages.IsEmpty(); } } } #endif