34#ifndef ETL_POLY_SPAN_INCLUDED
35#define ETL_POLY_SPAN_INCLUDED
48#if ETL_USING_STL && ETL_USING_CPP11
57 template <
typename U,
size_t Extent>
60 namespace private_poly_span
65 template <
typename TBase>
70 template <
typename U,
size_t Extent>
73 template <
typename UBase>
74 friend class const_iterator;
76 typedef TBase value_type;
77 typedef ptrdiff_t difference_type;
78 typedef TBase* pointer;
79 typedef TBase& reference;
80 typedef ETL_OR_STD::random_access_iterator_tag iterator_category;
90 iterator(
const iterator& other)
92 , element_size(other.element_size)
97 iterator& operator =(
const iterator& rhs)
100 element_size = rhs.element_size;
106 TBase& operator *()
const
112 TBase* operator ->()
const
118 iterator& operator ++()
120 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) + element_size);
125 iterator operator ++(
int)
127 iterator temp(*
this);
128 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) + element_size);
133 iterator& operator --()
135 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) - element_size);
140 iterator operator --(
int)
142 iterator temp(*
this);
143 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) - element_size);
148 iterator& operator +=(difference_type offset)
150 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) + (offset * difference_type(element_size)));
155 iterator& operator -=(difference_type offset)
157 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(ptr) - (offset * difference_type(element_size)));
162 friend bool operator == (
const iterator& lhs,
const iterator& rhs)
164 return (lhs.ptr == rhs.ptr) && (lhs.element_size == rhs.element_size);
168 friend bool operator != (
const iterator& lhs,
const iterator& rhs)
170 return !(lhs == rhs);
174 friend bool operator < (
const iterator& lhs,
const iterator& rhs)
176 return lhs.ptr < rhs.ptr;
180 friend bool operator <= (
const iterator& lhs,
const iterator& rhs)
186 friend bool operator > (
const iterator& lhs,
const iterator& rhs)
192 friend bool operator >= (
const iterator& lhs,
const iterator& rhs)
198 friend iterator operator + (
const iterator& lhs, difference_type offset)
206 friend iterator operator + (difference_type offset,
const iterator& rhs)
214 friend iterator operator - (
const iterator& lhs, difference_type offset)
222 friend iterator operator - (difference_type offset,
const iterator& rhs)
230 friend difference_type operator - (
const iterator& lhs,
const iterator& rhs)
232 return lhs.ptr - rhs.ptr;
238 iterator(TBase* pbegin_,
size_t index_,
size_t element_size_)
239 : element_size(element_size_)
241 ptr =
reinterpret_cast<pointer
>(
reinterpret_cast<char*
>(pbegin_) + (index_ * element_size));
252 template <
typename TBase,
size_t Extent = etl::dynamic_extent>
257 typedef TBase element_type;
258 typedef typename etl::remove_cv<TBase>::type value_type;
259 typedef size_t size_type;
260 typedef TBase& reference;
261 typedef const TBase& const_reference;
262 typedef TBase* pointer;
263 typedef const TBase* const_pointer;
266 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
268 static ETL_CONSTANT
size_t extent = Extent;
270 template <
typename UBase,
size_t UExtent>
271 friend class poly_span;
277 : pbegin(ETL_NULLPTR)
285 template <
typename TIterator,
typename TSize>
286 ETL_CONSTEXPR
poly_span(
const TIterator begin_,
const TSize ) ETL_NOEXCEPT
288 , element_size(
sizeof(
typename etl::iterator_traits<TIterator>::value_type))
290 typedef typename etl::iterator_traits<TIterator>::value_type data_type;
292 ETL_STATIC_ASSERT((
etl::is_same<ETL_OR_STD::random_access_iterator_tag,
typename etl::iterator_traits<TIterator>::iterator_category>::value),
"Not a random access iterator");
299 template <
typename TIterator>
300 ETL_CONSTEXPR
poly_span(
const TIterator begin_,
const TIterator )
304 typedef typename etl::iterator_traits<TIterator>::value_type data_type;
305 typedef typename etl::iterator_traits<TIterator>::iterator_category
iterator_category;
314 template<
typename U,
size_t Size>
317 , element_size(
sizeof(U))
319 ETL_STATIC_ASSERT(Size <= Extent,
"Array data overflow");
326 template <
typename U,
size_t Size>
329 , element_size(
sizeof(U))
331 ETL_STATIC_ASSERT(Size <= Extent,
"Array data overflow");
338 template <
typename U,
size_t Size>
341 , element_size(
sizeof(U))
343 ETL_STATIC_ASSERT(Size <= Extent,
"Array data overflow");
347#if ETL_USING_STL && ETL_USING_CPP11
351 template <
typename U,
size_t Size>
352 ETL_CONSTEXPR
poly_span(std::array<U, Size>& a) ETL_NOEXCEPT
354 , element_size(
sizeof(U))
356 ETL_STATIC_ASSERT(Size <= Extent,
"Array data overflow");
363 template <
typename U,
size_t Size>
364 ETL_CONSTEXPR
poly_span(
const std::array<U, Size>& a) ETL_NOEXCEPT
366 , element_size(
sizeof(U))
368 ETL_STATIC_ASSERT(Size <= Extent,
"Array data overflow");
376 ETL_CONSTEXPR
poly_span(
const poly_span<TBase, Extent>& other) ETL_NOEXCEPT
377 : pbegin(other.pbegin)
378 , element_size(other.element_size)
385 template <
typename UBase>
386 ETL_CONSTEXPR
poly_span(
const poly_span<UBase, Extent>& other) ETL_NOEXCEPT
387 : pbegin(other.pbegin)
388 , element_size(other.element_size)
395 ETL_NODISCARD ETL_CONSTEXPR reference
front() const ETL_NOEXCEPT
403 ETL_NODISCARD ETL_CONSTEXPR reference
back() const ETL_NOEXCEPT
405 return *element_at(Extent - 1U);
411 ETL_NODISCARD ETL_CONSTEXPR pointer
data() const ETL_NOEXCEPT
419 ETL_NODISCARD ETL_CONSTEXPR iterator
begin() const ETL_NOEXCEPT
421 return iterator(pbegin, 0U, element_size);
427 ETL_NODISCARD ETL_CONSTEXPR iterator
end() const ETL_NOEXCEPT
429 return iterator(pbegin, Extent, element_size);
443 ETL_CONSTEXPR reverse_iterator
rend() const ETL_NOEXCEPT
445 return reverse_iterator(
begin());
451 ETL_NODISCARD ETL_CONSTEXPR
bool empty() const ETL_NOEXCEPT
453 return (Extent == 0U);
459 ETL_NODISCARD ETL_CONSTEXPR
size_t size() const ETL_NOEXCEPT
475 ETL_NODISCARD ETL_CONSTEXPR
size_t size_bytes() const ETL_NOEXCEPT
477 return Extent * element_size;
483 ETL_CONSTEXPR14 poly_span&
operator =(
const poly_span& other) ETL_NOEXCEPT
485 pbegin = other.pbegin;
486 element_size = other.element_size;
493 template <
typename UBase>
494 ETL_CONSTEXPR14 poly_span&
operator =(
const poly_span<UBase, Extent>& other) ETL_NOEXCEPT
496 pbegin = other.pbegin;
497 element_size = other.element_size;
506 return *element_at(i);
512 template <
size_t COUNT>
529 template <
size_t COUNT>
547 template <
size_t OFFSET,
size_t COUNT = etl::dynamic_extent>
548 ETL_NODISCARD ETL_CONSTEXPR
etl::poly_span<element_type, COUNT != etl::dynamic_extent ? COUNT : Extent - OFFSET>
subspan() const ETL_NOEXCEPT
550 return (COUNT == etl::dynamic_extent) ?
etl::poly_span<element_type, COUNT != etl::dynamic_extent ? COUNT : Extent - OFFSET>(pbegin, OFFSET, Extent, element_size)
551 :
etl::
poly_span<element_type, COUNT !=
etl::dynamic_extent ? COUNT : Extent - OFFSET>(pbegin, OFFSET, COUNT, element_size);
557 template <
size_t OFFSET,
size_t COUNT>
560 if (COUNT == etl::dynamic_extent)
562 return etl::poly_span<element_type, COUNT != etl::dynamic_extent ? COUNT : Extent - OFFSET>(pbegin, OFFSET, Extent, element_size);
566 return etl::poly_span<element_type, COUNT != etl::dynamic_extent ? COUNT : Extent - OFFSET>(pbegin, OFFSET, element_size);
583 template <
typename TFrom>
589 typedef typename char_ptr_type<TBase>::type char_ptr_t;
592 pointer element_at(
size_t index)
const ETL_NOEXCEPT
594 char_ptr_t base =
reinterpret_cast<char_ptr_t
>(pbegin);
595 return reinterpret_cast<pointer
>(base + (index * element_size));
602 poly_span(TBase* pbegin_,
size_t offset_,
size_t ,
size_t element_size_) ETL_NOEXCEPT
603 : pbegin(
reinterpret_cast<pointer
>(
reinterpret_cast<char_ptr_t
>(pbegin_) + (offset_ * element_size_)))
604 , element_size(element_size_)
614 template <
typename TBase,
size_t Extent>
615 ETL_CONSTANT
size_t poly_span<TBase, Extent>::extent;
620 template <
typename TBase>
621 class poly_span<TBase,
etl::dynamic_extent>
625 typedef TBase element_type;
626 typedef typename etl::remove_cv<TBase>::type value_type;
627 typedef size_t size_type;
628 typedef TBase& reference;
629 typedef const TBase& const_reference;
630 typedef TBase* pointer;
631 typedef const TBase* const_pointer;
633 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
635 static ETL_CONSTANT
size_t extent = etl::dynamic_extent;
637 template <
typename UBase,
size_t UExtent>
638 friend class poly_span;
644 : pbegin(ETL_NULLPTR)
653 template <
typename TIterator,
typename TSize>
654 ETL_CONSTEXPR
poly_span(
const TIterator begin_,
const TSize size_) ETL_NOEXCEPT
656 , element_size(
sizeof(
typename etl::iterator_traits<TIterator>::value_type))
659 typedef typename etl::iterator_traits<TIterator>::value_type data_type;
660 typedef typename etl::iterator_traits<TIterator>::iterator_category
iterator_category;
669 template <
typename TIterator>
670 ETL_CONSTEXPR
poly_span(
const TIterator begin_,
const TIterator end_)
673 , span_extent(size_t(
etl::distance(begin_, end_)))
675 typedef typename etl::iterator_traits<TIterator>::value_type data_type;
676 typedef typename etl::iterator_traits<TIterator>::iterator_category
iterator_category;
685 template<
typename U,
size_t Size>
688 , element_size(
sizeof(U))
697 template <
typename U,
size_t Size>
700 , element_size(
sizeof(U))
709 template <
typename U,
size_t Size>
712 , element_size(
sizeof(U))
718#if ETL_USING_STL && ETL_USING_CPP11
722 template <
typename U,
size_t Size>
723 ETL_CONSTEXPR
poly_span(std::array<U, Size>& a) ETL_NOEXCEPT
725 , element_size(
sizeof(U))
734 template <
typename U,
size_t Size>
735 ETL_CONSTEXPR
poly_span(
const std::array<U, Size>& a) ETL_NOEXCEPT
737 , element_size(
sizeof(U))
747 ETL_CONSTEXPR
poly_span(
const poly_span<TBase, etl::dynamic_extent>& other) ETL_NOEXCEPT
748 : pbegin(other.pbegin)
749 , element_size(other.element_size)
750 , span_extent(other.span_extent)
757 template <
typename UBase>
758 ETL_CONSTEXPR
poly_span(
const poly_span<UBase, etl::dynamic_extent>& other) ETL_NOEXCEPT
759 : pbegin(other.pbegin)
760 , element_size(other.element_size)
761 , span_extent(other.span_extent)
768 ETL_NODISCARD ETL_CONSTEXPR reference
front() const ETL_NOEXCEPT
776 ETL_NODISCARD ETL_CONSTEXPR reference
back() const ETL_NOEXCEPT
778 return *element_at(span_extent - 1U);
784 ETL_NODISCARD ETL_CONSTEXPR pointer
data() const ETL_NOEXCEPT
792 ETL_NODISCARD ETL_CONSTEXPR iterator
begin() const ETL_NOEXCEPT
794 return iterator(pbegin, 0U, element_size);
800 ETL_NODISCARD ETL_CONSTEXPR iterator
end() const ETL_NOEXCEPT
802 return iterator(pbegin, span_extent, element_size);
816 ETL_NODISCARD ETL_CONSTEXPR reverse_iterator
rend() const ETL_NOEXCEPT
818 return reverse_iterator(
begin());
824 ETL_NODISCARD ETL_CONSTEXPR
bool empty() const ETL_NOEXCEPT
826 return (span_extent == 0);
832 ETL_NODISCARD ETL_CONSTEXPR
size_t size() const ETL_NOEXCEPT
848 ETL_NODISCARD ETL_CONSTEXPR
size_t size_bytes() const ETL_NOEXCEPT
850 return element_size * span_extent;
856 ETL_CONSTEXPR14 poly_span&
operator =(
const poly_span& other) ETL_NOEXCEPT
858 pbegin = other.pbegin;
859 element_size = other.element_size;
860 span_extent = other.span_extent;
867 template <
typename UBase>
868 ETL_CONSTEXPR14 poly_span&
operator =(
const poly_span<UBase, etl::dynamic_extent>& other) ETL_NOEXCEPT
870 pbegin = other.pbegin;
871 element_size = other.element_size;
872 span_extent = other.span_extent;
881 return *element_at(i);
887 template <
size_t COUNT>
904 template <
size_t COUNT>
922 template <
size_t OFFSET,
size_t COUNT = etl::dynamic_extent>
926 :
etl::
poly_span<element_type, COUNT !=
etl::dynamic_extent ? COUNT :
etl::dynamic_extent>(pbegin, OFFSET, COUNT, element_size);
932 template <
size_t OFFSET,
size_t COUNT>
935 if (COUNT == etl::dynamic_extent)
960 poly_span(TBase* pbegin_,
size_t offset_,
size_t extent_,
size_t element_size_) ETL_NOEXCEPT
961 : pbegin(
reinterpret_cast<pointer
>(
reinterpret_cast<char_ptr_t
>(pbegin_) + (offset_ * element_size_)))
962 , element_size(element_size_)
963 , span_extent(extent_)
970 template <
typename TFrom>
976 typedef typename char_ptr_type<TBase>::type char_ptr_t;
979 pointer element_at(
size_t index)
const ETL_NOEXCEPT
981 char_ptr_t base =
reinterpret_cast<char_ptr_t
>(pbegin);
982 return reinterpret_cast<pointer
>(base + (index * element_size));
990 template <
typename TBase>
991 ETL_CONSTANT
size_t poly_span<TBase, etl::dynamic_extent>::extent;
997 template <
typename TIterator>
998 poly_span(
const TIterator begin_,
const TIterator end_)
999 ->poly_span<etl::remove_pointer_t<TIterator>, etl::dynamic_extent>;
1001 template <
typename TIterator,
typename TSize>
1002 poly_span(
const TIterator begin_,
const TSize size_)
1003 ->poly_span<etl::remove_pointer_t<TIterator>, etl::dynamic_extent>;
1005 template <
typename T,
size_t Size>
1007 ->poly_span<T, Size>;
1009 template <
typename T,
size_t Size>
1011 ->poly_span<T, Size>;
1013 template <
typename T,
size_t Size>
1015 ->poly_span<
const T, Size>;
1018 template <
typename T,
size_t Size>
1020 ->poly_span<T, Size>;
1022 template <
typename T,
size_t Size>
1024 ->poly_span<
const T, Size>;
1031#if ETL_USING_8BIT_TYPES
1032 template <
typename TBase,
size_t Extent>
1033 struct hash<etl::
poly_span<TBase, Extent> >
1035 size_t operator()(
const etl::poly_span<TBase, Extent>& view)
const
1037 return etl::private_hash::generic_hash<size_t>(
reinterpret_cast<const uint8_t*
>(view.
data()),
1038 reinterpret_cast<const uint8_t*
>(view.
data() + view.
size()));
ETL_CONSTEXPR poly_span(const TIterator begin_, const TSize size_) ETL_NOEXCEPT
Construct from iterator + size.
Definition poly_span.h:654
ETL_CONSTEXPR poly_span() ETL_NOEXCEPT
Default constructor.
Definition poly_span.h:643
ETL_NODISCARD ETL_CONSTEXPR reference front() const ETL_NOEXCEPT
Returns a reference to the first element.
Definition poly_span.h:768
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > last(size_t count) const ETL_NOEXCEPT
Obtains a poly_span that is a view over the last count elements of this poly_span.
Definition poly_span.h:913
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, COUNT > last() const ETL_NOEXCEPT
Obtains a poly_span that is a view over the last COUNT elements of this poly_span.
Definition poly_span.h:905
ETL_NODISCARD ETL_CONSTEXPR reverse_iterator rend() const ETL_NOEXCEPT
Returns a reverse iterator to the end of the poly_span.
Definition poly_span.h:816
ETL_NODISCARD ETL_CONSTEXPR iterator begin() const ETL_NOEXCEPT
Returns an iterator to the beginning of the poly_span.
Definition poly_span.h:792
ETL_NODISCARD ETL_CONSTEXPR pointer data() const ETL_NOEXCEPT
Returns a pointer to the first element of the internal storage.
Definition poly_span.h:784
ETL_NODISCARD ETL_CONSTEXPR size_t size() const ETL_NOEXCEPT
Returns the size of the poly_span.
Definition poly_span.h:832
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > subspan(size_t offset, size_t count=etl::dynamic_extent) const ETL_NOEXCEPT
Obtains a poly_span that is a view from 'offset' over the next 'count' elements of this poly_span.
Definition poly_span.h:949
ETL_NODISCARD ETL_CONSTEXPR bool empty() const ETL_NOEXCEPT
Returns true if the poly_span size is zero.
Definition poly_span.h:824
ETL_NODISCARD ETL_CONSTEXPR size_t size_of_element() const ETL_NOEXCEPT
Returns the size of the type stored in the poly_span.
Definition poly_span.h:840
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, COUNT > first() const ETL_NOEXCEPT
Obtains a poly_span that is a view over the first COUNT elements of this poly_span.
Definition poly_span.h:888
ETL_CONSTEXPR poly_span(U(&begin_)[Size]) ETL_NOEXCEPT
Construct from C array.
Definition poly_span.h:686
poly_span(TBase *pbegin_, size_t offset_, size_t extent_, size_t element_size_) ETL_NOEXCEPT
Construct from iterator + offset + size + element size.
Definition poly_span.h:960
ETL_CONSTEXPR poly_span(const TIterator begin_, const TIterator end_)
Construct from iterators.
Definition poly_span.h:670
ETL_NODISCARD ETL_CONSTEXPR size_t size_bytes() const ETL_NOEXCEPT
Returns the size of the poly_span in bytes.
Definition poly_span.h:848
ETL_CONSTEXPR poly_span(const etl::array< U, Size > &a) ETL_NOEXCEPT
Construct from etl::array.
Definition poly_span.h:710
ETL_CONSTEXPR poly_span(const poly_span< TBase, etl::dynamic_extent > &other) ETL_NOEXCEPT
Copy constructor.
Definition poly_span.h:747
ETL_CONSTEXPR reference operator[](size_t i) const
Returns a reference to the indexed value.
Definition poly_span.h:879
ETL_NODISCARD ETL_CONSTEXPR reference back() const ETL_NOEXCEPT
Returns a reference to the last element.
Definition poly_span.h:776
ETL_CONSTEXPR poly_span(const poly_span< UBase, etl::dynamic_extent > &other) ETL_NOEXCEPT
Copy constructor.
Definition poly_span.h:758
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > first(size_t count) const ETL_NOEXCEPT
Obtains a poly_span that is a view over the first count elements of this poly_span.
Definition poly_span.h:896
ETL_CONSTEXPR poly_span(etl::array< U, Size > &a) ETL_NOEXCEPT
Construct from etl::array.
Definition poly_span.h:698
etl::poly_span< element_type, COUNT !=etl::dynamic_extent ? COUNT :etl::dynamic_extent > subspan() const
Obtains a poly_span that is a view from OFFSET over the next COUNT elements of this poly_span.
Definition poly_span.h:933
ETL_NODISCARD ETL_CONSTEXPR iterator end() const ETL_NOEXCEPT
Returns an iterator to the end of the poly_span.
Definition poly_span.h:800
Poly Span - Fixed Extent.
Definition poly_span.h:254
ETL_NODISCARD ETL_CONSTEXPR size_t size_of_element() const ETL_NOEXCEPT
Returns the size of the type stored in the poly_span.
Definition poly_span.h:467
ETL_NODISCARD ETL_CONSTEXPR iterator end() const ETL_NOEXCEPT
Returns an iterator to the end of the poly_span.
Definition poly_span.h:427
ETL_CONSTEXPR reverse_iterator rend() const ETL_NOEXCEPT
Returns a reverse iterator to the end of the poly_span.
Definition poly_span.h:443
ETL_NODISCARD ETL_CONSTEXPR pointer data() const ETL_NOEXCEPT
Returns a pointer to the first element of the internal storage.
Definition poly_span.h:411
poly_span(TBase *pbegin_, size_t offset_, size_t, size_t element_size_) ETL_NOEXCEPT
Definition poly_span.h:602
ETL_CONSTEXPR14 poly_span & operator=(const poly_span &other) ETL_NOEXCEPT
Assign from a poly_span.
Definition poly_span.h:483
ETL_NODISCARD ETL_CONSTEXPR bool empty() const ETL_NOEXCEPT
Returns true if the poly_span size is zero.
Definition poly_span.h:451
ETL_NODISCARD ETL_CONSTEXPR reference front() const ETL_NOEXCEPT
Returns a reference to the first element.
Definition poly_span.h:395
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > subspan(size_t offset, size_t count=etl::dynamic_extent) const ETL_NOEXCEPT
Obtains a poly_span that is a view from 'offset' over the next 'count' elements of this poly_span.
Definition poly_span.h:574
ETL_CONSTEXPR poly_span() ETL_NOEXCEPT
Default constructor.
Definition poly_span.h:276
ETL_CONSTEXPR poly_span(U(&begin_)[Size]) ETL_NOEXCEPT
Construct from C array.
Definition poly_span.h:315
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > first(size_t count) const
Obtains a poly_span that is a view over the first count elements of this poly_span.
Definition poly_span.h:521
ETL_CONSTEXPR poly_span(const TIterator begin_, const TSize) ETL_NOEXCEPT
Construct from iterator + size.
Definition poly_span.h:286
ETL_NODISCARD ETL_CONSTEXPR iterator begin() const ETL_NOEXCEPT
Returns an iterator to the beginning of the poly_span.
Definition poly_span.h:419
etl::poly_span< element_type, COUNT !=etl::dynamic_extent ? COUNT :Extent - OFFSET > subspan() const
Obtains a poly_span that is a view from OFFSET over the next COUNT elements of this poly_span.
Definition poly_span.h:558
ETL_NODISCARD ETL_CONSTEXPR reference back() const ETL_NOEXCEPT
Returns a reference to the last element.
Definition poly_span.h:403
ETL_NODISCARD ETL_CONSTEXPR size_t size_bytes() const ETL_NOEXCEPT
Returns the size of the poly_span in bytes.
Definition poly_span.h:475
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, COUNT > last() const ETL_NOEXCEPT
Obtains a poly_span that is a view over the last COUNT elements of this poly_span.
Definition poly_span.h:530
ETL_CONSTEXPR poly_span(const etl::array< U, Size > &a) ETL_NOEXCEPT
Construct from etl::array.
Definition poly_span.h:339
ETL_CONSTEXPR poly_span(etl::array< U, Size > &a) ETL_NOEXCEPT
Construct from etl::array.
Definition poly_span.h:327
ETL_NODISCARD ETL_CONSTEXPR size_t size() const ETL_NOEXCEPT
Returns the size of the poly_span.
Definition poly_span.h:459
ETL_CONSTEXPR poly_span(const poly_span< TBase, Extent > &other) ETL_NOEXCEPT
Copy constructor.
Definition poly_span.h:376
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, etl::dynamic_extent > last(size_t count) const ETL_NOEXCEPT
Obtains a poly_span that is a view over the last count elements of this poly_span.
Definition poly_span.h:538
ETL_CONSTEXPR reference operator[](size_t i) const
Returns a reference to the indexed value.
Definition poly_span.h:504
ETL_CONSTEXPR poly_span(const poly_span< UBase, Extent > &other) ETL_NOEXCEPT
Copy constructor.
Definition poly_span.h:386
ETL_CONSTEXPR poly_span(const TIterator begin_, const TIterator)
Construct from iterators.
Definition poly_span.h:300
ETL_NODISCARD ETL_CONSTEXPR etl::poly_span< element_type, COUNT > first() const ETL_NOEXCEPT
Obtains a poly_span that is a view over the first COUNT elements of this poly_span.
Definition poly_span.h:513
Definition poly_span.h:67
Definition iterator.h:228
ETL_CONSTEXPR14 bool operator==(const etl::expected< TValue, TError > &lhs, const etl::expected< TValue2, TError2 > &rhs)
Equivalence operators.
Definition expected.h:962
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
conditional
Definition type_traits_generator.h:1223
is_base_of
Definition type_traits_generator.h:1315
is_same
Definition type_traits_generator.h:1104
bitset_ext
Definition absolute.h:39
ETL_CONSTEXPR TContainer::reverse_iterator rbegin(TContainer &container)
Definition iterator.h:1084
Definition poly_span.h:585