diff --git a/Assignment_3/lib/ADT_Stack.cpp b/Assignment_3/lib/ADT_Stack.cpp index 7e1c042..8604d71 100644 --- a/Assignment_3/lib/ADT_Stack.cpp +++ b/Assignment_3/lib/ADT_Stack.cpp @@ -65,3 +65,22 @@ void ADTStack::do_ops(std::vector ops) { } } +void ADTOperationQueue::enqueue(operation op) { + mutex.lock(); + queue.push(op); + mutex.unlock(); +} +operation ADTOperationQueue::dequeue() { + mutex.lock(); + operation op = this->queue.front(); + queue.pop(); + mutex.unlock(); + return op; +} +size_t ADTOperationQueue::size() { + this->mutex.lock(); + size_t s = queue.size(); + this->mutex.unlock(); + return s; +} + diff --git a/Assignment_3/lib/ADT_Stack.h b/Assignment_3/lib/ADT_Stack.h index 9a6a64a..e9b53ed 100644 --- a/Assignment_3/lib/ADT_Stack.h +++ b/Assignment_3/lib/ADT_Stack.h @@ -1,5 +1,7 @@ #include #include +#include +#include enum methodname {push, pop, size, noop}; typedef struct _operation{ @@ -18,4 +20,14 @@ class ADTStack { void size(int output); void do_op(operation * op); void do_ops(std::vector ops); +}; + +class ADTOperationQueue{ + private: + std::queue queue; + std::mutex mutex; + public: + void enqueue(operation op); + operation dequeue(); + size_t size(); }; \ No newline at end of file