Initial commit of a simple OpenOLT simulator
make openoltsim
./build/openoltsim
Openoltsim is meant to simulate an OLT running the OpenOLT driver.
Currently, it only sends the the "olt up" indication allowing
voltha pre-provision/enable commands to connect to openoltsim.
Change-Id: I95910657d269e37f4e4943d2b91f2780ecd8fd08
diff --git a/openoltsim/Queue.h b/openoltsim/Queue.h
new file mode 100644
index 0000000..854851e
--- /dev/null
+++ b/openoltsim/Queue.h
@@ -0,0 +1,60 @@
+//
+// Copyright (c) 2013 Juan Palacios juan.palacios.puyana@gmail.com
+// Subject to the BSD 2-Clause License
+// - see < http://opensource.org/licenses/BSD-2-Clause>
+//
+
+#ifndef CONCURRENT_QUEUE_
+#define CONCURRENT_QUEUE_
+
+#include <queue>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+
+template <typename T>
+class Queue
+{
+ public:
+
+ T pop()
+ {
+ std::unique_lock<std::mutex> mlock(mutex_);
+ while (queue_.empty())
+ {
+ cond_.wait(mlock);
+ }
+ auto val = queue_.front();
+ queue_.pop();
+ return val;
+ }
+
+ void pop(T& item)
+ {
+ std::unique_lock<std::mutex> mlock(mutex_);
+ while (queue_.empty())
+ {
+ cond_.wait(mlock);
+ }
+ item = queue_.front();
+ queue_.pop();
+ }
+
+ void push(const T& item)
+ {
+ std::unique_lock<std::mutex> mlock(mutex_);
+ queue_.push(item);
+ mlock.unlock();
+ cond_.notify_one();
+ }
+ Queue()=default;
+ Queue(const Queue&) = delete; // disable copying
+ Queue& operator=(const Queue&) = delete; // disable assignment
+
+ private:
+ std::queue<T> queue_;
+ std::mutex mutex_;
+ std::condition_variable cond_;
+};
+
+#endif