Esempio n. 1
0
        public T this[int index]
        {
            get
            {
                if (index >= _Count)
                {
                    throw new ArgumentOutOfRangeException();
                }

                if (index - _LastReadIndex != 1)
                {
                    _LastReadSegment      = _Segment[index / _UnitSize];
                    _LastSegmentReadIndex = index % _UnitSize;
                }
                else
                {
                    _LastSegmentReadIndex++;
                    if (_LastSegmentReadIndex >= _UnitSize)
                    {
                        _LastReadSegment      = _Segment[index / _UnitSize];
                        _LastSegmentReadIndex = 0;
                    }
                }

                _LastReadIndex = index;

                return(_LastReadSegment.Data[_LastSegmentReadIndex]);
            }
        }
Esempio n. 2
0
        public BlockedAppendList()
        {
            BlockedUnitAlloc <T> .Init();

            _Count             = 0;
            _LastSegmentLength = 0;
            _UnitSize          = BlockedUnitAlloc <T> .UnitSize;
        }
Esempio n. 3
0
        public void Dispose()
        {
            foreach (BlockedUnitAlloc <T> .BlockedUnit unit in _Segment)
            {
                if (unit == null)
                {
                    break;
                }

                BlockedUnitAlloc <T> .RetUnit(unit);
            }

            _Segment.Clear();
            _Segment = null;
        }
Esempio n. 4
0
        public void Add(T value)
        {
            if (_LastSegmentLength == 0)
            {
                _LastSegment = BlockedUnitAlloc <T> .GetUnit();

                _Segment.Add(_LastSegment);
            }

            _LastSegment.Data[_LastSegmentLength] = value;

            _Count++;
            if (++_LastSegmentLength == _UnitSize)
            {
                _LastSegmentLength = 0;
            }
        }