annotate DEPENDENCIES/generic/include/boost/thread/concurrent_queues/queue_views.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +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/queue_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 queue_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 queue_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(x); }
Chris@102 47
Chris@102 48 queue_op_status try_push(const value_type& x) { return queue->try_push(x); }
Chris@102 49
Chris@102 50 queue_op_status nonblocking_push(const value_type& x) { return queue->nonblocking_push(x); }
Chris@102 51 queue_op_status wait_push(const value_type& x) { return queue->wait_push(x); }
Chris@102 52
Chris@102 53 void push(BOOST_THREAD_RV_REF(value_type) x) { queue->push(boost::move(x)); }
Chris@102 54 queue_op_status try_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->try_push(boost::move(x)); }
Chris@102 55 queue_op_status nonblocking_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->nonblocking_push(boost::move(x)); }
Chris@102 56 queue_op_status wait_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->wait_push(boost::move(x)); }
Chris@102 57 };
Chris@102 58
Chris@102 59 template <typename Queue>
Chris@102 60 class queue_front_view
Chris@102 61 {
Chris@102 62 Queue* queue;
Chris@102 63 public:
Chris@102 64 typedef typename Queue::value_type value_type;
Chris@102 65 typedef typename Queue::size_type size_type;
Chris@102 66
Chris@102 67 // Constructors/Assignment/Destructors
Chris@102 68 queue_front_view(Queue& q) BOOST_NOEXCEPT : queue(&q) {}
Chris@102 69
Chris@102 70 // Observers
Chris@102 71 bool empty() const { return queue->empty(); }
Chris@102 72 bool full() const { return queue->full(); }
Chris@102 73 size_type size() const { return queue->size(); }
Chris@102 74 bool closed() const { return queue->closed(); }
Chris@102 75
Chris@102 76 // Modifiers
Chris@102 77 void close() { queue->close(); }
Chris@102 78
Chris@102 79 void push(const value_type& x) { queue->push_front(x); }
Chris@102 80
Chris@102 81 void pull(value_type& x) { queue->pull(x); };
Chris@102 82 // enable_if is_nothrow_copy_movable<value_type>
Chris@102 83 value_type pull() { return queue->pull(); }
Chris@102 84
Chris@102 85 queue_op_status try_push(const value_type& x) { return queue->try_push_front(x); }
Chris@102 86
Chris@102 87 queue_op_status try_pull(value_type& x) { return queue->try_pull(x); }
Chris@102 88
Chris@102 89 queue_op_status nonblocking_push(const value_type& x) { return queue->nonblocking_push_front(x); }
Chris@102 90
Chris@102 91 queue_op_status nonblocking_pull(value_type& x) { return queue->nonblocking_pull(x); }
Chris@102 92
Chris@102 93 queue_op_status wait_push(const value_type& x) { return queue->wait_push_front(x); }
Chris@102 94 queue_op_status wait_pull(value_type& x) { return queue->wait_pull(x); }
Chris@102 95 void push(BOOST_THREAD_RV_REF(value_type) x) { queue->push_front(forward<value_type>(x)); }
Chris@102 96 queue_op_status try_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->try_push_front(forward<value_type>(x)); }
Chris@102 97 queue_op_status nonblocking_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->nonblocking_push_front(forward<value_type>(x)); }
Chris@102 98 queue_op_status wait_push(BOOST_THREAD_RV_REF(value_type) x) { return queue->wait_push_front(forward<value_type>(x)); }
Chris@102 99
Chris@102 100 };
Chris@102 101
Chris@102 102 #if ! defined BOOST_NO_CXX11_TEMPLATE_ALIASES
Chris@102 103
Chris@102 104 template <class T>
Chris@102 105 using queue_back = queue_back_view<queue_base<T> > ;
Chris@102 106 template <class T>
Chris@102 107 using queue_front = queue_front_view<queue_base<T> > ;
Chris@102 108
Chris@102 109 #else
Chris@102 110
Chris@102 111 template <class T>
Chris@102 112 struct queue_back : queue_back_view<queue_base<T> >
Chris@102 113 {
Chris@102 114 typedef queue_back_view<queue_base<T> > base_type;
Chris@102 115 queue_back(queue_base<T>& q) BOOST_NOEXCEPT : base_type(q) {}
Chris@102 116 };
Chris@102 117 template <class T>
Chris@102 118 struct queue_front : queue_front_view<queue_base<T> >
Chris@102 119 {
Chris@102 120 typedef queue_front_view<queue_base<T> > base_type;
Chris@102 121 queue_front(queue_base<T>& q) BOOST_NOEXCEPT : base_type(q) {}
Chris@102 122
Chris@102 123 };
Chris@102 124
Chris@102 125 #endif
Chris@102 126
Chris@102 127 // template <class Queue>
Chris@102 128 // queue_back_view<Queue> back(Queue & q) { return queue_back_view<Queue>(q); }
Chris@102 129 // template <class Queue>
Chris@102 130 // queue_front_view<Queue> front(Queue & q) { return queue_front_view<Queue>(q); }
Chris@102 131 //#if 0
Chris@102 132 // template <class T>
Chris@102 133 // queue_back<T> back(queue_base<T> & q) { return queue_back<T>(q); }
Chris@102 134 // template <class T>
Chris@102 135 // queue_front<T> front(queue_base<T> & q) { return queue_front<T>(q); }
Chris@102 136 //#else
Chris@102 137 // template <class T>
Chris@102 138 // typename queue_back<T>::type back(queue_base<T> & q) { return typename queue_back<T>::type(q); }
Chris@102 139 // template <class T>
Chris@102 140 // typename queue_front<T>::type front(queue_base<T> & q) { return typename queue_front<T>::type(q); }
Chris@102 141 //#endif
Chris@102 142 }
Chris@102 143
Chris@102 144 using concurrent::queue_back_view;
Chris@102 145 using concurrent::queue_front_view;
Chris@102 146 using concurrent::queue_back;
Chris@102 147 using concurrent::queue_front;
Chris@102 148 //using concurrent::back;
Chris@102 149 //using concurrent::front;
Chris@102 150
Chris@102 151 }
Chris@102 152
Chris@102 153 #include <boost/config/abi_suffix.hpp>
Chris@102 154
Chris@102 155 #endif