Example #1
0
 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));
                }
            }
        }