Gaia-ECS v1.0.0
A simple and powerful entity component system
Loading...
Searching...
No Matches
raw_data_holder.h
1#pragma once
2#include "gaia/config/config.h"
3
4#include <cinttypes>
5
6#include "gaia/mem/data_layout_policy.h"
7
8namespace gaia {
9 namespace mem {
11 namespace detail {
12 template <uint32_t Size, uint32_t Alignment>
13 struct raw_data_holder {
14 static_assert(Size > 0);
15
16 GAIA_ALIGNAS(Alignment) uint8_t data[Size];
17
18 constexpr operator uint8_t*() noexcept {
19 return &data[0];
20 }
21
22 constexpr operator const uint8_t*() const noexcept {
23 return &data[0];
24 }
25 };
26
27 template <uint32_t Size>
28 struct raw_data_holder<Size, 0> {
29 static_assert(Size > 0);
30
31 uint8_t data[Size];
32
33 constexpr operator uint8_t*() noexcept {
34 return &data[0];
35 }
36
37 constexpr operator const uint8_t*() const noexcept {
38 return &data[0];
39 }
40 };
41 } // namespace detail
43
47 template <typename T, uint32_t N>
48 using raw_data_holder = detail::raw_data_holder<N, auto_view_policy<T>::Alignment>;
49 } // namespace mem
50} // namespace gaia