public IEnumerator <T> GetEnumerator() { for (IImmutableStack <T> stack = this; !stack.IsEmpty; stack = stack.Pop()) { yield return(stack.Peek()); } }
static IImmutableStack <T> GetNextElementInHierarchyCore <T>(IImmutableStack <T> rootStack, Func <T, IList <T> > getChildren, Func <IList <T>, T, int> indedOf, bool skipChildren) where T : class { var currentElement = rootStack.Peek(); var children = getChildren(currentElement); if (!skipChildren && children.Any()) { return(rootStack.Push(children.First())); } var parents = rootStack.Pop(); var parent = parents.FirstOrDefault(); if (parent == null) { return(rootStack); } var neighbors = getChildren(parent); var index = indedOf(neighbors, currentElement); if (index < neighbors.Count - 1) { return(parents.Push(neighbors[index + 1])); } return(GetNextElementInHierarchyCore(parents, getChildren, indedOf, skipChildren: true)); }
public static IImmutableStack <T> Pop <T>(this IImmutableStack <T> stack, out T value) { Requires.NotNull(stack, nameof(stack)); value = stack.Peek(); return(stack.Pop()); }
public void DeserializeStackInterface() { string json = @"[ ""One"", ""II"", ""3"" ]"; IImmutableStack <string> data = JsonSerializer.Deserialize <IImmutableStack <string> >(json); Assert.False(data.IsEmpty); Assert.Equal("3", data.Peek()); data = data.Pop(); Assert.Equal("II", data.Peek()); data = data.Pop(); Assert.Equal("One", data.Peek()); }
public static IImmutableStack <T> Pop <T>(this IImmutableStack <T> stack, out T value) { Requires.NotNull(stack, "stack"); Contract.Ensures(Contract.Result <IImmutableStack <T> >() != null); value = stack.Peek(); return(stack.Pop()); }
public static IImmutableStack <T> Pop <T>(this IImmutableStack <T> stack, out T value) { //Assert.IsNotNull(stack, nameof(stack)); Contract.Ensures(Contract.Result <IImmutableStack <T> >() != null); value = stack.Peek(); return(stack.Pop()); }
private static ImmutableStack <T> Reverse(IImmutableStack <T> stack) { ImmutableStack <T> immutableStack1 = ImmutableStack <T> .Empty; for (IImmutableStack <T> immutableStack2 = stack; !immutableStack2.IsEmpty; immutableStack2 = immutableStack2.Pop()) { immutableStack1 = immutableStack1.Push(immutableStack2.Peek()); } return(immutableStack1); }
public static Option <T> peek <T>(IImmutableStack <T> stack) { try { return(Some(stack.Peek())); } catch (InvalidOperationException) { return(None); } }
public IEnumerator <T> GetEnumerator() { IImmutableStack <T> stack = this; do { yield return(stack.Peek()); stack = stack.Pop(); }while (stack != Empty); }
public static IImmutableStack <T> Pop <T>( this IImmutableStack <T> stack, out T value) { if (stack == null) { throw new ArgumentNullException(nameof(stack)); } value = stack.Peek(); return(stack.Pop()); }
public static IImmutableStack <T> Reverse <T>(this IImmutableStack <T> stack) { var reverse = Empty <T>(); while (!stack.IsEmpty) { reverse = reverse.Push(stack.Peek()); stack = stack.Pop(); } return(reverse); }
static IImmutableStack <T> GetPrevElementInHierarchyCore <T>(IImmutableStack <T> rootStack, Func <T, IList <T> > getChildren, Func <IList <T>, T, int> indedOf) where T : class { var currentElement = rootStack.Peek(); Func <T, IEnumerable <T> > getChildrenPath = element => LinqExtensions.Unfold(element, x => getChildren(x).LastOrDefault(), x => x == null); var parents = rootStack.Pop(); var parent = parents.FirstOrDefault(); if (parent == null) { return(ImmutableStack.Empty <T>().PushMultiple(getChildrenPath(currentElement))); } var neighbors = getChildren(parent); var index = indedOf(neighbors, currentElement); if (index > 0) { return(parents.PushMultiple(getChildrenPath(neighbors[index - 1]))); } return(parents); }
public static T peekUnsafe <T>(IImmutableStack <T> stack) => stack.Peek();
public T Peek() { return(forwards.Peek()); }
public static void Deconstruct <T>(this IImmutableStack <T> src, out T head, out IImmutableStack <T> tail) { head = src.Peek(); tail = src.Pop(); }
public Covers Covers() { return(_moves.Peek()); }