annotate DEPENDENCIES/generic/include/boost/thread/concurrent_queues/deque_views.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 #ifndef BOOST_THREAD_QUEUE_VIEWS_HPP
Chris@102 2 #define BOOST_THREAD_QUEUE_VIEWS_HPP
Chris@102 3
Chris@102 4 //////////////////////////////////////////////////////////////////////////////
Chris@102 5 //
Chris@102 6 // (C) Copyright Vicente J. Botet Escriba 2014. Distributed under the Boost
Chris@102 7 // Software License, Version 1.0. (See accompanying file
Chris@102 8 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@102 9 //
Chris@102 10 // See http://www.boost.org/libs/thread for documentation.
Chris@102 11 //
Chris@102 12 //////////////////////////////////////////////////////////////////////////////
Chris@102 13
Chris@102 14 #include <boost/thread/detail/config.hpp>
Chris@102 15 #include <boost/thread/detail/move.hpp>
Chris@102 16 #include <boost/thread/concurrent_queues/queue_op_status.hpp>
Chris@102 17 #include <boost/thread/concurrent_queues/deque_base.hpp>
Chris@102 18
Chris@102 19 #include <boost/config/abi_prefix.hpp>
Chris@102 20
Chris@102 21 namespace boost
Chris@102 22 {
Chris@102 23 namespace concurrent
Chris@102 24 {
Chris@102 25
Chris@102 26 template <typename Queue>
Chris@102 27 class deque_back_view
Chris@102 28 {
Chris@102 29 Queue* queue;
Chris@102 30 public:
Chris@102 31 typedef typename Queue::value_type value_type;
Chris@102 32 typedef typename Queue::size_type size_type;
Chris@102 33
Chris@102 34 // Constructors/Assignment/Destructors
Chris@102 35 deque_back_view(Queue& q) BOOST_NOEXCEPT : queue(&q) {}
Chris@102 36
Chris@102 37 // Observers
Chris@102 38 bool empty() const { return queue->empty(); }
Chris@102 39 bool full() const { return queue->full(); }
Chris@102 40 size_type size() const { return queue->size(); }
Chris@102 41 bool closed() const { return queue->closed(); }
Chris@102 42
Chris@102 43 // Modifiers
Chris@102 44 void close() { queue->close(); }
Chris@102 45
Chris@102 46 void push(const value_type& x) { queue->push_back(x); }
Chris@102 47
Chris@102 48 void pull(value_type& x) { queue->pull_back(x); }
Chris@102 49 // enable_if is_nothrow_copy_movable<value_type>
Chris@102 50 value_type pull() { return queue->pull_back(); }
Chris@102 51
Chris@102 52 queue_op_status try_push(const value_type& x) { return queue->try_push_back(x); }
Chris@102 53
Chris@102 54 queue_op_status try_pull(value_type& x) { return queue->try_pull_back(x); }
Chris@102 55
Chris@102 56 queue_op_status nonblocking_push(const value_type& x) { return queue->nonblocking_push_back(x); }
Chris@102 57
Chris@102 58 queue_op_status nonblocking_pull(value_type& x) { return queue->nonblocking_pull_back(x); }
Chris@102 59
Chris@102 60 queue_op_status wait_push(const value_type& x) { return queue->wait_push_back(x); }
Chris@102 61 queue_op_status wait_pull(value_type& x) { return queue->wait_pull_back(x); }
Chris@102 62
Chris@102 63 void push(BOOST_THREAD_RV_REF(value_type) x) { queue->push_back(boost::move(x)); }
Chris@102 64 queue_op_status try_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->try_push_back(boost::move(x)); }
Chris@102 65 queue_op_status nonblocking_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->nonblocking_push_back(boost::move(x)); }
Chris@102 66 queue_op_status wait_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->wait_push_back(boost::move(x)); }
Chris@102 67 };
Chris@102 68
Chris@102 69 template <typename Queue>
Chris@102 70 class deque_front_view
Chris@102 71 {
Chris@102 72 Queue* queue;
Chris@102 73 public:
Chris@102 74 typedef typename Queue::value_type value_type;
Chris@102 75 typedef typename Queue::size_type size_type;
Chris@102 76
Chris@102 77 // Constructors/Assignment/Destructors
Chris@102 78 deque_front_view(Queue& q) BOOST_NOEXCEPT : queue(&q) {}
Chris@102 79
Chris@102 80 // Observers
Chris@102 81 bool empty() const { return queue->empty(); }
Chris@102 82 bool full() const { return queue->full(); }
Chris@102 83 size_type size() const { return queue->size(); }
Chris@102 84 bool closed() const { return queue->closed(); }
Chris@102 85
Chris@102 86 // Modifiers
Chris@102 87 void close() { queue->close(); }
Chris@102 88
Chris@102 89 void push(const value_type& x) { queue->push_front(x); }
Chris@102 90
Chris@102 91 void pull(value_type& x) { queue->pull_front(x); };
Chris@102 92 // enable_if is_nothrow_copy_movable<value_type>
Chris@102 93 value_type pull() { return queue->pull_front(); }
Chris@102 94
Chris@102 95 queue_op_status try_push(const value_type& x) { return queue->try_push_front(x); }
Chris@102 96
Chris@102 97 queue_op_status try_pull(value_type& x) { return queue->try_pull_front(x); }
Chris@102 98
Chris@102 99 queue_op_status nonblocking_push(const value_type& x) { return queue->nonblocking_push_front(x); }
Chris@102 100
Chris@102 101 queue_op_status nonblocking_pull(value_type& x) { return queue->nonblocking_pull_front(x); }
Chris@102 102
Chris@102 103 queue_op_status wait_push(const value_type& x) { return queue->wait_push_front(x); }
Chris@102 104 queue_op_status wait_pull(value_type& x) { return queue->wait_pull_front(x); }
Chris@102 105 void push(BOOST_THREAD_RV_REF(value_type) x) { queue->push_front(forward<value_type>(x)); }
Chris@102 106 queue_op_status try_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->try_push_front(forward<value_type>(x)); }
Chris@102 107 queue_op_status nonblocking_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->nonblocking_push_front(forward<value_type>(x)); }
Chris@102 108 queue_op_status wait_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->wait_push_front(forward<value_type>(x)); }
Chris@102 109
Chris@102 110 };
Chris@102 111
Chris@102 112 #if ! defined BOOST_NO_CXX11_TEMPLATE_ALIASES
Chris@102 113
Chris@102 114 template <class T>
Chris@102 115 using deque_back = deque_back_view<deque_base<T> > ;
Chris@102 116 template <class T>
Chris@102 117 using deque_front = deque_front_view<deque_base<T> > ;
Chris@102 118
Chris@102 119 #else
Chris@102 120
Chris@102 121 template <class T>
Chris@102 122 struct deque_back : deque_back_view<deque_base<T> >
Chris@102 123 {
Chris@102 124 typedef deque_back_view<deque_base<T> > base_type;
Chris@102 125 deque_back(deque_base<T>& q) BOOST_NOEXCEPT : base_type(q) {}
Chris@102 126 };
Chris@102 127 template <class T>
Chris@102 128 struct deque_front : deque_front_view<deque_base<T> >
Chris@102 129 {
Chris@102 130 typedef deque_front_view<deque_base<T> > base_type;
Chris@102 131 deque_front(deque_base<T>& q) BOOST_NOEXCEPT : base_type(q) {}
Chris@102 132
Chris@102 133 };
Chris@102 134
Chris@102 135 #endif
Chris@102 136
Chris@102 137 // template <class Queue>
Chris@102 138 // deque_back_view<Queue> back(Queue & q) { return deque_back_view<Queue>(q); }
Chris@102 139 // template <class Queue>
Chris@102 140 // deque_front_view<Queue> front(Queue & q) { return deque_front_view<Queue>(q); }
Chris@102 141 //#if 0
Chris@102 142 // template <class T>
Chris@102 143 // deque_back<T> back(deque_base<T> & q) { return deque_back<T>(q); }
Chris@102 144 // template <class T>
Chris@102 145 // deque_front<T> front(deque_base<T> & q) { return deque_front<T>(q); }
Chris@102 146 //#else
Chris@102 147 // template <class T>
Chris@102 148 // typename deque_back<T>::type back(deque_base<T> & q) { return typename deque_back<T>::type(q); }
Chris@102 149 // template <class T>
Chris@102 150 // typename deque_front<T>::type front(deque_base<T> & q) { return typename deque_front<T>::type(q); }
Chris@102 151 //#endif
Chris@102 152 }
Chris@102 153
Chris@102 154 using concurrent::deque_back_view;
Chris@102 155 using concurrent::deque_front_view;
Chris@102 156 using concurrent::deque_back;
Chris@102 157 using concurrent::deque_front;
Chris@102 158 //using concurrent::back;
Chris@102 159 //using concurrent::front;
Chris@102 160
Chris@102 161 }
Chris@102 162
Chris@102 163 #include <boost/config/abi_suffix.hpp>
Chris@102 164
Chris@102 165 #endif