Esempio n. 1
0
bool SDLAudio::LoadSFXFile( std::string Filename, std::string SFXName )
{
    /** Check to see if we've already loaded it */
    SListIterator<SGZSound*> SFXListITR = SFXList.GetIterator();

    for( SFXListITR.Start(); SFXListITR.Valid(); SFXListITR.Forth() )
        if((SFXListITR.Item()->Name.compare(SFXName))==0)
        {
            SGZLogger.debug("AudioMAN: SFX \"%s\" already loaded!\n", SFXName.c_str());
            return false;
        }

    /** Load a sound effect to play */
    SGZLogger.debug("AudioMAN: Loading SFX \"%s\" as %s\n", Filename.c_str(), SFXName.c_str());
    SGZSound *Effect;
    Effect = new SGZSound;
    Effect->Name = SFXName;
    Effect->Data = Mix_LoadWAV(Filename.c_str());
    if(Effect->Data == NULL)
    {
        SGZLogger.warn("AudioMAN: Failed to load SFX: %s\n", Filename.c_str());
        delete Effect;
        return false;
    }
    else
        SFXList.Append(Effect);
    return true;
}
Esempio n. 2
0
bool SDLAudio::DestroyInterface(void)
{
    /** Destroy a client interface */
    SListIterator<SGZMusic*> MusicListITR = MusicList.GetIterator();

    MusicListITR.Start();
    while (MusicListITR.Valid())
    {
        Mix_FreeMusic(MusicListITR.Item()->Data);
        MusicList.Remove(MusicListITR);
        MusicListITR.Forth();
    }

    SListIterator<SGZSound*> SFXListITR = SFXList.GetIterator();

    SFXListITR.Start();
    while (SFXListITR.Valid())
    {
        Mix_FreeChunk(SFXListITR.Item()->Data);
        SFXList.Remove(SFXListITR);
        SFXListITR.Forth();
    }

    Mix_CloseAudio();

    return true;
}
SList<node>& DynamicSPQRForest::findPathSPQR (node sH, node tH, node& rT) const
{
	SList<node>& pT = *OGDF_NEW SList<node>;
	node sT = spqrproper(sH->firstAdj()->theEdge());
	node tT = spqrproper(tH->firstAdj()->theEdge());
	node nT = findNCASPQR(sT,tT);
	while (sT!=nT) {
		edge eH = m_tNode_hRefEdge[sT];
		node uH = eH->source();
		node vH = eH->target();
		if (uH!=sH && vH!=sH) pT.pushBack(sT);
		if (uH==tH || vH==tH) { rT = sT; return pT; }
		sT = spqrproper(m_hEdge_twinEdge[eH]);
	}
	SListIterator<node> iT = pT.rbegin();
	while (tT!=nT) {
		edge eH = m_tNode_hRefEdge[tT];
		node uH = eH->source();
		node vH = eH->target();
		if (uH!=tH && vH!=tH) {
			if (iT.valid()) pT.insertAfter(tT,iT);
			else pT.pushFront(tT);
		}
		if (uH==sH || vH==sH) { rT = tT; return pT; }
		tT = spqrproper(m_hEdge_twinEdge[eH]);
	}
	if (iT.valid()) pT.insertAfter(nT,iT);
	else pT.pushFront(nT);
	rT = nT; return pT;
}
Esempio n. 4
0
bool SDLAudio::LoadMUSFile( std::string Filename, std::string MUSName )
{
    /** Check to see if we've already loaded it */
    SListIterator<SGZMusic*> MusicListITR = MusicList.GetIterator();

    for( MusicListITR.Start(); MusicListITR.Valid(); MusicListITR.Forth() )
        if((MusicListITR.Item()->Name.compare(MUSName))==0)
        {
            SGZLogger.debug("AudioMAN: SFX: %s already loaded!\n", MUSName.c_str());
            return false;
        }

    /** Load a music to play */
    SGZLogger.debug("AudioMAN: Loading MUS: %s as %s\n", Filename.c_str(), MUSName.c_str());
    SGZMusic *Music;
    Music = new SGZMusic;
    Music->Name = MUSName;
    Music->Data = Mix_LoadMUS(Filename.c_str());
    if(Music->Data == NULL)
    {
        SGZLogger.warn("AudioMAN: Failed to load MUS: %s\n", Filename.c_str());
        delete Music;
        return false;
    }
    else
        MusicList.Append(Music);
    return true;
}
Esempio n. 5
0
// Initializes a PQTree by a set of leaves that will korrespond to
// the set of Keys stored in leafKeys.
int PlanarPQTree::Initialize(SListPure<PlanarLeafKey<IndInfo*>*> &leafKeys)
{
	SListIterator<PlanarLeafKey<IndInfo*>* >  it;
	SListPure<PQLeafKey<edge,IndInfo*,bool>*> castLeafKeys;
	for (it = leafKeys.begin(); it.valid(); ++it)
		castLeafKeys.pushBack((PQLeafKey<edge,IndInfo*,bool>*) *it);

	return PQTree<edge,IndInfo*,bool>::Initialize(castLeafKeys);
}
Esempio n. 6
0
void CInterpret::CleanEvents( void )
{
    SListIterator<IEvent*> EventListITR = EventList.GetIterator();
    for( EventListITR.Start(); EventListITR.Valid(); EventListITR.Forth() )
    {
        if(EventListITR.Item()->handled(false))
            EventList.Remove(EventListITR);
    }
}
Esempio n. 7
0
// Reduction reduced a set of leaves determined by their keys stored 
// in leafKeys. Integer redNumber is for debugging only.
bool PlanarPQTree::Reduction(SListPure<PlanarLeafKey<indInfo*>*> &leafKeys)
{
	SListIterator<PlanarLeafKey<indInfo*>* >  it;
	SListPure<PQLeafKey<edge,indInfo*,bool>*> castLeafKeys;
	for (it = leafKeys.begin(); it.valid(); ++it)
		castLeafKeys.pushBack((PQLeafKey<edge,indInfo*,bool>*) *it);

	return PQTree<edge,indInfo*,bool>::Reduction(castLeafKeys);
}
Esempio n. 8
0
	forall_nodes(v,G)
	{
		SListIterator<PlanarLeafKey<whaInfo*>* > it;
		for (it = inLeaves[v].begin(); it.valid(); ++it)
		{
			PlanarLeafKey<whaInfo*>* L = *it;
			outLeaves[L->userStructKey()->opposite(v)].pushFront(L);
		}
	}
