1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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
|