17#ifndef ROOFIT_BATCHCOMPUTE_ROOSPAN_H
18#define ROOFIT_BATCHCOMPUTE_ROOSPAN_H
36 using iterator =
typename std::span<T>::iterator;
54 template<
typename NON_CONST_T,
55 typename =
typename std::enable_if<std::is_same<const NON_CONST_T, T>::value>
::type >
62 template <
class InputIterator>
63 constexpr RooSpan(InputIterator beginIn, InputIterator endIn) :
69 constexpr RooSpan(
typename std::span<T>::pointer beginIn,
70 typename std::span<T>::pointer endIn) :
76 constexpr RooSpan(
typename std::span<T>::pointer beginIn,
77 typename std::span<T>::index_type sizeIn) :
78 _span{beginIn, sizeIn}
82 constexpr RooSpan(
const std::vector<
typename std::remove_cv<T>::type>& vec) noexcept :
86 constexpr RooSpan(std::vector<
typename std::remove_cv<T>::type>& vec) noexcept :
92 constexpr RooSpan(std::vector<value_type>&& payload) =
delete;
98 constexpr typename std::span<T>::iterator
begin()
const {
102 constexpr typename std::span<T>::iterator
end()
const {
106 constexpr typename std::span<T>::pointer
data()
const {
111 constexpr typename std::span<T>::reference
operator[](
typename std::span<T>::index_type i)
const noexcept {
115 typename std::span<T>::reference
operator[](
typename std::span<T>::index_type i)
const noexcept {
116 assert(i <
_span.size());
121 constexpr typename std::span<T>::index_type
size() const noexcept {
125 constexpr bool empty() const noexcept {
126 return _span.empty();
135 template <
class Span_t>
136 constexpr bool overlaps(
const Span_t& other)
const {
138 || other.insideSpan(
begin()) || other.insideSpan(
end()-1);
142 template <
typename ptr_t>
144 return begin() <= ptr && ptr <
end();
A simple container to hold a batch of data values.
constexpr RooSpan(std::vector< typename std::remove_cv< T >::type > &vec) noexcept
constexpr bool insideSpan(ptr_t ptr) const
Test if the given pointer/iterator is inside the span.
constexpr std::span< T >::iterator end() const
RooSpan< T > & operator=(const RooSpan< T > &other)=default
typename std::remove_cv< T >::type value_type
std::span< T >::reference operator[](typename std::span< T >::index_type i) const noexcept
constexpr RooSpan(InputIterator beginIn, InputIterator endIn)
Construct from a range. Data held by foreign object.
constexpr RooSpan(const RooSpan< NON_CONST_T > &other)
Conversion constructor from <T> to <const T> If the input span owns some memory, the const-version of...
constexpr std::span< T >::pointer data() const
constexpr std::span< T >::index_type size() const noexcept
constexpr RooSpan(const RooSpan &other)
constexpr RooSpan(typename std::span< T >::pointer beginIn, typename std::span< T >::pointer endIn)
Construct from start and end pointers.
constexpr RooSpan(RooSpan &&other)
typename std::span< T >::iterator iterator
constexpr RooSpan(std::vector< value_type > &&payload)=delete
We cannot point to temporary data.
constexpr RooSpan(typename std::span< T >::pointer beginIn, typename std::span< T >::index_type sizeIn)
Construct from start pointer and size.
constexpr bool overlaps(const Span_t &other) const
Test if the span overlaps with other.
constexpr bool isBatch() const noexcept
constexpr RooSpan(const std::vector< typename std::remove_cv< T >::type > &vec) noexcept
constexpr std::span< T >::iterator begin() const
constexpr bool empty() const noexcept