// this file is under GNU GPL 3.0, see LICENSE.txt #pragma once #include #include namespace utility { using namespace std; template class locked_queue { mutex _mtx; list _q; public: T& back() { lock_guard lg(_mtx); return _q.back(); } T& front() { lock_guard lg(_mtx); return _q.front(); } T pop_back() { lock_guard lg(_mtx); T r = _q.back(); _q.pop_back(); return r; } T pop_front() { lock_guard lg(_mtx); T r = _q.front(); _q.pop_front(); return r; } void push_back(const T& data) { lock_guard lg(_mtx); _q.push_back(data); } void push_front(const T& data) { lock_guard lg(_mtx); _q.push_front(data); } size_t size() { lock_guard lg(_mtx); return _q.size(); } bool empty() { lock_guard lg(_mtx); return _q.empty(); } }; };