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

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

namespace asl
{

template<typename T>
concept allocator = 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