public void Dispose() { for (var i = 0; i < TimeoutsPerSegment; i++) { if (_wheel[i] != null) { _pool.Push(_wheel[i]); } } _pool.Push(_segment); }
public override void SetLength(long value) { if (value < 0) { throw new ArgumentException("Length must be greater than 0", "value"); } if (value == 0) { if (Head != null) { _pool.Push(Head); } Head = null; _tail = null; _length = 0; _position = 0; _capacity = 0; return; } var currentNumberOfSegments = Calculator.GetSegmentIndex(_length); var nextNumberOfSegments = Calculator.GetSegmentIndex(value); if (currentNumberOfSegments < nextNumberOfSegments) { // enlarging the stream is fast with _tail remembered var segmentsToAdd = nextNumberOfSegments - currentNumberOfSegments; AddSegments(segmentsToAdd); } else if (currentNumberOfSegments > nextNumberOfSegments) { throw new NotImplementedException("Not implemented yet"); } _length = (int)value; if (_position > value) { _position = (int)value; } }