Add size() and data() to SkAlignedSTStorage
Change-Id: I274e117215cf7c79c77a3b5b22e516528cfdc73a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/606903
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
diff --git a/include/private/SkTArray.h b/include/private/SkTArray.h
index 872b777..0223d3a 100644
--- a/include/private/SkTArray.h
+++ b/include/private/SkTArray.h
@@ -687,6 +687,10 @@
INHERITED::operator=(std::move(that));
return *this;
}
+
+ // Force the use of SkTArray for data() and size().
+ using INHERITED::data;
+ using INHERITED::size;
};
#endif
diff --git a/include/private/SkTemplates.h b/include/private/SkTemplates.h
index 00502f1..f893333 100644
--- a/include/private/SkTemplates.h
+++ b/include/private/SkTemplates.h
@@ -407,8 +407,14 @@
*/
void* get() { return fStorage; }
const void* get() const { return fStorage; }
+
+ // Act as a container of bytes because the storage is uninitialized.
+ std::byte* data() { return fStorage; }
+ const std::byte* data() const { return fStorage; }
+ size_t size() const { return std::size(fStorage); }
+
private:
- alignas(T) char fStorage[sizeof(T)*N];
+ alignas(T) std::byte fStorage[sizeof(T) * N];
};
using SkAutoFree = std::unique_ptr<void, SkFunctionWrapper<void(void*), sk_free>>;