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); }
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); }