public T TakeFromLeft() { if (TryTakeEdgeCase(out var returnValue)) { return(returnValue); } var retVal = leftElement.Value; leftElement = leftElement.RightNeighbor; return(retVal); }
public T TakeFromRight() { if (TryTakeEdgeCase(out var returnValue)) { return(returnValue); } var retVal = rightElement.Value; rightElement = rightElement.LeftNeighbor; return(retVal); }
public void AddFromRight(T value) { var newElement = new PipeElement <T>(value); if (IsPipeEmpty()) { leftElement = newElement; rightElement = newElement; } rightElement.RightNeighbor = newElement; newElement.LeftNeighbor = rightElement; rightElement = newElement; }
private bool TryTakeEdgeCase(out T returnValue) { if (IsPipeEmpty()) { throw new InvalidOperationException("Cannot take anymore. Pipe is empty"); } if (leftElement == rightElement) { returnValue = leftElement.Value; leftElement = null; rightElement = null; return(true); } returnValue = default(T); return(false); }