summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/include/private/base/SkAlignedStorage.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/include/private/base/SkAlignedStorage.h')
-rw-r--r--gfx/skia/skia/include/private/base/SkAlignedStorage.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/gfx/skia/skia/include/private/base/SkAlignedStorage.h b/gfx/skia/skia/include/private/base/SkAlignedStorage.h
new file mode 100644
index 0000000000..532ad03978
--- /dev/null
+++ b/gfx/skia/skia/include/private/base/SkAlignedStorage.h
@@ -0,0 +1,32 @@
+// Copyright 2022 Google LLC
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
+#ifndef SkAlignedStorage_DEFINED
+#define SkAlignedStorage_DEFINED
+
+#include <cstddef>
+#include <iterator>
+
+template <int N, typename T> class SkAlignedSTStorage {
+public:
+ SkAlignedSTStorage() {}
+ SkAlignedSTStorage(SkAlignedSTStorage&&) = delete;
+ SkAlignedSTStorage(const SkAlignedSTStorage&) = delete;
+ SkAlignedSTStorage& operator=(SkAlignedSTStorage&&) = delete;
+ SkAlignedSTStorage& operator=(const SkAlignedSTStorage&) = delete;
+
+ // Returns void* because this object does not initialize the
+ // memory. Use placement new for types that require a constructor.
+ 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) std::byte fStorage[sizeof(T) * N];
+};
+
+#endif // SkAlignedStorage_DEFINED