예제 #1
0
        private void RecursivelySplayOutgoingTransistions(PipeOutputPackage package)
        {
            List <Type> nextOutgoingNodes;

            if (!_outgoingEdges.TryGetValue(package.OutputType, out nextOutgoingNodes))
            {
                return;
            }

            IEnumerable <PipeOutputPackage> bridgingPackages =
                from descendantOutgoingNode in nextOutgoingNodes
                where descendantOutgoingNode != package.OutputType
                let transitionKey = new Tuple <Type, Type>(package.OutputType, descendantOutgoingNode)
                                    let outgoingPackage = _shortestTransistions[transitionKey]
                                                          select PipeOutputPackage.Bridge(package, outgoingPackage);

            RecursivelyUpdateShortestPath(bridgingPackages);
        }
예제 #2
0
        private void RecursivelyBackFillIncomingTransitions(PipeOutputPackage package)
        {
            List <Type> nextIncomingNodes;

            if (!_incomingEdges.TryGetValue(package.InputType, out nextIncomingNodes))
            {
                return;
            }

            IEnumerable <PipeOutputPackage> bridgingPackages =
                from ancestorIncomingType in nextIncomingNodes
                where ancestorIncomingType != package.InputType
                let transitionKey = new Tuple <Type, Type>(ancestorIncomingType, package.InputType)
                                    let incomingPackage = _shortestTransistions[transitionKey]
                                                          select PipeOutputPackage.Bridge(incomingPackage, package);

            RecursivelyUpdateShortestPath(bridgingPackages);
        }