#include "mPool.h"

mPool::mPool ( )
{
	int i;
	
	head = new Message;
	tail = head;
	
	for (i=1; i<10000; ++i)
	{
		tail->Next = new Message;

		tail = tail->Next;
	}
	
	size = 10000;
}

mPool::~mPool ( )
{
	Message *tmp = head;
	
	while (head != NULL)
	{
		tmp = head;

		head = head->Next;
		delete tmp;
	}
	
	head = tmp = tail = NULL;
}

Message * mPool::checkOut ( )
{
	if (getSize () <= 1)
	{

		addSomeMore ( );
	}
	
	Message *tmp = head;
	head = head->Next;
	--size;
	
	return tmp;
}

void mPool::checkIn (Message *returned)
{
	tail->Next = returned;
	
	while (tail->Next != NULL)
	{
		++size;

		tail = tail->Next;
	}
}

int mPool::getSize ( ) const
{
	return size;
}

void mPool::addSomeMore ( )
{
	int i;
	
	for (i=0; i<100; ++i)
	{
		tail->Next=new Message;
		++size;
		tail = tail->Next;
	}

	tail->Next = NULL;
}