annotate DEPENDENCIES/generic/include/boost/thread/concurrent_queues/deque_base.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_CONCURRENT_DEQUE_BASE_HPP
Chris@102 2 #define BOOST_THREAD_CONCURRENT_DEQUE_BASE_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/type_traits/conditional.hpp>
Chris@102 18 #include <boost/type_traits/is_copy_constructible.hpp>
Chris@102 19
Chris@102 20
Chris@102 21 #include <boost/config/abi_prefix.hpp>
Chris@102 22
Chris@102 23 namespace boost
Chris@102 24 {
Chris@102 25 namespace concurrent
Chris@102 26 {
Chris@102 27 namespace detail
Chris@102 28 {
Chris@102 29
Chris@102 30 template <typename ValueType, class SizeType>
Chris@102 31 class deque_base_copyable_only
Chris@102 32 {
Chris@102 33 public:
Chris@102 34 typedef ValueType value_type;
Chris@102 35 typedef SizeType size_type;
Chris@102 36
Chris@102 37 // Constructors/Assignment/Destructors
Chris@102 38 virtual ~deque_base_copyable_only() {};
Chris@102 39
Chris@102 40 // Observers
Chris@102 41 virtual bool empty() const = 0;
Chris@102 42 virtual bool full() const = 0;
Chris@102 43 virtual size_type size() const = 0;
Chris@102 44 virtual bool closed() const = 0;
Chris@102 45
Chris@102 46 // Modifiers
Chris@102 47 virtual void close() = 0;
Chris@102 48
Chris@102 49 virtual void push_back(const value_type& x) = 0;
Chris@102 50
Chris@102 51 virtual void pull_front(value_type&) = 0;
Chris@102 52 virtual value_type pull_front() = 0;
Chris@102 53
Chris@102 54 virtual queue_op_status try_push_back(const value_type& x) = 0;
Chris@102 55 virtual queue_op_status try_pull_front(value_type&) = 0;
Chris@102 56
Chris@102 57 virtual queue_op_status nonblocking_push_back(const value_type& x) = 0;
Chris@102 58 virtual queue_op_status nonblocking_pull_front(value_type&) = 0;
Chris@102 59
Chris@102 60 virtual queue_op_status wait_push_back(const value_type& x) = 0;
Chris@102 61 virtual queue_op_status wait_pull_front(value_type& elem) = 0;
Chris@102 62
Chris@102 63 };
Chris@102 64
Chris@102 65 template <typename ValueType, class SizeType>
Chris@102 66 class deque_base_movable_only
Chris@102 67 {
Chris@102 68 public:
Chris@102 69 typedef ValueType value_type;
Chris@102 70 typedef SizeType size_type;
Chris@102 71 // Constructors/Assignment/Destructors
Chris@102 72 virtual ~deque_base_movable_only() {};
Chris@102 73
Chris@102 74 // Observers
Chris@102 75 virtual bool empty() const = 0;
Chris@102 76 virtual bool full() const = 0;
Chris@102 77 virtual size_type size() const = 0;
Chris@102 78 virtual bool closed() const = 0;
Chris@102 79
Chris@102 80 // Modifiers
Chris@102 81 virtual void close() = 0;
Chris@102 82
Chris@102 83 virtual void pull_front(value_type&) = 0;
Chris@102 84 // enable_if is_nothrow_movable<value_type>
Chris@102 85 virtual value_type pull_front() = 0;
Chris@102 86
Chris@102 87 virtual queue_op_status try_pull_front(value_type&) = 0;
Chris@102 88
Chris@102 89 virtual queue_op_status nonblocking_pull_front(value_type&) = 0;
Chris@102 90
Chris@102 91 virtual queue_op_status wait_pull_front(value_type& elem) = 0;
Chris@102 92
Chris@102 93 virtual void push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 94 virtual queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 95 virtual queue_op_status nonblocking_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 96 virtual queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 97 };
Chris@102 98
Chris@102 99
Chris@102 100 template <typename ValueType, class SizeType>
Chris@102 101 class deque_base_copyable_and_movable
Chris@102 102 {
Chris@102 103 public:
Chris@102 104 typedef ValueType value_type;
Chris@102 105 typedef SizeType size_type;
Chris@102 106 // Constructors/Assignment/Destructors
Chris@102 107 virtual ~deque_base_copyable_and_movable() {};
Chris@102 108
Chris@102 109
Chris@102 110 // Observers
Chris@102 111 virtual bool empty() const = 0;
Chris@102 112 virtual bool full() const = 0;
Chris@102 113 virtual size_type size() const = 0;
Chris@102 114 virtual bool closed() const = 0;
Chris@102 115
Chris@102 116 // Modifiers
Chris@102 117 virtual void close() = 0;
Chris@102 118
Chris@102 119 virtual void push_back(const value_type& x) = 0;
Chris@102 120
Chris@102 121 virtual void pull_front(value_type&) = 0;
Chris@102 122 // enable_if is_nothrow_copy_movable<value_type>
Chris@102 123 virtual value_type pull_front() = 0;
Chris@102 124
Chris@102 125 virtual queue_op_status try_push_back(const value_type& x) = 0;
Chris@102 126 virtual queue_op_status try_pull_front(value_type&) = 0;
Chris@102 127
Chris@102 128 virtual queue_op_status nonblocking_push_back(const value_type& x) = 0;
Chris@102 129 virtual queue_op_status nonblocking_pull_front(value_type&) = 0;
Chris@102 130
Chris@102 131 virtual queue_op_status wait_push_back(const value_type& x) = 0;
Chris@102 132 virtual queue_op_status wait_pull_front(value_type& elem) = 0;
Chris@102 133
Chris@102 134 virtual void push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 135 virtual queue_op_status try_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 136 virtual queue_op_status nonblocking_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 137 virtual queue_op_status wait_push_back(BOOST_THREAD_RV_REF(value_type) x) = 0;
Chris@102 138 };
Chris@102 139
Chris@102 140 template <class T, class ST,
Chris@102 141 #if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
Chris@102 142 #if defined __GNUC__ && ! defined __clang__
Chris@102 143 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@102 144 bool Copyable = is_copy_constructible<T>::value,
Chris@102 145 bool Movable = true
Chris@102 146 #else
Chris@102 147 bool Copyable = std::is_copy_constructible<T>::value && std::is_copy_assignable<T>::value,
Chris@102 148 bool Movable = std::is_move_constructible<T>::value && std::is_move_assignable<T>::value
Chris@102 149 #endif // __GNUC__
Chris@102 150 #elif defined _MSC_VER
Chris@102 151 #if _MSC_VER < 1700
Chris@102 152 bool Copyable = is_copy_constructible<T>::value,
Chris@102 153 bool Movable = true
Chris@102 154 #else
Chris@102 155 bool Copyable = std::is_copy_constructible<T>::value && std::is_copy_assignable<T>::value,
Chris@102 156 bool Movable = std::is_move_constructible<T>::value && std::is_move_assignable<T>::value
Chris@102 157 #endif // _MSC_VER
Chris@102 158 #else
Chris@102 159 bool Copyable = std::is_copy_constructible<T>::value && std::is_copy_assignable<T>::value,
Chris@102 160 bool Movable = std::is_move_constructible<T>::value && std::is_move_assignable<T>::value
Chris@102 161 #endif
Chris@102 162 #else
Chris@102 163 bool Copyable = is_copy_constructible<T>::value,
Chris@102 164 bool Movable = has_move_emulation_enabled<T>::value
Chris@102 165 #endif
Chris@102 166 >
Chris@102 167 struct deque_base;
Chris@102 168
Chris@102 169 template <class T, class ST>
Chris@102 170 struct deque_base<T, ST, true, true> {
Chris@102 171 typedef deque_base_copyable_and_movable<T, ST> type;
Chris@102 172 };
Chris@102 173 template <class T, class ST>
Chris@102 174 struct deque_base<T, ST, true, false> {
Chris@102 175 typedef deque_base_copyable_only<T, ST> type;
Chris@102 176 };
Chris@102 177 template <class T, class ST>
Chris@102 178 struct deque_base<T, ST, false, true> {
Chris@102 179 typedef deque_base_movable_only<T, ST> type;
Chris@102 180 };
Chris@102 181
Chris@102 182 }
Chris@102 183
Chris@102 184 template <class ValueType, class SizeType=std::size_t>
Chris@102 185 class deque_base :
Chris@102 186 public detail::deque_base<ValueType, SizeType>::type
Chris@102 187 {
Chris@102 188 public:
Chris@102 189 typedef ValueType value_type;
Chris@102 190 typedef SizeType size_type;
Chris@102 191 // Constructors/Assignment/Destructors
Chris@102 192 virtual ~deque_base() {};
Chris@102 193 };
Chris@102 194
Chris@102 195 }
Chris@102 196 using concurrent::deque_base;
Chris@102 197
Chris@102 198 }
Chris@102 199
Chris@102 200 #include <boost/config/abi_suffix.hpp>
Chris@102 201
Chris@102 202 #endif