Esempio n. 9
0
bool MTexture::checkExist ( const std::string &Name )
{
	SListIterator<TextureObj*> TextureITR = mTextureList.getIterator();
	for( TextureITR.start(); TextureITR.valid(); TextureITR.forth() )
		if(TextureITR.item()->mName.compare(Name)==0)
			return true;

	return false;
}
Esempio n. 10
0
bool MEntity::UpdateEntities( void )
{
    /** Update Entities */
    SListIterator<IEntity*> EntityListITR = EntityList.GetIterator();
    for( EntityListITR.Start(); EntityListITR.Valid(); EntityListITR.Forth() )
        EntityListITR.Item()->Update();

    return true;
}
Esempio n. 11
0
bool MEntity::CheckExist(std::string Name)
{
    /** Check an Entity */
    SListIterator<IEntity*> EntityListITR = EntityList.GetIterator();
    for( EntityListITR.Start(); EntityListITR.Valid(); EntityListITR.Forth() )
        if(EntityListITR.Item()->GetName().compare(Name)==0)
            return true;

    return false;
}
Esempio n. 12
0
bool SDLEntity2D::LoadFrame ( std::string Name, std::string TexName, std::string MaskName, int FrameDelay, int x, int y, SGZCOLOUR ColourKey )
{
    /// Load up a Texture into an Animation
    SListIterator<SGZAnimGroup2D*> AnimListITR = AnimList.GetIterator();

    for( AnimListITR.Start(); AnimListITR.Valid(); AnimListITR.Forth() )
        if((AnimListITR.Item()->AnimName.compare(Name))==0)
        {
            SGZAnimFrame2D *Frame = new SGZAnimFrame2D;
            Frame->TextureName = TexName;
            Frame->MaskName = "none";
            Frame->delay = FrameDelay;
            Frame->u = x;
            Frame->v = y;
            Frame->colkey = ColourKey;
            AnimListITR.Item()->FrameList.Append(Frame);
            AnimListITR.Item()->AnimNum++;
            AnimListITR.Item()->FrameITR = AnimListITR.Item()->FrameList.GetIterator();

            if(!SGZInterpret.accessServer()->World()->accessTextureManager()->CheckExist(TexName))
                SGZLogger.warn("Texture %s has not been loaded yet.. make sure it is before calling this frame!", TexName.c_str());
            return true;
        }

    SGZLogger.warn("Animation \"%s\" does not exist!\n",Name.c_str());
    return false;
}
Esempio n. 13
0
bool SDLEntity2D::LoadFrame ( std::string Name, std::string TexName, std::string MaskName, int FrameDelay, int x, int y, SGZ::RGBCOLOUR ColourKey )
{
	/// Load up a Texture into an Animation
	SListIterator<SGZAnimGroup2D*> AnimListITR = AnimList.getIterator();

	for( AnimListITR.start(); AnimListITR.valid(); AnimListITR.forth() )
		if((AnimListITR.item()->AnimName.compare(Name))==0)
		{
			SGZAnimFrame2D *Frame = new SGZAnimFrame2D;
			Frame->TextureName = TexName;
			Frame->MaskName = MaskName;
			Frame->delay = FrameDelay;
			Frame->u = x;
			Frame->v = y;
			Frame->colkey = ColourKey;
			AnimListITR.item()->FrameList.append(Frame);
			AnimListITR.item()->AnimNum++;
			AnimListITR.item()->FrameITR = AnimListITR.item()->FrameList.getIterator();

			if(!manTextures->checkExist(TexName))
				SGZ::Logger.log( SGZLOG::Warning, "Texture " + TexName + " has not been loaded yet.. make sure it is before calling this frame!");
			return true;
		}

	SGZ::Logger.log( SGZLOG::Warning, "Animation \"" + Name + "\" does not exist!\n");
	return false;
}
Esempio n. 14
0
MTexture::~MTexture()
{
	/** Destructor */
	SListIterator<TextureObj*> TextureITR = mTextureList.getIterator();

	TextureITR.start();
	while (TextureITR.valid())
	{
		mTextureList.remove(TextureITR);
		TextureITR.forth();
	}
}
Esempio n. 15
0
MEntity::~MEntity()
{
    /** Destructor */
    SListIterator<IEntity*> EntityListITR = EntityList.GetIterator();

    EntityListITR.Start();
    while (EntityListITR.Valid())
    {
        EntityList.Remove(EntityListITR);
        EntityListITR.Forth();
    }
}
Esempio n. 16
0
bool MTexture::delTexture( const std::string &Name )
{
	SListIterator<TextureObj*> TextureITR = mTextureList.getIterator();
	for( TextureITR.start(); TextureITR.valid(); TextureITR.forth() )
		if(TextureITR.item()->mName.compare(Name)==0)
		{
			mTextureList.remove(TextureITR);
			return true;
		}

	SGZ::Logger.log( SGZLOG::Warning, "Texture " + Name + " does not exist!\n");
	return false;
}
Esempio n. 17
0
bool SDLEntity2D::DeleteVar( std::string Name )
{
	SListIterator<SGZVarGroup*> VarITR = VarList.getIterator();

	for( VarITR.start(); VarITR.valid(); VarITR.forth() )
		if((VarITR.item()->Name.compare(Name))==0)
		{
			VarList.remove(VarITR);
			return true;
		}

	SGZ::Logger.log( SGZLOG::Warning, "Variable \"" + Name + "\" does not exist!\n");
	return false;
}
Esempio n. 18
0
bool MEntity::DelEntity(std::string Name)
{
    /** Remove an Entity */
    SListIterator<IEntity*> EntityListITR = EntityList.GetIterator();
    for( EntityListITR.Start(); EntityListITR.Valid(); EntityListITR.Forth() )
        if(EntityListITR.Item()->GetName().compare(Name)==0)
        {
            EntityList.Remove(EntityListITR);
            return true;
        }

    SGZLogger.warn("Entity %s does not exist!\n", Name.c_str());
    return false;
}
Esempio n. 19
0
bool SDLEntity2D::DeleteVar( std::string Name )
{
    SListIterator<SGZVarGroup*> VarITR = VarList.GetIterator();

    for( VarITR.Start(); VarITR.Valid(); VarITR.Forth() )
        if((VarITR.Item()->Name.compare(Name))==0)
        {
            VarList.Remove(VarITR);
            return true;
        }

    SGZLogger.warn("Variable \"%s\" does not exist!\n",Name.c_str());
    return false;
}
Esempio n. 20
0
void UMLGraph::undoStars()
{
	SListIterator<node> it = m_centerNodes.begin();
	while (it.valid())
	{
		undoStar(*it, false);
		++it;
	}//while

	m_hiddenEdges->restore();
	m_centerNodes.clear();
	m_replacementEdge.init();

}//undostars
Esempio n. 21
0
bool SDLAudio::RemoveGROUP(std::string name)
{
    /** Check to see if we've created it */
    SListIterator<SGZChanGroup*> GroupListITR = GroupList.GetIterator();

    for( GroupListITR.Start(); GroupListITR.Valid(); GroupListITR.Forth() )
        if((GroupListITR.Item()->Name.compare(name))==0)
        {
            GroupList.Remove(GroupListITR);
            return true;
        }

    SGZLogger.warn("AudioMAN: Group \"%s\" doesn't exist!\n", name.c_str());
    return false;
}
// Function ReplaceFullRoot either replaces the full root 
// or one full child of a partial root of a pertinent subtree
// by a single P-node  with leaves corresponding the keys stored in leafKeys.
void PlanarSubgraphPQTree::
ReplaceFullRoot(SListPure<PlanarLeafKey<whaInfo*>*> &leafKeys)
{

	PQLeaf<edge,whaInfo*,bool>          *leafPtr     = 0; // dummy
	PQInternalNode<edge,whaInfo*,bool>	*nodePtr     = 0; // dummy
	//PQNodeKey<edge,whaInfo*,bool>	    *nodeInfoPtr = 0; // dummy
	PQNode<edge,whaInfo*,bool>		    *currentNode = 0; // dummy
	SListIterator<PlanarLeafKey<whaInfo*>* >  it;

	if (!leafKeys.empty() && leafKeys.front() == leafKeys.back())
	{
		//ReplaceFullRoot: replace pertinent root by a single leaf
		leafPtr = OGDF_NEW PQLeaf<edge,whaInfo*,bool>(m_identificationNumber++,
                    EMPTY,(PQLeafKey<edge,whaInfo*,bool>*)leafKeys.front());
		exchangeNodes(m_pertinentRoot,(PQNode<edge,whaInfo*,bool>*) leafPtr);
		if (m_pertinentRoot == m_root)
			m_root = (PQNode<edge,whaInfo*,bool>*) leafPtr;      
	}
	else if (!leafKeys.empty()) // at least two leaves
	{
		//replace pertinent root by a $P$-node
		if ((m_pertinentRoot->type() == P_NODE) || 
			(m_pertinentRoot->type() == Q_NODE))
		{
			nodePtr = (PQInternalNode<edge,whaInfo*,bool>*)m_pertinentRoot;
			nodePtr->type(P_NODE);
			nodePtr->status(PERTROOT);
			nodePtr->childCount(0);
			while (!fullChildren(m_pertinentRoot)->empty())
			{	
				currentNode = fullChildren(m_pertinentRoot)->popFrontRet();
				removeChildFromSiblings(currentNode);
			}
		}      
		else if (m_pertinentRoot->type() == LEAF)
		{
			nodePtr = OGDF_NEW PQInternalNode<edge,whaInfo*,bool>(m_identificationNumber++,
														 P_NODE,EMPTY);
			exchangeNodes(m_pertinentRoot,nodePtr);
		}
		SListPure<PQLeafKey<edge,whaInfo*,bool>*> castLeafKeys;
		for (it = leafKeys.begin(); it.valid(); ++it)
			castLeafKeys.pushBack((PQLeafKey<edge,whaInfo*,bool>*) *it);
		addNewLeavesToTree(nodePtr,castLeafKeys);
	}
  
}
Esempio n. 23
0
// Function ReplaceFullRoot either replaces the full root 
// or one full child of a partial root of a pertinent subtree
// by a single P-node  with leaves corresponding the keys stored in leafKeys.
void PlanarPQTree::ReplaceFullRoot(SListPure<PlanarLeafKey<indInfo*>*> &leafKeys)
{
	if (!leafKeys.empty() && leafKeys.front() == leafKeys.back())
	{
		//ReplaceFullRoot: replace pertinent root by a single leaf
		PQLeaf<edge,indInfo*,bool> *leafPtr =
			OGDF_NEW PQLeaf<edge,indInfo*,bool>(m_identificationNumber++,
            EMPTY,(PQLeafKey<edge,indInfo*,bool>*)leafKeys.front());

		exchangeNodes(m_pertinentRoot,(PQNode<edge,indInfo*,bool>*) leafPtr);
		if (m_pertinentRoot == m_root)
			m_root = (PQNode<edge,indInfo*,bool>*) leafPtr;      
		m_pertinentRoot = 0;  // check for this emptyAllPertinentNodes
	}

	else if (!leafKeys.empty()) // at least two leaves
	{
		PQInternalNode<edge,indInfo*,bool> *nodePtr = 0; // dummy
		//replace pertinent root by a $P$-node
		if ((m_pertinentRoot->type() == PQNodeRoot::PNode) || 
			(m_pertinentRoot->type() == PQNodeRoot::QNode))
		{
			nodePtr = (PQInternalNode<edge,indInfo*,bool>*)m_pertinentRoot;
			nodePtr->type(PQNodeRoot::PNode);
			nodePtr->childCount(0);
			while (!fullChildren(m_pertinentRoot)->empty())
				removeChildFromSiblings(fullChildren(m_pertinentRoot)->popFrontRet());
		}      
		else if (m_pertinentRoot->type() == PQNodeRoot::leaf)
		{
			nodePtr = OGDF_NEW PQInternalNode<edge,indInfo*,bool>(m_identificationNumber++,
														 PQNodeRoot::PNode,EMPTY);
			exchangeNodes(m_pertinentRoot,nodePtr);
			m_pertinentRoot = 0;  // check for this emptyAllPertinentNodes
		}
		
		SListPure<PQLeafKey<edge,indInfo*,bool>*> castLeafKeys;
		SListIterator<PlanarLeafKey<indInfo*>* >  it;
		for (it = leafKeys.begin(); it.valid(); ++it)
			castLeafKeys.pushBack((PQLeafKey<edge,indInfo*,bool>*) *it);
		addNewLeavesToTree(nodePtr,castLeafKeys);
	}
}
Esempio n. 24
0
void UpwardPlanRep::removeSinkArcs(SList<adjEntry> &crossedEdges) {

	if (crossedEdges.size() == 2)
		return;


	SListIterator<adjEntry> itPred = crossedEdges.begin(), it;
	for(it = itPred.succ(); it.valid() && it.succ().valid(); ++it)	{
		adjEntry adj = *it;
		if (m_isSinkArc[adj->theEdge()]) {
			m_Gamma.joinFaces(adj->theEdge());
			crossedEdges.delSucc(itPred);
			it = itPred;
			continue;
		}
		itPred = it;
	}
	m_Gamma.setExternalFace(m_Gamma.rightFace(extFaceHandle));
}
// Reduction reduced a set of leaves determined by their keys stored 
// in leafKeys. Integer redNumber is for debugging only.
bool PlanarSubgraphPQTree::
Reduction(SListPure<PlanarLeafKey<whaInfo*>*> &leafKeys,
		  SList<PQLeafKey<edge,whaInfo*,bool>*> &eliminatedKeys,
		  int redNumber)
{
	SListPure<PQLeafKey<edge,whaInfo*,bool>*> castLeafKeys;

	SListIterator<PlanarLeafKey<whaInfo*>* >  it;
	for (it = leafKeys.begin(); it.valid(); ++it)
	{
		castLeafKeys.pushBack((PQLeafKey<edge,whaInfo*,bool>*) *it);
		#ifdef OGDF_DEBUG
		if (int(ogdf::debugLevel) >= int(dlHeavyChecks))
		{		
			cout << (*it)->print() << endl;
		}
		#endif
	}

	determineMinRemoveSequence(castLeafKeys,eliminatedKeys);
	removeEliminatedLeaves(eliminatedKeys);

	SListIterator<PQLeafKey<edge,whaInfo*,bool>* >  itn = castLeafKeys.begin();
	SListIterator<PQLeafKey<edge,whaInfo*,bool>* >  itp = itn++;
	for (; itn.valid();)
	{
		if ((*itn)->nodePointer()->status()== WHA_DELETE) 
		{
			itn++;
			castLeafKeys.delSucc(itp);
		}
		else
			itp = itn++;
	}
	
	if ((*castLeafKeys.begin())->nodePointer()->status() == WHA_DELETE)
		castLeafKeys.popFront();

	
	return Reduce(castLeafKeys,redNumber);
}
Esempio n. 26
0
bool SDLEntity2D::DeleteAnimation( std::string Name )
{
    SListIterator<SGZAnimGroup2D*> AnimListITR = AnimList.GetIterator();

    for( AnimListITR.Start(); AnimListITR.Valid(); AnimListITR.Forth() )
        if((AnimListITR.Item()->AnimName.compare(Name))==0)
        {
            AnimListITR.Item()->FrameITR.Start();
            while (AnimListITR.Item()->FrameITR.Valid())
            {
                AnimListITR.Item()->FrameList.Remove(AnimListITR.Item()->FrameITR);
                AnimListITR.Item()->FrameITR.Forth();
            }

            AnimList.Remove(AnimListITR);
            return true;
        }

    SGZLogger.warn("Animation \"%s\" does not exist!\n",Name.c_str());
    return false;
}
Esempio n. 27
0
bool SDLAudio::CreateGROUP(int num, std::string name)
{
    /** Check to see if we've already created it */
    SListIterator<SGZChanGroup*> GroupListITR = GroupList.GetIterator();

    for( GroupListITR.Start(); GroupListITR.Valid(); GroupListITR.Forth() )
        if((GroupListITR.Item()->Name.compare(name))==0)
        {
            SGZLogger.debug("AudioMAN: Group \"%s\" already created!\n", name.c_str());
            return false;
        }

    /** Create a channel group */
    SGZLogger.debug("AudioMAN: Creating SFX Group \"%s\"\n", name.c_str());
    SGZChanGroup *Group;
    Group = new SGZChanGroup;
    Group->Name = name;
    Group->groupNum = num;
    GroupList.Append(Group);
    return true;
}
Esempio n. 28
0
bool SDLEntity2D::DeleteAnimation( std::string Name )
{
	SListIterator<SGZAnimGroup2D*> AnimListITR = AnimList.getIterator();

	for( AnimListITR.start(); AnimListITR.valid(); AnimListITR.forth() )
		if((AnimListITR.item()->AnimName.compare(Name))==0)
		{
			AnimListITR.item()->FrameITR.start();
			while (AnimListITR.item()->FrameITR.valid())
			{
				AnimListITR.item()->FrameList.remove(AnimListITR.item()->FrameITR);
				AnimListITR.item()->FrameITR.forth();
			}

			AnimList.remove(AnimListITR);
			return true;
		}

	SGZ::Logger.log( SGZLOG::Warning, "Animation \"" + Name + "\" does not exist!\n");
	return false;
}
Esempio n. 29
0
void CInterpret::Stop( void )
{
    SGZLogger.debug("SGZInterpretor Stopping...\n");
    if(ClientObject)
    {
        SGZLogger.debug("Bringing down Client Object\n");
        ClientObject->DestroyInterface();
        ClientObject=NULL;
    }

    if(ServerObject)
    {
        SGZLogger.debug("Bringing down Server Object\n");
        ServerObject->DestroyInterface();
        ServerObject=NULL;
    }

    if(ScriptObject)
    {
        SGZLogger.debug("Bringing down Script Object\n");
        ScriptObject->DestroyInterface();
        ScriptObject=NULL;
    }

    SGZLogger.debug("Removing remaining Events\n");

    SListIterator<IEvent*> EventListITR = EventList.GetIterator();

    EventListITR.Start();
    while (EventListITR.Valid())
    {
        EventList.Remove(EventListITR);
        EventListITR.Forth();
    }

    runStatus = false;
    SGZLogger.debug("SGZInterpretor Stopped Successfully\n");
    SGZLogger.warn("SGZEngine Closed.\n");
}
void PlanarSubgraphPQTree::
removeEliminatedLeaves(SList<PQLeafKey<edge,whaInfo*,bool>*> &eliminatedKeys)
{
	PQNode<edge,whaInfo*,bool>*  nodePtr = 0;
	PQNode<edge,whaInfo*,bool>*  parent  = 0;
	PQNode<edge,whaInfo*,bool>*  sibling = 0;

	SListIterator<PQLeafKey<edge,whaInfo*,bool>*> it;
	for (it = eliminatedKeys.begin(); it.valid(); it++)
	{
		nodePtr = (*it)->nodePointer();
		parent = nodePtr->parent();
		sibling = nodePtr->getNextSib(NULL);

		removeNodeFromTree(parent,nodePtr);
		checkIfOnlyChild(sibling,parent);
		if (parent->status() == TO_BE_DELETED)
		{
			parent->status(WHA_DELETE);
		}
		nodePtr->status(WHA_DELETE);
	}
}