summaryrefslogtreecommitdiff
path: root/asl/layout.hpp
blob: 2295a1cf0b39d7424a4ceada55f8f14d445c5809 (plain)
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
33
34
35
#pragma once

#include "asl/integers.hpp"
#include "asl/meta.hpp"

namespace asl
{

template<typename T>
inline constexpr isize_t size_of = static_cast<isize_t>(sizeof(T));

template<typename T>
inline constexpr isize_t align_of = static_cast<isize_t>(alignof(T));

struct layout
{
    isize_t size;
    isize_t align;

    constexpr bool operator==(const layout&) const = default;

    template<is_object T>
    static constexpr layout of()
    {
        return layout{ size_of<T>, align_of<T> };
    }

    template<is_object T>
    static constexpr layout array(isize_t size)
    {
        return layout{ size_of<T> * size, align_of<T> };
    }
};

} // namespace asl