4 #include "TidyNodeIter.h"
6 TidyNodeIter *newTidyNodeIter( Node *pStart )
8 TidyNodeIter *pThis = NULL;
9 if (NULL != (pThis = MemAlloc( sizeof( TidyNodeIter ))))
11 ClearMemory( pThis, sizeof( TidyNodeIter ));
17 Node *nextTidyNode( TidyNodeIter *pThis )
19 if (NULL == pThis->pCurrent)
21 // just starting out, initialize
22 pThis->pCurrent = pThis->pTop->content;
24 else if (NULL != pThis->pCurrent->content)
26 // the next element, if any, is my first-born child
27 pThis->pCurrent = pThis->pCurrent->content;
31 // no children, I guess my next younger brother inherits the throne.
32 while ( NULL == pThis->pCurrent->next
33 && pThis->pTop != pThis->pCurrent->parent )
35 // no siblings, do any of my ancestors have younger sibs?
36 pThis->pCurrent = pThis->pCurrent->parent;
38 pThis->pCurrent = pThis->pCurrent->next;
40 return pThis->pCurrent;
43 void setCurrentNode( TidyNodeIter *pThis, Node *newCurr )
46 pThis->pCurrent = newCurr;