Public feed #603461

Etwas

public cpp v1 · immutable
Raw Edit
·published 2007-07-04 20:10 UTC
rendered paste body
treeLeaf* innerNode::next(innerNode *node){	innerNode *parent;		do {    	/* iterate through all children in order */		for (; node->iter_state < 4; )		{			printf("node %p state %i\n", node, node->iter_state);			switch (node->iter_state) 			{				case 0:					if (node->p_upperleft->getType() == TREELEAF)	/* go upper left */					{						printf("0 leaf found\n");						node->iter_state++;						return (treeLeaf *)node->p_upperleft;					}					else					{						treeLeaf *leaf = ((innerNode *)node->p_upperleft)->next((innerNode *)node->p_upperleft);						if(((innerNode *)node->p_upperleft)->iter_state == 4)							node->iter_state++;						return leaf;						}				case 1:					if (node->p_upperright->getType() == TREELEAF)	/* go upper right */					{						printf("1 leaf found\n");						node->iter_state++;						return (treeLeaf* )node->p_upperright;					}					else					{						treeLeaf *leaf = ((innerNode *)node->p_upperright)->next((innerNode *)node->p_upperright);						if(((innerNode *)node->p_upperright)->iter_state == 4)							node->iter_state++;						return leaf;					}				case 2:					if (node->p_downleft->getType() == TREELEAF)	/* go down left */					{						printf("2 leaf found\n");						node->iter_state++;						return (treeLeaf* )node->p_downleft;					}					else					{						treeLeaf *leaf = ((innerNode *)node->p_downleft)->next((innerNode *)node->p_downleft);						if(((innerNode *)node->p_downleft)->iter_state == 4)							node->iter_state++;						return leaf;					}				case 3:					if (node->p_downright->getType() == TREELEAF)	/* go down right */					{						printf("3 leaf found\n");						node->iter_state++;						return (treeLeaf* )node->p_downright;					}					else					{						treeLeaf *leaf = ((innerNode *)node->p_downright)->next((innerNode *)node->p_downright);						if(((innerNode *)node->p_downright)->iter_state == 4)							node->iter_state++;						return leaf;					}			}		}		node->iter_state = 0;							/* reset iter state */	} while ((node = (innerNode *)node->parent));       /* go to parent  and continue at next child */	return NULL;                                     }