Beispiel #1
0
 // Take/Until
 public static IEnumerable <T> TakeUntil <T>(this PeekableEnumerator <T> enumerator, Predicate <T> predicate)
 {
     // false, false, [break], true
     while (enumerator.TakeIfNot(predicate, out var value))
     {
         yield return(value);
     }
 }
Beispiel #2
0
 public static bool TakeIfNot <T>(this PeekableEnumerator <T> enumerator, Predicate <T> predicate, [MaybeNullWhen(false)] out T value)
 {
     if (enumerator.PeekNext(out var next) && !predicate(next))
     {
         return(enumerator.MoveNext(out value));
     }
     value = default;
     return(false);
 }
Beispiel #3
0
        public static IEnumerable <T> TakeSliceByLast <T>(this PeekableEnumerator <T> enumerator, Predicate <T> isLast)
        {
            // first, last, [break]
            while (enumerator.MoveNext(out var curr))
            {
                yield return(curr);

                if (isLast(curr))
                {
                    yield break;
                }
            }
        }