STL Memory Versioning
Public Types | Public Member Functions | List of all members
vs::vs_queue< _Key, _Strategy > Class Template Reference

A versioned mimic of a stl::queue, suitable for multithread. More...

#include <vs_queue.h>

Public Types

typedef Versioned< std::queue< _Key >, _Strategy > _Versioned
 
typedef std::queue< _Key >::size_type size_type
 

Public Member Functions

 vs_queue ()
 Creates a vs_queue with no elements. More...
 
 vs_queue (std::initializer_list< _Key > __l)
 Builds a vs_queue from an initializer_list. More...
 
 vs_queue (const vs_queue &__vs_queue)
 vs_queue copy constructor More...
 
const _Key & front () const
 begin constant reference More...
 
const _Key & back ()
 end reference More...
 
size_type size () const noexcept
 size of underlying queue More...
 
void push (const _Key &__x)
 Attempts to push an element into the queue. More...
 
void pop ()
 Remove first element of queue. More...
 

Detailed Description

template<typename _Key, typename _Strategy = vs_queue_strategy<_Key>>
class vs::vs_queue< _Key, _Strategy >

A versioned mimic of a stl::queue, suitable for multithread.

Parameters
_KeyType of key objects.
_StrategyCustom strategy class for different merge behaviour

Definition at line 26 of file vs_queue.h.

Member Typedef Documentation

◆ _Versioned

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
typedef Versioned<std::queue<_Key>, _Strategy> vs::vs_queue< _Key, _Strategy >::_Versioned

Definition at line 35 of file vs_queue.h.

◆ size_type

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
typedef std::queue<_Key>::size_type vs::vs_queue< _Key, _Strategy >::size_type

Definition at line 36 of file vs_queue.h.

Constructor & Destructor Documentation

◆ vs_queue() [1/3]

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
vs::vs_queue< _Key, _Strategy >::vs_queue ( )
inlineexplicit

Creates a vs_queue with no elements.

Definition at line 49 of file vs_queue.h.

50  : _v_q(std::queue<_Key>()) { }

◆ vs_queue() [2/3]

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
vs::vs_queue< _Key, _Strategy >::vs_queue ( std::initializer_list< _Key >  __l)
inline

Builds a vs_queue from an initializer_list.

Parameters
__lAn initializer_list.
__compComparator to use.

Copy elements of the list to created vs_queue. Non-standard, but handy to have instead of copying with queue{{initilizer}}

Definition at line 60 of file vs_queue.h.

61  : _v_q(std::queue<_Key>())
62  {
63  _v_q.Set(_v_q.Get(),
64  [&](std::queue<_Key>& _queue){
65  for (auto& i: __l){
66  _queue.push(i);
67  }
68  return true;
69  });
70  }
const T & Get() const
Get the current value of the object in the current Revision.
Definition: versioned.h:186
bool Set(const T &v, const std::function< bool(T &)> &updater=nullptr)
Set new value of the object.
Definition: versioned.h:205

◆ vs_queue() [3/3]

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
vs::vs_queue< _Key, _Strategy >::vs_queue ( const vs_queue< _Key, _Strategy > &  __vs_queue)
inline

vs_queue copy constructor

does not inherit versions history

Definition at line 77 of file vs_queue.h.

78  : _v_q(__vs_queue._v_q.Get()) { }

Member Function Documentation

◆ back()

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
const _Key& vs::vs_queue< _Key, _Strategy >::back ( )
inline

end reference

Returns a reference to recently pushed element

Definition at line 102 of file vs_queue.h.

103  { return _v_q.Get().back(); }

◆ front()

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
const _Key& vs::vs_queue< _Key, _Strategy >::front ( ) const
inline

begin constant reference

Returns a read-only (constant) reference that points to the first element in the vs_queue.

Definition at line 93 of file vs_queue.h.

94  { return _v_q.Get().front(); }

◆ pop()

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
void vs::vs_queue< _Key, _Strategy >::pop ( )
inline

Remove first element of queue.

Definition at line 129 of file vs_queue.h.

130  {
131  if (_v_q.Get().size() > 0)
132  _v_q.Set(_v_q.Get(), [](std::queue<_Key>& _queue){ _queue.pop(); return true; });
133  }

◆ push()

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
void vs::vs_queue< _Key, _Strategy >::push ( const _Key &  __x)
inline

Attempts to push an element into the queue.

Parameters
__xElement to be inserted.

Definition at line 120 of file vs_queue.h.

121  {
122  _v_q.Set(_v_q.Get(), [&](std::queue<_Key>& _queue){ _queue.push(__x); return true; });
123  }

◆ size()

template<typename _Key , typename _Strategy = vs_queue_strategy<_Key>>
size_type vs::vs_queue< _Key, _Strategy >::size ( ) const
inlinenoexcept

size of underlying queue

Definition at line 110 of file vs_queue.h.

111  { return _v_q.Get().size(); }

The documentation for this class was generated from the following file: