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
|