public bool IsFrozen(IDependencyState <T> state) { var targets = TargetsTaken.Where(x => x.Value.Contains(state)) .Select(x => x.Key) .Concat(state.NextTargets) .ToList(); var dependingStates = targets.SelectMany(x => DependanciesTaken.Where(d => d.Key.Equals(x)).SelectMany(d => d.Value).Concat(UnboundedDependancyTaken)); return(dependingStates.Any(x => !x.Equals(state) && !IsCompleted(x))); }
public void Update(IDependencyState <T> state) { // Manage dependencies and targets taken foreach (var dependancy in state.NextDependencies) { if (!DependanciesTaken.ContainsKey(dependancy)) { DependanciesTaken[dependancy] = new HashSet <IDependencyState <T> >(); } DependanciesTaken[dependancy].Add(state); } if (state.NextUnboundDependency) { UnboundedDependancyTaken.Add(state); } foreach (var target in state.NextTargets) { if (!TargetsTaken.ContainsKey(target)) { TargetsTaken[target] = new HashSet <IDependencyState <T> >(); } TargetsTaken[target].Add(state); } }