0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-16 15:00:51 +01:00

ircd::ctx: Simplify queue interface; remove access to dock.

This commit is contained in:
Jason Volk 2018-12-28 12:42:08 -08:00
parent fe0f548496
commit c9c280c864

View file

@ -19,14 +19,11 @@ namespace ircd::ctx
template<class T> template<class T>
class ircd::ctx::queue class ircd::ctx::queue
{ {
struct dock dock; dock d;
std::queue<T> q; std::queue<T> q;
size_t w {0}; size_t w {0};
public: public:
explicit operator const struct dock &() const;
explicit operator struct dock &();
size_t empty() const; size_t empty() const;
size_t size() const; size_t size() const;
size_t waiting() const; size_t waiting() const;
@ -58,7 +55,7 @@ ircd::ctx::queue<T>::push(T&& t)
noexcept noexcept
{ {
q.push(std::forward<T>(t)); q.push(std::forward<T>(t));
dock.notify(); d.notify();
} }
template<class T> template<class T>
@ -66,7 +63,7 @@ void
ircd::ctx::queue<T>::push(const T &t) ircd::ctx::queue<T>::push(const T &t)
{ {
q.push(t); q.push(t);
dock.notify(); d.notify();
} }
template<class T> template<class T>
@ -75,7 +72,7 @@ void
ircd::ctx::queue<T>::emplace(args&&... a) ircd::ctx::queue<T>::emplace(args&&... a)
{ {
q.emplace(std::forward<args>(a)...); q.emplace(std::forward<args>(a)...);
dock.notify(); d.notify();
} }
template<class T> template<class T>
@ -88,7 +85,7 @@ ircd::ctx::queue<T>::pop()
--w; --w;
}}; }};
dock.wait([this] d.wait([this]
{ {
return !q.empty(); return !q.empty();
}); });
@ -112,7 +109,7 @@ ircd::ctx::queue<T>::pop_for(const duration &dur)
const bool ready const bool ready
{ {
dock.wait_for(dur, [this] d.wait_for(dur, [this]
{ {
return !q.empty(); return !q.empty();
}) })
@ -140,7 +137,7 @@ ircd::ctx::queue<T>::pop_until(time_point&& tp)
const bool ready const bool ready
{ {
dock.wait_until(tp, [this] d.wait_until(tp, [this]
{ {
return !q.empty(); return !q.empty();
}) })
@ -178,18 +175,3 @@ const
{ {
return q.empty(); return q.empty();
} }
template<class T>
ircd::ctx::queue<T>::operator
struct dock &()
{
return dock;
}
template<class T>
ircd::ctx::queue<T>::operator
const struct dock &()
const
{
return dock;
}