//============================================== // ------------- Iteration --------------------- //============================================== public static TreeIter <TTreeNode> operator ++(TreeIter <TTreeNode> iterator) { if (End == iterator) { return(End); } TreeIterState <TTreeNode> nextState = iterator.State.CreateCopyForNextEvaluation(); TreeIter <TTreeNode> nextIter = new TreeIter <TTreeNode>(nextState, iterator.TraversalParameters); for (; ;) { eNextTraversalMove nextAction = nextIter.DetermineNextAction(); switch (nextAction) { case eNextTraversalMove.Process: nextState.MoveToNext(); nextState.ProcessNextEvaluations(); return(nextIter); case eNextTraversalMove.ProcessAndPrune: nextState.MoveToNext(); return(nextIter); case eNextTraversalMove.SkipAndContinueSearching: nextState.MoveToNext(); nextState.ProcessNextEvaluations(); continue; case eNextTraversalMove.PruneAndContinueSearching: nextState.MoveToNext(); continue; default: case eNextTraversalMove.Quit: return(End); } } }
/// <summary> /// Basic constructor /// </summary> internal TreeIter(TreeIterState <TTreeNode> state, TreeTraversalParameters <TTreeNode> traversalParameters) { this.State = state; this.TraversalParameters = traversalParameters; }