public SparseArray(TValue[] values) { _mode = ArrayMode.Flat; this._values = values; _navyData = emptyNavyData; _allocatedCount = (_pseudoLength = (uint)values.Length); }
public void RebuildToSparse() { _allocatedCount = 0; _mode = ArrayMode.Sparse; var len = _pseudoLength; if (len == 0) { ensureCapacity(0); return; } _navyData = new _NavyItem[_values.Length]; var data = _values; _values = new TValue[_values.Length]; len = (uint)Math.Min(data.Length, len); for (var i = 0; i < len; i++) { this[i] = data[i]; } if (_values.Length < len) { this[(int)len - 1] = default(TValue); } }
public SparseArray(int capacity) { _mode = ArrayMode.Flat; _values = emptyData; _navyData = emptyNavyData; if (capacity > 0) { ensureCapacity(capacity); } }
private void rebuildToSparse() { _allocatedCount = 0; _mode = ArrayMode.Sparse; var len = _pseudoLength; if (len == 0) { ensureCapacity(0); return; } _navyData = new _NavyItem[_values.Length]; for (var i = 0; i < _values.Length; i++) { this[i] = _values[i]; } if (_values.Length < len) { this[(int)len - 1] = default(TValue); } }
/// <summary> /// Specifies how to deal with arrays. /// </summary> /// <param name="arrayMode">The array mode to use.</param> /// <returns>The current builder instance.</returns> public Builder Arrays(ArrayMode arrayMode) { ArrayMode = arrayMode; return(this); }
public SparseArray() { _mode = ArrayMode.Flat; _values = emptyData; _navyData = emptyNavyData; }
public SparseArray() { mode = ArrayMode.Flat; values = emptyData; navyData = emptyNavyData; }
public SparseArray(ArrayMode arrayMode = ArrayMode.Flat) { Mode = arrayMode; _values = emptyData; _navyData = emptyNavyData; }
private void SegmentTreeUpdate <TQueryObject>(SegmentTreeMode segmentTreeMode, ArrayMode arrayMode, bool randomPoints = false) where TQueryObject : SegmentTreeQueryObject <TQueryObject, int>, new() { int updater(int x) => x + 1; var array = arrayMode == ArrayMode.AllRanges ? _allRangesArray : _randomRangesArray; var segmentTree = segmentTreeMode == SegmentTreeMode.NodeBased ? new NodeBasedSegmentTree <TQueryObject, int>(array) : segmentTreeMode == SegmentTreeMode.ArrayBased ? new ArrayBasedSegmentTree <TQueryObject, int>(array) : (SegmentTree <TQueryObject, int>) new NonRecursiveSegmentTree <TQueryObject, int>(array); if (arrayMode == ArrayMode.AllRanges) { for (int i = 0; i < array.Count; ++i) { for (int j = i; j < array.Count; ++j) { segmentTree.Update(i, j, updater); } } } else { if (randomPoints) { for (int i = 0; i < _randomRangesCount; ++i) { Tuple <int, int> range = _randomRanges[i]; segmentTree.Update(range.Item1, updater); } } else { for (int i = 0; i < _randomRangesCount; ++i) { Tuple <int, int> range = _randomRanges[i]; segmentTree.Update(range.Item1, range.Item2, updater); } } } }
private void SegmentTreeQuery <TQueryObject>(SegmentTreeMode segmentTreeMode, ArrayMode arrayMode) where TQueryObject : SegmentTreeQueryObject <TQueryObject, int>, new() { var array = arrayMode == ArrayMode.AllRanges ? _allRangesArray : arrayMode == ArrayMode.RightEndingRanges ? _rightEndingRangesArray : _randomRangesArray; var segmentTree = segmentTreeMode == SegmentTreeMode.NodeBased ? new NodeBasedSegmentTree <TQueryObject, int>(array) : segmentTreeMode == SegmentTreeMode.ArrayBased ? new ArrayBasedSegmentTree <TQueryObject, int>(array) : (SegmentTree <TQueryObject, int>) new NonRecursiveSegmentTree <TQueryObject, int>(array); if (arrayMode == ArrayMode.AllRanges) { for (int i = 0; i < array.Count; ++i) { for (int j = i; j < array.Count; ++j) { segmentTree.Query(i, j); } } } else if (arrayMode == ArrayMode.RightEndingRanges) { for (int i = 0; i < array.Count; ++i) { segmentTree.Query(i, array.Count - 1); } } else { for (int i = 0; i < _randomRangesCount; ++i) { Tuple <int, int> range = _randomRanges[i]; segmentTree.Query(range.Item1, range.Item2); } } }
private void NaiveQuery(Func <IReadOnlyList <int>, int, int, int> naiveQuerier, ArrayMode arrayMode) { if (arrayMode == ArrayMode.AllRanges) { for (int i = 0; i < _allRangesArraySize; ++i) { for (int j = i; j < _allRangesArraySize; ++j) { naiveQuerier(_allRangesArray, i, j); } } } else if (arrayMode == ArrayMode.RightEndingRanges) { for (int i = 0; i < _rightEndingRangesArraySize; ++i) { naiveQuerier(_rightEndingRangesArray, i, _rightEndingRangesArraySize - 1); } } else { for (int i = 0; i < _randomRangesCount; ++i) { Tuple <int, int> range = _randomRanges[i]; naiveQuerier(_randomRangesArray, range.Item1, range.Item2); } } }