#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 bool FetchMessage(T& message); virtual bool IsFull(); private: Oyster::Queue::ThreadSafeQueue messages; }; //Implementation of PostBox template PostBox::PostBox() { } template PostBox::~PostBox() { } template void PostBox::PostMessage(T& message) { messages.Push(message); } template bool PostBox::FetchMessage(T& message) { if(IsFull()) { message = messages.Pop(); return true; } return false; } template bool PostBox::IsFull() { return !messages.IsEmpty(); } } } #endif