add original source

This commit is contained in:
Bo Wang
2014-04-22 21:54:16 -04:00
parent f7a05be5e1
commit 6e45d14431
128 changed files with 5726 additions and 0 deletions

50
source/listing_c.1.cpp Normal file
View File

@@ -0,0 +1,50 @@
#include
#include
#include
#include
<mutex>
<condition_variable>
<queue>
<memory>
namespace messaging
{
struct message_base
{
virtual ~message_base()
{}
};
template<typename Msg>
struct wrapped_message:
message_base
{
Msg contents;
explicit wrapped_message(Msg const& contents_):
contents(contents_)
{}
};
class queue
{
std::mutex m;
std::condition_variable c;
message_base
std::queue<std::shared_ptr<message_base> > q;
public:
template<typename T>
void push(T const& msg)
{
std::lock_guard<std::mutex> lk(m);
q.push(std::make_shared<wrapped_message<T> >(msg));
c.notify_all();
}
std::shared_ptr<message_base> wait_and_pop()
{
std::unique_lock<std::mutex> lk(m);
c.wait(lk,[&]{return !q.empty();});
auto res=q.front();
q.pop();
return res;
}
};
}