// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Fixed-size object allocator.  Returned memory is not zeroed.
//
// See malloc.h for overview.

#include "runtime.h"
#include "malloc.h"

// Initialize f to allocate objects of the given size,
// using the allocator to obtain chunks of memory.
void
FixAlloc_Init(FixAlloc *f, uintptr size, void *(*alloc)(uintptr))
{
	f->size = size;
	f->alloc = alloc;
	f->list = nil;
	f->chunk = nil;
	f->nchunk = 0;
}

void*
FixAlloc_Alloc(FixAlloc *f)
{
	void *v;

	if(f->list) {
		v = f->list;
		f->list = *(void**)f->list;
		return v;
	}
	if(f->nchunk < f->size) {
		f->chunk = f->alloc(FixAllocChunk);
		if(f->chunk == nil)
			throw("out of memory (FixAlloc)");
		f->nchunk = FixAllocChunk;
	}
	v = f->chunk;
	f->chunk += f->size;
	f->nchunk -= f->size;
	return v;
}

void
FixAlloc_Free(FixAlloc *f, void *p)
{
	*(void**)p = f->list;
	f->list = p;
}

