From c2fa384d666aea1b119736f33116ac09e870fda0 Mon Sep 17 00:00:00 2001 From: trav90 Date: Sat, 6 Oct 2018 17:29:50 -0500 Subject: Add mozilla::Span --- mfbt/Range.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'mfbt/Range.h') 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 @@ -44,6 +45,19 @@ public: mEnd(aOther.mEnd) {} + MOZ_IMPLICIT Range(Span aSpan) + : Range(aSpan.Elements(), aSpan.Length()) + { + } + + template::value, + int>::Type> + MOZ_IMPLICIT Range(const Span& aSpan) + : Range(aSpan.Elements(), aSpan.Length()) + { + } + RangedPtr begin() const { return mStart; } RangedPtr 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() { return Span(mStart.get(), length()); } + + operator Span() const { return Span(mStart.get(), length()); } }; +template +Span +MakeSpan(Range& aRange) +{ + return aRange; +} + +template +Span +MakeSpan(const Range& aRange) +{ + return aRange; +} + } // namespace mozilla #endif /* mozilla_Range_h */ -- cgit v1.2.3