Subordination
A framework for distributed programming
queue_pusher.hh
1 #ifndef SUBORDINATION_BASE_QUEUE_PUSHER_HH
2 #define SUBORDINATION_BASE_QUEUE_PUSHER_HH
3 
4 #include <iterator>
5 
6 #include <subordination/base/container_traits.hh>
7 
8 namespace sbn {
9 
10  namespace bits {
11 
13  queue_push_iterator_base;
14 
15  }
16 
26  template <class Container, class Traits = queue_traits<Container>>
28 
29  private:
30  typedef typename Container::value_type cont_value_type;
32 
33  public:
34  using typename base_type::iterator_category;
35  using typename base_type::value_type;
36  using typename base_type::pointer;
37  using typename base_type::reference;
38  using typename base_type::difference_type;
39 
40  public:
42  typedef Container container_type;
44  typedef Traits traits_type;
46  typedef cont_value_type object_type;
47 
48  private:
49  Container& _container;
50 
51  public:
52 
54  explicit inline
55  queue_push_iterator(Container& x) noexcept: _container(x) {}
56 
58  inline queue_push_iterator&
59  operator=(const object_type& rhs) {
60  traits_type::push(this->_container, rhs);
61  return *this;
62  }
63 
65  inline queue_push_iterator&
66  operator=(const object_type&& rhs) {
67  traits_type::push(this->_container, std::move(rhs));
68  return *this;
69  }
70 
72  inline queue_push_iterator&
73  operator*() noexcept {
74  return *this;
75  }
76 
78  inline queue_push_iterator&
79  operator++() noexcept {
80  return *this;
81  }
82 
84  inline queue_push_iterator
85  operator++(int) noexcept {
86  return *this;
87  }
88 
89  };
90 
96  template<class C>
97  inline queue_push_iterator<C>
98  queue_pusher(C& rhs) {
99  return queue_push_iterator<C>(rhs);
100  }
101 
106  template<class C>
107  inline queue_push_iterator<C,priority_queue_traits<C>>
108  priority_queue_pusher(C& rhs) {
109  return queue_push_iterator<C,priority_queue_traits<C>>(rhs);
110  }
111 
116  template<class C>
117  inline queue_push_iterator<C,deque_traits<C>>
118  deque_pusher(C& rhs) {
119  return queue_push_iterator<C,deque_traits<C>>(rhs);
120  }
121 
122 }
123 
124 #endif // vim:filetype=cpp
queue_push_iterator & operator *() noexcept
Does nothing.
Definition: queue_pusher.hh:73
queue_push_iterator & operator=(const object_type &rhs)
Push element to the container.
Definition: queue_pusher.hh:59
queue_push_iterator & operator++() noexcept
Does nothing.
Definition: queue_pusher.hh:79
Container container_type
Container type.
Definition: queue_pusher.hh:42
Output iterator that inserts element to the container on assignment.
Definition: queue_pusher.hh:27
queue_push_iterator operator++(int) noexcept
Does nothing.
Definition: queue_pusher.hh:85
queue_push_iterator & operator=(const object_type &&rhs)
Move element to the container.
Definition: queue_pusher.hh:66
queue_push_iterator(Container &x) noexcept
Construct queue push iterator from container x.
Definition: queue_pusher.hh:55
Traits traits_type
Container traits type.
Definition: queue_pusher.hh:44
cont_value_type object_type
Container element type.
Definition: queue_pusher.hh:46