



#include	"..\Datas\ZooGarbage.h"






///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ZGarbage Class
///
///		- Classe des garbages
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////
/// Constructor															///
///////////////////////////////////////////////////////////////////////////
ZGarbage::ZGarbage() : ZNode(NULL)				
{	
	type = GBC_COLL_ID;
}


ZGarbage::~ZGarbage()
{
	Clean();
}




///////////////////////////////////////////////////////////////////////////
/// Clean the garbage													///
///////////////////////////////////////////////////////////////////////////

void DeleteRecursGarbage(ZNode *firstNode)
{
	ZNode	*curNode, *nodeSon, *nodeNext;

	curNode = firstNode;

	while(curNode != NULL)
	{
		nodeSon  = curNode->son;
		nodeNext = curNode->next;

		if( (curNode->type!=SND_TYPE_ID) || (((ZSound*)curNode)->listenermode==true) )		delete curNode;

		// Test of recursion
		if(nodeSon!=NULL)			DeleteRecursGarbage(nodeSon);
		curNode = nodeNext;
	}
}


void ZGarbage::Clean()
{
	DeleteRecursGarbage(son);
	son = NULL;
}
