diff options
author | Moonchild <mcwerewolf@gmail.com> | 2018-10-08 08:15:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-08 08:15:08 +0200 |
commit | 7e96154b878e6e08ccc1220ad252aeac312d4753 (patch) | |
tree | 7a1f7869bdbe1c66652d1af8a21d2182ee4db1f1 /mfbt/Range.h | |
parent | 0357bf9fb69f745274b36c4e3649fe5ba6edbad9 (diff) | |
parent | a08ef72265f270f7b0925a0ee9f5c6cee4187c6d (diff) | |
download | UXP-7e96154b878e6e08ccc1220ad252aeac312d4753.tar UXP-7e96154b878e6e08ccc1220ad252aeac312d4753.tar.gz UXP-7e96154b878e6e08ccc1220ad252aeac312d4753.tar.lz UXP-7e96154b878e6e08ccc1220ad252aeac312d4753.tar.xz UXP-7e96154b878e6e08ccc1220ad252aeac312d4753.zip |
Merge pull request #818 from trav90/mfbt-work
Add mozilla::Span
Diffstat (limited to 'mfbt/Range.h')
-rw-r--r-- | mfbt/Range.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mfbt/Range.h b/mfbt/Range.h index 47d91bb0c..753fe07f8 100644 --- a/mfbt/Range.h +++ b/mfbt/Range.h @@ -9,6 +9,7 @@ #include "mozilla/RangedPtr.h" #include "mozilla/TypeTraits.h" +#include "mozilla/Span.h" #include <stddef.h> @@ -44,6 +45,19 @@ public: mEnd(aOther.mEnd) {} + MOZ_IMPLICIT Range(Span<T> aSpan) + : Range(aSpan.Elements(), aSpan.Length()) + { + } + + template<typename U, + class = typename EnableIf<IsConvertible<U (*)[], T (*)[]>::value, + int>::Type> + MOZ_IMPLICIT Range(const Span<U>& aSpan) + : Range(aSpan.Elements(), aSpan.Length()) + { + } + RangedPtr<T> begin() const { return mStart; } RangedPtr<T> end() const { return mEnd; } size_t length() const { return mEnd - mStart; } @@ -51,8 +65,26 @@ public: T& operator[](size_t aOffset) const { return mStart[aOffset]; } explicit operator bool() const { return mStart != nullptr; } + + operator Span<T>() { return Span<T>(mStart.get(), length()); } + + operator Span<const T>() const { return Span<T>(mStart.get(), length()); } }; +template<class T> +Span<T> +MakeSpan(Range<T>& aRange) +{ + return aRange; +} + +template<class T> +Span<const T> +MakeSpan(const Range<T>& aRange) +{ + return aRange; +} + } // namespace mozilla #endif /* mozilla_Range_h */ |