Pull SkSpan into its own header file
Change-Id: I32d800c91794093973cb8128fd1b83b4aff91845
Reviewed-on: https://skia-review.googlesource.com/148672
Commit-Queue: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/gn/core.gni b/gn/core.gni
index cfb4622..69e4353 100644
--- a/gn/core.gni
+++ b/gn/core.gni
@@ -286,6 +286,7 @@
"$_src/core/SkSharedMutex.cpp",
"$_src/core/SkSharedMutex.h",
"$_src/core/SkSinglyLinkedList.h",
+ "$_src/core/SkSpan.h",
"$_src/core/SkSpecialImage.cpp",
"$_src/core/SkSpecialImage.h",
"$_src/core/SkSpecialSurface.cpp",
diff --git a/src/core/SkGlyphRun.h b/src/core/SkGlyphRun.h
index 52c5d52..ff0026c 100644
--- a/src/core/SkGlyphRun.h
+++ b/src/core/SkGlyphRun.h
@@ -17,6 +17,7 @@
#include "SkMask.h"
#include "SkPath.h"
#include "SkPoint.h"
+#include "SkSpan.h"
#include "SkSurfaceProps.h"
#include "SkTemplates.h"
#include "SkTextBlobPriv.h"
@@ -29,31 +30,6 @@
class SkGlyphRunList;
class SkRasterClip;
-template <typename T>
-class SkSpan {
-public:
- SkSpan() : fPtr{nullptr}, fSize{0} {}
- SkSpan(T* ptr, size_t size) : fPtr{ptr}, fSize{size} { }
- template <typename U>
- explicit SkSpan(std::vector<U>& v) : fPtr{v.data()}, fSize{v.size()} {}
- SkSpan(const SkSpan<T>& o) = default;
- SkSpan& operator=( const SkSpan& other ) = default;
- T& operator [] (size_t i) const { return fPtr[i]; }
- T* begin() const { return fPtr; }
- T* end() const { return fPtr + fSize; }
- const T* cbegin() const { return fPtr; }
- const T* cend() const { return fPtr + fSize; }
- T* data() const { return fPtr; }
- size_t size() const { return fSize; }
- bool empty() const { return fSize == 0; }
- size_t size_bytes() const { return fSize * sizeof(T); }
- SkSpan<const T> toConst() const { return SkSpan<const T>{fPtr, fSize}; }
-
-private:
- T* fPtr;
- size_t fSize;
-};
-
class SkGlyphRun {
public:
SkGlyphRun() = default;
diff --git a/src/core/SkSpan.h b/src/core/SkSpan.h
new file mode 100644
index 0000000..8c2df5e
--- /dev/null
+++ b/src/core/SkSpan.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSpan_DEFINED
+#define SkSpan_DEFINED
+
+#include <cstddef>
+#include <vector>
+
+template <typename T>
+class SkSpan {
+public:
+ SkSpan() : fPtr{nullptr}, fSize{0} {}
+ SkSpan(T* ptr, size_t size) : fPtr{ptr}, fSize{size} { }
+ template <typename U>
+ explicit SkSpan(std::vector<U>& v) : fPtr{v.data()}, fSize{v.size()} {}
+ SkSpan(const SkSpan<T>& o) = default;
+ SkSpan& operator=( const SkSpan& other ) = default;
+ T& operator [] (size_t i) const { return fPtr[i]; }
+ T* begin() const { return fPtr; }
+ T* end() const { return fPtr + fSize; }
+ const T* cbegin() const { return fPtr; }
+ const T* cend() const { return fPtr + fSize; }
+ T* data() const { return fPtr; }
+ size_t size() const { return fSize; }
+ bool empty() const { return fSize == 0; }
+ size_t size_bytes() const { return fSize * sizeof(T); }
+ SkSpan<const T> toConst() const { return SkSpan<const T>{fPtr, fSize}; }
+
+private:
+ T* fPtr;
+ size_t fSize;
+};
+
+#endif // SkSpan_DEFINED