Example #1
0
        //==============================================
        // ------------- 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);
                }
            }
        }
Example #2
0
 /// <summary>
 /// Basic constructor
 /// </summary>
 internal TreeIter(TreeIterState <TTreeNode> state, TreeTraversalParameters <TTreeNode> traversalParameters)
 {
     this.State = state;
     this.TraversalParameters = traversalParameters;
 }