uox3/source/cThreadQueue.cpp
2022-06-11 07:55:06 -04:00

56 lines
1.9 KiB
C++

#include "cThreadQueue.h"
#include <algorithm>
//==============================================================================
// We instantiate this right at the start
CThreadQueue messageLoop;
//=============================================================
auto CThreadQueue::operator<<( MessageType newMessage )->CThreadQueue & {
NewMessage( newMessage, "" );
return (*this);
}
//=============================================================
auto CThreadQueue::operator <<( char *toPush ) ->CThreadQueue & {
NewMessage( MSG_PRINT, toPush );
return (*this);
}
//=============================================================
auto CThreadQueue::operator <<( const char *toPush )->CThreadQueue & {
NewMessage( MSG_PRINT, toPush );
return ( *this );
}
//=============================================================
auto CThreadQueue::operator <<( const std::string& toPush )->CThreadQueue & {
NewMessage( MSG_PRINT, toPush.c_str() );
return ( *this );
}
//=============================================================
auto CThreadQueue::Empty()->bool {
std::scoped_lock lock(queuelock);
bool retVal = internalQueue.empty();
return retVal;
}
//=============================================================
auto CThreadQueue::GrabMessage()->MessagePassed {
std::scoped_lock lock(queuelock);
MessagePassed toReturn = internalQueue.front();
internalQueue.pop();
return toReturn;
}
//=============================================================
auto CThreadQueue::NewMessage( MessageType toAdd, const std::string& data )->void{
MessagePassed adding;
adding.actualMessage = toAdd;
adding.data = data ;
std::scoped_lock lock(queuelock);
internalQueue.push( adding );
}
//=============================================================
auto CThreadQueue::bulkData() ->std::queue<MessagePassed> {
std::queue<MessagePassed> returnQueue;
std::scoped_lock lock(queuelock);
std::swap(returnQueue,internalQueue) ;
return returnQueue;
}