mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-25 01:27:08 +01:00
types: span::slice & helpers
This commit is contained in:
@@ -443,13 +443,15 @@ inline String operator+(String&& lhs, const __FlashStringHelper* rhs) {
|
||||
|
||||
template <typename T>
|
||||
struct Span {
|
||||
Span() = delete;
|
||||
|
||||
constexpr explicit Span(std::nullptr_t) :
|
||||
_data(nullptr),
|
||||
_size(0)
|
||||
{}
|
||||
|
||||
constexpr Span() noexcept :
|
||||
Span(nullptr)
|
||||
{}
|
||||
|
||||
constexpr Span(T* data, size_t size) :
|
||||
_data(data),
|
||||
_size(size)
|
||||
@@ -464,6 +466,14 @@ struct Span {
|
||||
return _data;
|
||||
}
|
||||
|
||||
constexpr bool is_null() const {
|
||||
return _data == nullptr;
|
||||
}
|
||||
|
||||
constexpr bool empty() const {
|
||||
return is_null() || _size == 0;
|
||||
}
|
||||
|
||||
constexpr size_t size() const {
|
||||
return _size;
|
||||
}
|
||||
@@ -488,6 +498,18 @@ struct Span {
|
||||
return _data[_size - 1];
|
||||
}
|
||||
|
||||
constexpr Span<T> slice(size_t index, size_t size) const {
|
||||
return Span<T>(_data + std::min(index, _size), std::min(size, _size - index));
|
||||
}
|
||||
|
||||
constexpr Span<T> slice(size_t index) const {
|
||||
return slice(index, _size - index);
|
||||
}
|
||||
|
||||
Span<T>& advance(size_t index) {
|
||||
return *this = slice(index);
|
||||
}
|
||||
|
||||
private:
|
||||
T* _data;
|
||||
size_t _size;
|
||||
|
||||
Reference in New Issue
Block a user