View difference between Paste ID: 14jeVY4n and ThWqEbWJ
SHOW: | | - or go back to the newest paste.
1-
struct DoingTheNastyAllocator(Allocator, size_t chunkSize) {
1+
struct DoingTheNastyAllocator(Allocator, size_t chunkSize = 4096*16) {
2
	enum size_t alignment = 16;
3
	
4
	Allocator allocator;
5
	void[] heap;
6
	
7
	void[] allocate(size_t size) {
8
		immutable actSize = (size + 15) & ~15;
9
		
10
		if (actSize <= heap.length) {
11
			void[] buf = heap[0..size];
12
			heap = heap[actSize..$];
13
			return buf;
14
		}
15
		
16
		if (actSize > chunkSize)
17
			return allocator.alloc(size);
18
		
19
		void[] buf = allocator.alloc(chunkSize);
20
		heap = buf[actSize..$];
21
		return buf[0..size];
22
	}
23
24
	void deallocate(void[] buf) { /* lol */ }
25
	void deallocateAll() { allocator.deallocateAll() } // lol here too?
26
	
27
	static typeof(this) it = typeof(this)();
28
}