Beispiel #1
0
        public T this[int index]
        {
            get
            {
                int arrayIndex = NumberUtils.WrapMod(index, _array.Length);

                if (_indexes[arrayIndex] == index)
                {
                    return(_array[arrayIndex]);
                }
                else
                {
                    return(default(T));
                }
            }
            set
            {
                if (_resetOld)
                {
                    long distance = SequencingUtils.Distance((ulong)index, _lastHighestSequence, _wrapSize);

                    if (distance > 0)
                    {
                        for (int i = 1; i < distance; i++)
                        {
                            int resetArrayIndex = NumberUtils.WrapMod(((int)_lastHighestSequence + index + i), _array.Length);
                            _indexes[resetArrayIndex] = ((int)_lastHighestSequence + index + i);
                            _array[resetArrayIndex]   = default(T);
                        }

                        _lastHighestSequence = (ulong)index;
                    }
                }

                int arrayIndex = NumberUtils.WrapMod(index, _array.Length);
                _indexes[arrayIndex] = index;
                _array[arrayIndex]   = value;
            }
        }
Beispiel #2
0
        public bool this[T key]
        {
            get
            {
                if (_indexLookup.ContainsKey(key))
                {
                    int index = _indexLookup[key];

                    int arrayIndex = NumberUtils.WrapMod(index, _indexes.Length);

                    if (_indexes[arrayIndex] == index)
                    {
                        return(true);
                    }
                }

                return(false);
            }
            set
            {
                ushort index;

                if (_indexLookup.ContainsKey(key))
                {
                    index = _indexLookup[key];
                }
                else
                {
                    index = _indexCounter;
                    _indexCounter++;
                }

                if (_resetOld)
                {
                    long distance = SequencingUtils.Distance(index, _lastHighestSequence, _wrapSize);

                    if (distance > 0)
                    {
                        for (ushort i = 1; i < distance; i++)
                        {
                            int resetArrayIndex = NumberUtils.WrapMod((_lastHighestSequence + index + i), _indexes.Length);
                            _indexes[resetArrayIndex] = (ushort)(_lastHighestSequence + index + i);

                            if (_indexLookup.ContainsKey(_array[resetArrayIndex]))
                            {
                                _indexLookup.Remove(_array[resetArrayIndex]);
                            }

                            _array[resetArrayIndex] = default(T);
                        }

                        _lastHighestSequence = index;
                    }
                }

                int arrayIndex = NumberUtils.WrapMod(index, _indexes.Length);

                if (_indexLookup.ContainsKey(_array[arrayIndex]))
                {
                    _indexLookup.Remove(_array[arrayIndex]);
                }

                if (value)
                {
                    _indexLookup.Add(key, index);
                }

                _indexes[arrayIndex] = index;
                _array[arrayIndex]   = key;
            }
        }