HandCoded.Meta.Conversion.DepthFirstSearch C# (CSharp) Méthode

DepthFirstSearch() private static méthode

Recursively explores the Release definitions to determine the shortest conversion path between two releases.
private static DepthFirstSearch ( Release source, Release target, Stack stack ) : Conversion
source Release The source for the search.
target Release The target for the search.
stack System.Collections.Stack A used to detect cycles.
Résultat Conversion
        private static Conversion DepthFirstSearch(Release source, Release target, Stack stack)
        {
            Conversion	best = null;

            if (!stack.Contains (source)) {
                stack.Push (source);

                foreach (Conversion first in source.SourceConversions) {
                    Release		release = first.TargetRelease;
                    Conversion	result	= null;

                    if (release == target)
                        result = first;
                    else {
                        Conversion second = DepthFirstSearch (release, target, stack);
                            if (second != null)
                        result = new IndirectConversion (first, second);
                    }

                    if (result != null) {
                        if ((best == null)||(result.Complexity < best.Complexity))
                            best = result;
                    }
                }
                stack.Pop ();
            }
            return (best);
        }