/// <summary> /// Equality /// </summary> /// <param name="other"></param> /// <returns></returns> public bool Equals(CircularStackElement <T> other) { if (ReferenceEquals(this, other)) { return(true); } if (other is null || this is null) { return(false); } return(EqualityComparer <T> .Default.Equals(_value, other._value) && EqualityComparer <T> .Default.Equals(Next._value, other.Next._value) && EqualityComparer <T> .Default.Equals(Previous._value, other.Previous._value)); }
/// <summary> /// Add to the stack /// </summary> /// <param name="value"></param> public void Add(T value) { if (value.IsNull()) { throw new ArgumentNullException($"Can't add a null {typeof(T)} to a Circular stack"); } var newData = new CircularStackElement <T>(value) { Parent = this }; if (_data.Count > 0) { AssignPreviousAndNext(newData, _data[0]); AssignPreviousAndNext(_data[^ 1], newData);
private static CircularStackElement <T> GetCurrent(Action <CircularStackElement <T> > todo, CircularStackElement <T> current) { todo.Invoke(current); return(current.Next); }