6 #include <initializer_list>
16 template<
typename _Key>
17 class vs_queue_strategy;
25 template<
typename _Key,
typename _Strategy = vs_queue_strategy<_Key>>
30 "Provided invalid strategy class in template");
50 : _v_q(std::queue<_Key>()) { }
61 : _v_q(std::queue<_Key>())
64 [&](std::queue<_Key>& _queue){
78 : _v_q(__vs_queue._v_q.Get()) { }
94 {
return _v_q.Get().front(); }
103 {
return _v_q.Get().back(); }
111 {
return _v_q.Get().size(); }
122 _v_q.Set(_v_q.Get(), [&](std::queue<_Key>& _queue){ _queue.push(__x); return true; });
131 if (_v_q.Get().size() > 0)
132 _v_q.Set(_v_q.Get(), [](std::queue<_Key>& _queue){ _queue.pop(); return true; });
145 template<
typename _Key>
151 merge(std::queue<_Key>& dst, std::queue<_Key>& src)
153 while (src.size() > 0)
155 dst.push(src.front());
168 template<
typename _Key>
172 std::ostringstream o;
174 while (temp.
size() != 0) {
177 if (temp.
size() != 0) {
Wrapper to make any class Versioned.
const T & Get() const
Get the current value of the object in the current Revision.
bool Set(const T &v, const std::function< bool(T &)> &updater=nullptr)
Set new value of the object.
simpliest determenistic merge strategy.
void merge_same_element(std::queue< _Key > &dst, _Key &dstk, _Key &srck)
void merge(std::queue< _Key > &dst, std::queue< _Key > &src)
A versioned mimic of a stl::queue, suitable for multithread.
Versioned< std::queue< _Key >, _Strategy > _Versioned
vs_queue(const vs_queue &__vs_queue)
vs_queue copy constructor
void push(const _Key &__x)
Attempts to push an element into the queue.
const _Key & back()
end reference
size_type size() const noexcept
size of underlying queue
void pop()
Remove first element of queue.
std::queue< _Key >::size_type size_type
vs_queue(std::initializer_list< _Key > __l)
Builds a vs_queue from an initializer_list.
vs_queue()
Creates a vs_queue with no elements.
const _Key & front() const
begin constant reference
std::ostream & operator<<(std::ostream &os, vs_queue< _Key > const &value)
concept IsMergeStrategy
Concept for compile-time type checking passed user strategies.
Implementation of the class Revision.
Implementation of the Versioned classes and interface.