#include "platform.h" #include "tidy-int.h" #include "TidyNodeIter.h" TidyNodeIter *newTidyNodeIter( Node *pStart ) { TidyNodeIter *pThis = NULL; if (NULL != (pThis = MemAlloc( sizeof( TidyNodeIter )))) { ClearMemory( pThis, sizeof( TidyNodeIter )); pThis->pTop = pStart; } return pThis; } Node *nextTidyNode( TidyNodeIter *pThis ) { if (NULL == pThis->pCurrent) { // just starting out, initialize pThis->pCurrent = pThis->pTop->content; } else if (NULL != pThis->pCurrent->content) { // the next element, if any, is my first-born child pThis->pCurrent = pThis->pCurrent->content; } else { // no children, I guess my next younger brother inherits the throne. while ( NULL == pThis->pCurrent->next && pThis->pTop != pThis->pCurrent->parent ) { // no siblings, do any of my ancestors have younger sibs? pThis->pCurrent = pThis->pCurrent->parent; } pThis->pCurrent = pThis->pCurrent->next; } return pThis->pCurrent; } void setCurrentNode( TidyNodeIter *pThis, Node *newCurr ) { if (NULL != newCurr) pThis->pCurrent = newCurr; }