xTachyon

Untitled

Feb 14th, 2017
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. template <typename T>
  2. class Queue
  3. {
  4. public:
  5.  
  6.   using Type = T;
  7.   using OptionalType = boost::optional<T>;
  8.  
  9.   ~Queue()
  10.   {
  11.     std::lock_guard<std::mutex> l(mMutex);
  12.   }
  13.  
  14.   void push(const T& obj)
  15.   {
  16.     std::lock_guard<std::mutex> l(mMutex);
  17.    
  18.     mData.push_back(obj);
  19.   }
  20.  
  21.   void push(T&& obj)
  22.   {
  23.     std::lock_guard<std::mutex> l(mMutex);
  24.    
  25.     mData.push_back(std::move(obj));
  26.   }
  27.  
  28.   bool pop(T& obj)
  29.   {
  30.     std::lock_guard<std::mutex> l(mMutex);
  31.    
  32.     if (mData.empty())
  33.     {
  34.       return false;
  35.     }
  36.     else
  37.     {
  38.       obj = std::move(mData.front());
  39.       mData.pop_front();
  40.       return true;
  41.     }
  42.   }
  43.  
  44.   OptionalType pop()
  45.   {
  46.     std::lock_guard<std::mutex> l(mMutex);
  47.     OptionalType result;
  48.  
  49.     if (!mData.empty())
  50.     {
  51.       result = std::move(mData.front());
  52.       mData.pop_front();
  53.     }
  54.  
  55.     return result;
  56.   }
  57.  
  58. private:
  59.  
  60.   std::deque<T> mData;
  61.   std::mutex mMutex;
  62. };
Advertisement
Add Comment
Please, Sign In to add comment