Merge pull request #13252 from marcemmers/span-add-begin-end

Implements iterators for the Span class to be compatible with std::span
pull/13263/head
Martin Kojtal 2020-07-09 15:13:32 +02:00 committed by GitHub
commit aa605bb056
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 101 additions and 0 deletions

View File

@ -19,6 +19,7 @@
#define MBED_PLATFORM_SPAN_H_
#include <algorithm>
#include <iterator>
#include <stddef.h>
#include <stdint.h>
@ -233,6 +234,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 +360,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 +585,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 +705,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.
*