Пример #1
0
            public override Node DeepClone()
            {
                BracketNode clone = new BracketNode(CompetitorA.DeepClone(), CompetitorB.DeepClone());

                if (BestCompetitor == CompetitorA)
                {
                    clone.BestCompetitor = clone.CompetitorA;
                }
                else if (BestCompetitor == CompetitorB)
                {
                    clone.BestCompetitor = clone.CompetitorB;
                }
                return(clone);
            }
Пример #2
0
 public async override Task <LeafNode> BestNodeAsync(Tournament <T> tournament, IAsyncComparator <T> comparator, CancellationToken cancellationToken)
 {
     if (BestCompetitor == null)
     {
         Debug.Assert(tournament.NextWinnerStepsMax > 0);
         Debug.Assert(tournament.NextWinnerStepsMax - tournament.NextWinnerStepsDone > 0);
         cancellationToken.ThrowIfCancellationRequested();
         T itemA = (await CompetitorA.BestNodeAsync(tournament, comparator, cancellationToken)).Item;
         cancellationToken.ThrowIfCancellationRequested();
         T itemB = (await CompetitorB.BestNodeAsync(tournament, comparator, cancellationToken)).Item;
         cancellationToken.ThrowIfCancellationRequested();
         BestCompetitor = (await comparator.CompareAsync(itemA, itemB, cancellationToken)) > 0 ? CompetitorA : CompetitorB;
         tournament.NextWinnerStepsDone++;
         Debug.Assert(tournament.NextWinnerStepsDone <= tournament.NextWinnerStepsMax);
         tournament.GlobalStepsDone++;
         Debug.Assert(tournament.GlobalStepsDone <= tournament.GlobalStepsMax);
     }
     return(await BestCompetitor.BestNodeAsync(tournament, comparator, cancellationToken));
 }
Пример #3
0
 public override int CountUnanswered()
 {
     return((BestCompetitor == null ? 1 : 0) + CompetitorA.CountUnanswered() + CompetitorB.CountUnanswered());
 }
Пример #4
0
 public override void ForEachLeafNode(Action <LeafNode> action)
 {
     CompetitorA.ForEachLeafNode(action);
     CompetitorB.ForEachLeafNode(action);
 }