public int IndexOf(ILockedLinkedListNode <T> node) { for (int i = 0; i < this.Count; i++) { if (this.series[i] == node) { return(i); } } return(-1); }
private static IEnumerable <IEnumerable <Tuple <IProductionRuleCaptureStructuralItem, bool> > > VariateSeries(ILockedLinkedListNode <IProductionRuleCaptureStructuralItem> startingPoint, Dictionary <IProductionRuleGroupItem, List <IProductionRuleCaptureStructuralItem> > optionalTogglers, int depth = 0) { var next = startingPoint.Next; if (next == null) { if (startingPoint.Element.Optional) { yield return(YieldValue(startingPoint.Element, false)); } yield return(YieldValue(startingPoint.Element, true)); } else { foreach (var set in VariateSeries(next, optionalTogglers, depth + 1)) { if (startingPoint.Element.Optional) { yield return(YieldValue(startingPoint.Element, false).Concat(set)); if (depth == 0) { foreach (var toggler in optionalTogglers.Keys) { var alternateSet = Replace(set, structuralItem => optionalTogglers[toggler].Contains(structuralItem.Item1), structuralItem => Tuple.Create(structuralItem.Item1, false)); if (!alternateSet.SequenceEqual(set)) { yield return(YieldValue(startingPoint.Element, false).Concat(alternateSet)); } } } } if (depth == 0) { foreach (var toggler in optionalTogglers.Keys) { var alternateSet = Replace(set, structuralItem => optionalTogglers[toggler].Contains(structuralItem.Item1), structuralItem => Tuple.Create(structuralItem.Item1, false)); if (!alternateSet.SequenceEqual(set)) { yield return(YieldValue(startingPoint.Element, true).Concat(alternateSet)); } } } yield return(YieldValue(startingPoint.Element, true).Concat(set)); } } }