File: SkAlignedStorage.h

package info (click to toggle)
webkit2gtk 2.51.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 455,340 kB
  • sloc: cpp: 3,865,253; javascript: 197,710; ansic: 165,177; python: 49,241; asm: 21,868; ruby: 18,095; perl: 16,926; xml: 4,623; sh: 2,409; yacc: 2,356; java: 2,019; lex: 1,330; pascal: 372; makefile: 210
file content (32 lines) | stat: -rw-r--r-- 1,133 bytes parent folder | download | duplicates (38)
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