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; } }
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; } }