Add begin, end, rbegin and rend iterator functions to Span

pull/13252/head
Marc Emmers 2020-07-08 17:14:39 +02:00
parent 13efd1af38
commit dfa8ea714d
1 changed files with 100 additions and 0 deletions

View File

@ -233,6 +233,16 @@ struct Span {
*/
typedef element_type &reference;
/**
* Iterator to an ElementType
*/
typedef pointer iterator;
/**
* Reverse iterator to an ElementType
*/
typedef std::reverse_iterator<iterator> reverse_iterator;
/**
* Size of the Extent; -1 if dynamic.
*/
@ -349,6 +359,46 @@ struct Span {
return size() == 0;
}
/**
* Return an iterator to the first element of the sequence.
*
* @return An iterator to the first element of the sequence.
*/
iterator begin() const
{
return _data;
}
/**
* Return an iterator to the element following the last element of the sequence.
*
* @return An iterator to the element following the last element of the sequence.
*/
iterator end() const
{
return _data + Extent;
}
/**
* Return a reverse_iterator to the first element of the reversed sequence.
*
* @return A reverse_iterator to the first element of the reversed sequence.
*/
reverse_iterator rbegin() const
{
return reverse_iterator(end());
}
/**
* Return a reverse_iterator to the element following the last element of the reversed sequence.
*
* @return A reverse_iterator to the element following the last element of the reversed sequence.
*/
reverse_iterator rend() const
{
return reverse_iterator(begin());
}
/**
* Returns a reference to the element at position @p index.
*
@ -534,6 +584,16 @@ struct Span<ElementType, SPAN_DYNAMIC_EXTENT> {
*/
typedef element_type &reference;
/**
* Iterator to an ElementType
*/
typedef pointer iterator;
/**
* Reverse iterator to an ElementType
*/
typedef std::reverse_iterator<iterator> reverse_iterator;
/**
* Size of the Extent; -1 if dynamic.
*/
@ -644,6 +704,46 @@ struct Span<ElementType, SPAN_DYNAMIC_EXTENT> {
return size() == 0;
}
/**
* Return an iterator to the first element of the sequence.
*
* @return An iterator to the first element of the sequence.
*/
iterator begin() const
{
return _data;
}
/**
* Return an iterator to the element following the last element of the sequence.
*
* @return An iterator to the element following the last element of the sequence.
*/
iterator end() const
{
return _data + _size;
}
/**
* Return a reverse_iterator to the first element of the reversed sequence.
*
* @return A reverse_iterator to the first element of the reversed sequence.
*/
reverse_iterator rbegin() const
{
return reverse_iterator(end());
}
/**
* Return a reverse_iterator to the element following the last element of the reversed sequence.
*
* @return A reverse_iterator to the element following the last element of the reversed sequence.
*/
reverse_iterator rend() const
{
return reverse_iterator(begin());
}
/**
* Access to an element of the sequence.
*