Fabcoin Core  0.16.2
P2P Digital Currency
concurrent_queue.h
Go to the documentation of this file.
1 /*
2  This file is part of cpp-ethereum.
3 
4  cpp-ethereum is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  cpp-ethereum is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
16 */
17 #pragma once
18 #include <utility>
19 #include <queue>
20 #include <condition_variable>
21 #include <mutex>
22 
23 
24 namespace dev
25 {
26 
31 template<typename _T, typename _QueueT = std::queue<_T>>
33 {
34 public:
35  template<typename _U>
36  void push(_U&& _elem)
37  {
38  {
39  std::lock_guard<decltype(x_mutex)> guard{x_mutex};
40  m_queue.push(std::forward<_U>(_elem));
41  }
42  m_cv.notify_one();
43  }
44 
45  _T pop()
46  {
47  std::unique_lock<std::mutex> lock{x_mutex};
48  m_cv.wait(lock, [this]{ return !m_queue.empty(); });
49  auto item = std::move(m_queue.front());
50  m_queue.pop();
51  return item;
52  }
53 
54 private:
55  _QueueT m_queue;
56  std::mutex x_mutex;
57  std::condition_variable m_cv;
58 };
59 
60 }
Adapted from code found on http://stackoverflow.com/questions/180947/base64-decode-snippet-in-c Origi...
Definition: Arith256.cpp:15
Concurrent queue.
std::condition_variable m_cv
void push(_U &&_elem)