16 #ifndef BLOOMBERG_QUANTUM_TRAITS_H 17 #define BLOOMBERG_QUANTUM_TRAITS_H 19 #include <quantum/quantum_stack_traits.h> 20 #include <quantum/quantum_allocator.h> 21 #include <boost/coroutine2/all.hpp> 23 #include <type_traits> 28 #define UNUSED(x) (void)(x) //remove compiler warnings 30 template <
class T,
class ALLOCATOR = std::allocator<T>>
44 #ifndef __QUANTUM_USE_DEFAULT_CORO_ALLOCATOR 57 using BoostCoro = boost::coroutines2::coroutine<int&>;
58 using Yield =
typename BoostCoro::pull_type;
62 using IsInputIterator = std::enable_if_t<std::is_convertible<typename std::iterator_traits<IT>::iterator_category, std::input_iterator_tag>::value>;
77 template <
class D,
class THIS,
class B>
81 operator B*() {
return static_cast<D*>(static_cast<THIS*>(
this)); }
82 operator B&() {
return static_cast<D&>(static_cast<THIS&>(*
this)); }
86 template <
class T,
class V>
87 using BufferType = std::enable_if_t<Traits::IsBuffer<T>::value &&
88 !std::is_same<std::decay_t<V>,T>::value &&
90 template <
class T,
class V>
91 using NonBufferType = std::enable_if_t<!Traits::IsBuffer<T>::value && std::is_convertible<std::decay_t<V>,T>::value>;
99 #include <quantum/impl/quantum_stl_impl.h> 101 #endif //BLOOMBERG_QUANTUM_TRAITS_H Definition: quantum_coroutine_pool_allocator.h:84
Definition: quantum_buffer_impl.h:22
std::enable_if_t< Traits::IsBuffer< T >::value &&!std::is_same< std::decay_t< V >, T >::value &&std::is_convertible< std::decay_t< V >, typename Traits::IsBuffer< T >::Type >::value > BufferType
Definition: quantum_traits.h:89
boost::coroutines2::coroutine< int & > BoostCoro
Definition: quantum_traits.h:57
std::enable_if_t<!Traits::IsBuffer< T >::value &&std::is_convertible< std::decay_t< V >, T >::value > NonBufferType
Definition: quantum_traits.h:91
Definition: quantum_traits.h:66
Definition: quantum_allocator.h:45
Definition: quantum_traits.h:78
typename BoostCoro::push_type Coroutine
Definition: quantum_traits.h:59
static std::size_t page_size()
Definition: quantum_traits.h:38
std::enable_if_t<!Traits::IsBuffer< T >::value, typename Traits::IsBuffer< T >::Type > NonBufferRetType
Definition: quantum_traits.h:95
static std::size_t default_size()
Definition: quantum_traits.h:39
static size_t & maximumSize()
Get/set the maximum stack size.
Definition: quantum_stack_traits_impl.h:54
Definition: quantum_traits.h:36
static size_t & pageSize()
Get/set the page size.
Definition: quantum_stack_traits_impl.h:33
virtual ~DerivedFrom()=default
Container which allows buffered access to a series of values. Values are pushed-in (written) by a pro...
Definition: quantum_buffer.h:49
typename BoostCoro::pull_type Yield
Definition: quantum_traits.h:58
T Type
Definition: quantum_traits.h:68
static std::size_t maximum_size()
Definition: quantum_traits.h:41
std::enable_if_t< Traits::IsBuffer< T >::value, typename Traits::IsBuffer< T >::Type > BufferRetType
Definition: quantum_traits.h:93
std::enable_if_t< std::is_convertible< typename std::iterator_traits< IT >::iterator_category, std::input_iterator_tag >::value > IsInputIterator
Definition: quantum_traits.h:62
static bool is_unbounded()
Definition: quantum_traits.h:37
static size_t & minimumSize()
Get/set the minimum stack size as defined by the environment.
Definition: quantum_stack_traits_impl.h:47
static std::size_t minimum_size()
Definition: quantum_traits.h:40
static bool & isUnbounded()
Get/set if the environment defines a limit for the stack size.
Definition: quantum_stack_traits_impl.h:26
static size_t & defaultSize()
Get/set the default stack size, which may be platform specific.
Definition: quantum_stack_traits_impl.h:40
Contains definitions for various traits used by this library. For internal use only.
Definition: quantum_traits.h:55
typename Buffer< T >::ValueType Type
Definition: quantum_traits.h:74