예제 #1
0
파일: TimerWheel.cs 프로젝트: zhangz/RampUp
        public void Dispose()
        {
            for (var i = 0; i < TimeoutsPerSegment; i++)
            {
                if (_wheel[i] != null)
                {
                    _pool.Push(_wheel[i]);
                }
            }

            _pool.Push(_segment);
        }
예제 #2
0
        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;
            }
        }