summaryrefslogtreecommitdiff
path: root/asl/allocator.hpp
blob: eb03e0f23d76047fafe65e3b4841b85e47cb132a (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
#pragma once

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

namespace asl
{

template<typename T>
concept allocator = moveable<T> &&
    requires(T& alloc, layout layout, void* ptr)
    {
        { alloc.alloc(layout) } -> same_as<void*>;
        { alloc.realloc(ptr, layout, layout) } -> same_as<void*>;
        alloc.dealloc(ptr, layout);
    };

class GlobalHeap
{
public:
    static void* alloc(const layout&);
    static void* realloc(void* ptr, const layout& old, const layout& new_layout);
    static void dealloc(void* ptr, const layout&);
};
static_assert(allocator<GlobalHeap>);

using DefaultAllocator = GlobalHeap;

} // namespace asl