public HashSet <VariableDescriptor> DependsOn(SCC <VariableDescriptor> vSCC) { if (!DependsOnCache.ContainsKey(vSCC)) { HashSet <VariableDescriptor> result = new HashSet <VariableDescriptor>(); if (vSCC.Count() > 0) { result.UnionWith(vSCC); foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC)) { result.UnionWith(DependsOn(wSCC)); } } DependsOnCache[vSCC] = result; } return(DependsOnCache[vSCC]); }
private HashSet <Block> ReachableFrom(SCC <Block> scc) { if (!MayReachCache.ContainsKey(scc)) { HashSet <Block> result = new HashSet <Block>(); if (scc.Count() > 0) { result.UnionWith(scc); foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc)) { result.UnionWith(ReachableFrom(nextSCC)); } } MayReachCache[scc] = result; } return(MayReachCache[scc]); }
private HashSet<Block> ReachableFrom(SCC<Block> scc) { if (!MayReachCache.ContainsKey(scc)) { HashSet<Block> result = new HashSet<Block>(); if (scc.Count() > 0) { result.UnionWith(scc); foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc)) { result.UnionWith(ReachableFrom(nextSCC)); } } MayReachCache[scc] = result; } return MayReachCache[scc]; }
public HashSet<VariableDescriptor> DependsOn(SCC<VariableDescriptor> vSCC) { if (!DependsOnCache.ContainsKey(vSCC)) { HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>(); if (vSCC.Count() > 0) { result.UnionWith(vSCC); foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC)) { result.UnionWith(DependsOn(wSCC)); } } DependsOnCache[vSCC] = result; } return DependsOnCache[vSCC]; }