#include "EGStack.h"


void *EGStack::alloc(size_t bytes) {
	if(chunks.empty() || lastest_chunk_used+bytes > lastest_chunk_size) {
		chunks.reserve(chunks.size()+10);
		size_t cs = bytes<=chunk_size ? chunk_size : bytes;
		char *new_chunk = new char[cs];
		chunks.push_back(new_chunk);
		lastest_chunk_size = cs;
		lastest_chunk_used = 0;
	}
	
	char *ptr = chunks.back() + lastest_chunk_used;
	lastest_chunk_used += bytes;
	return ptr;
}

void EGStack::clear() {
	for(auto e : chunks)
		delete[] e;
	chunks.clear();
	lastest_chunk_size = 0;
	lastest_chunk_used = 0;
}