@x-oasis/integer-buffer-set 0.1.20 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -12
- package/dist/integer-buffer-set.cjs.development.js +3 -120
- package/dist/integer-buffer-set.cjs.development.js.map +1 -1
- package/dist/integer-buffer-set.cjs.production.min.js +1 -1
- package/dist/integer-buffer-set.cjs.production.min.js.map +1 -1
- package/dist/integer-buffer-set.esm.js +3 -120
- package/dist/integer-buffer-set.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +0 -201
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integer-buffer-set.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import Heap from '@x-oasis/heap';\nimport isClamped from '@x-oasis/is-clamped';\nimport invariant from '@x-oasis/invariant';\nimport returnHook, { ReturnHook } from '@x-oasis/return-hook';\nimport {\n HeapItem,\n SafeRange,\n MetaExtractor,\n IndexExtractor,\n IntegerBufferSetProps,\n MetaToIndexMap,\n MetaToPositionMap,\n IndexToMetaMap,\n} from './types';\n\nconst defaultMetaExtractor = (value) => value;\nexport const defaultBufferSize = 10;\n\n// !!!!! should do meta validation...meta should has an index...\n// value: original data `index` value\n// value(index) => meta => position\n// `index to getIndices, meta to find index`\n\n// Data structure that allows to store values and assign positions to them\n// in a way to minimize changing positions of stored values when new ones are\n// added or when some values are replaced. Stored elements are alwasy assigned\n// a consecutive set of positoins startin from 0 up to count of elements less 1\n// Following actions can be executed\n// * get position assigned to given value (null if value is not stored)\n// * create new entry for new value and get assigned position back\n// * replace value that is furthest from specified value range with new value\n// and get it's position back\n// All operations take amortized log(n) time where n is number of elements in\n// the set.\n// feature: add / delete / update item will also in consider..\nclass IntegerBufferSet<Meta = any> {\n private _size: number;\n private _name: string;\n private _bufferSize: number;\n // private _positionToValueObject: ValueToPositionObject;\n\n private _indexToMetaMap: IndexToMetaMap<Meta>;\n private _metaToPositionMap: MetaToPositionMap<Meta>;\n private _positionToMetaList: Array<Meta>;\n private _metaToIndexMap: MetaToIndexMap<Meta>;\n\n private _smallValues: Heap<HeapItem>;\n private _largeValues: Heap<HeapItem>;\n private _metaExtractor: MetaExtractor<Meta>;\n private _indexExtractor: IndexExtractor<Meta>;\n\n private _onTheFlyIndices: Array<Meta>;\n\n private _isOnTheFlyFull: boolean;\n private _isOnTheFlyFullReturnHook: ReturnHook;\n\n private _loopMS: number;\n private _lastUpdatedMS: number;\n\n constructor(props: IntegerBufferSetProps<Meta> = {}) {\n const {\n name = 'default_buffer',\n indexExtractor,\n bufferSize = defaultBufferSize,\n metaExtractor = defaultMetaExtractor,\n } = props;\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n\n this._name = name;\n // this._positionToValueObject = {};\n\n /**\n * this._indexToMetaMap is used to find the prev meta when finding a position for index.\n */\n this._indexToMetaMap = new Map();\n this._metaToPositionMap = new Map();\n this._positionToMetaList = [];\n this._metaToIndexMap = new Map();\n this._onTheFlyIndices = [];\n\n this._size = 0;\n this._bufferSize = bufferSize;\n\n this._smallValues = new Heap([], this._smallerComparator);\n this._largeValues = new Heap([], this._greaterComparator);\n\n this.getNewPositionForIndex = this.getNewPositionForIndex.bind(this);\n this.getIndexPosition = this.getIndexPosition.bind(this);\n this.getSize = this.getSize.bind(this);\n this.replacePositionInFliedIndices =\n this.replacePositionInFliedIndices.bind(this);\n this.replaceFurthestIndexPosition =\n this.replaceFurthestIndexPosition.bind(this);\n this._isOnTheFlyFullReturnHook = returnHook(\n this.setIsOnTheFlyFull.bind(this)\n );\n\n this._loopMS = Date.now();\n this._lastUpdatedMS = this._loopMS;\n }\n\n getSize() {\n return this._size;\n }\n\n get bufferSize() {\n return this._bufferSize;\n }\n\n setIsOnTheFlyFull(val: any) {\n if (val != null) {\n const data = this._onTheFlyIndices.filter((v) => v);\n this._isOnTheFlyFull = data.length === this._bufferSize;\n }\n }\n\n get isBufferFull() {\n return this._positionToMetaList.length >= this._bufferSize;\n }\n\n getOnTheFlyUncriticalPosition(safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n for (let idx = 0; idx < this._onTheFlyIndices.length; idx++) {\n const meta = this._onTheFlyIndices[idx];\n const metaIndex = this._metaToIndexMap.get(meta);\n if (!isClamped(startIndex, metaIndex, endIndex)) {\n return idx;\n }\n }\n return null;\n }\n\n initialize() {\n return {\n smallValues: new Heap([], this._smallerComparator),\n largeValues: new Heap([], this._greaterComparator),\n valueToPositionObject: {},\n };\n }\n\n getIndexMeta(index: number) {\n return this._metaExtractor(index);\n }\n\n getMetaIndex(meta: Meta) {\n if (this._indexExtractor) return this._indexExtractor(meta);\n return this._metaToIndexMap.get(meta);\n }\n\n setMetaIndex(meta: Meta, index: number) {\n if (!this._indexExtractor) {\n return this._metaToIndexMap.set(meta, index);\n }\n return false;\n }\n\n deleteMetaIndex(meta: Meta) {\n return this._metaToIndexMap.delete(meta);\n }\n\n replaceMetaToIndexMap(newMetaToIndexMap: MetaToIndexMap<Meta>) {\n if (!this._indexExtractor) {\n return (this._metaToIndexMap = newMetaToIndexMap);\n }\n return false;\n }\n\n getIndexPosition(index: number): undefined | number {\n return this.getMetaIndex(this.getIndexMeta(index));\n }\n\n getNewPositionForIndex(index: number) {\n const meta = this.getIndexMeta(index);\n invariant(\n this._metaToPositionMap.get(meta) === undefined,\n \"Shouldn't try to find new position for value already stored in BufferSet\"\n );\n const newPosition = this._positionToMetaList.length;\n\n this._pushToHeaps(newPosition, index);\n this._setMetaIndex(meta, index);\n this._setMetaPosition(meta, newPosition);\n\n return newPosition;\n }\n\n getMinValue() {\n return this._smallValues.peek()?.value;\n }\n\n getMaxValue() {\n return this._largeValues.peek()?.value;\n }\n\n /**\n * values actually is the position of original data.\n */\n setValuePosition(value: number, position: number) {}\n\n findPositionMeta(position: number) {\n for (const [meta, pos] of this._metaToPositionMap) {\n if (pos === position) return meta;\n }\n return null;\n }\n\n rebuildHeapsWithMeta(metaToPositionMap: MetaToPositionMap<Meta>) {\n const { smallValues, largeValues } = this.initialize();\n\n for (const [meta, position] of metaToPositionMap) {\n const index = this.getMetaIndex(meta);\n const token = { index, position };\n smallValues.push(token);\n largeValues.push(token);\n }\n\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n }\n\n /**\n *\n * @param position\n * @param value\n *\n *\n */\n setPositionIndex(position: number, index: number) {\n const meta = this._metaExtractor(index);\n const originalPosition = this._metaToPositionMap.get(meta);\n\n // current index has a position\n if (originalPosition !== undefined) {\n if (originalPosition === position) return true;\n this.deleteMetaIndex(meta);\n }\n\n const metaToReplace = this.findPositionMeta(position);\n if (metaToReplace) this._metaToPositionMap.delete(metaToReplace);\n this._metaToPositionMap.set(meta, position);\n\n this.rebuildHeapsWithMeta(this._metaToPositionMap);\n return true;\n }\n\n getMetaPosition(meta: Meta) {\n return this._metaToPositionMap.get(meta);\n }\n\n // performRangeUpdate(\n // startIndex: number,\n // endIndex: number,\n // safeRange: {\n // startIndex: number;\n // endIndex: number;\n // }\n // ) {\n // const _start = Math.max(startIndex, safeRange.startIndex);\n // const _end = Math.min(endIndex, safeRange.endIndex);\n // const primaryMetaList = [];\n // const secondaryMetaList = [];\n // const locationStartIndex = startIndex;\n // const targetIndices = new Array(this._bufferSize);\n\n // const _valueToPositionObject = {};\n // const _positionToValueObject = {};\n\n // const _valueToMetaObject = {};\n // const _metaToIndexMap = new Map();\n\n // for (let value = startIndex; value <= endIndex; value++) {\n // const meta = this._metaExtractor(value);\n // if (meta) {\n // const _i = value - locationStartIndex;\n // if (isClamped(value, safeRange.startIndex, safeRange.endIndex)) {\n // primaryMetaList[_i] = meta;\n // const targetIndex = this.getMetaPosition(meta);\n // if (isNumber(targetIndex)) {\n // targetIndices[targetIndex] = value;\n // _valueToPositionObject[value] = targetIndex;\n // _valueToMetaObject[value] = meta;\n // _metaToIndexMap.set(meta, value);\n // _positionToValueObject[targetIndex] = value;\n // }\n // } else {\n // secondaryMetaList[_i] = meta;\n // }\n // }\n // }\n\n // for (let idx = _start; idx <= _end; idx++) {\n // const meta = this._metaExtractor(idx);\n // if (_metaToIndexMap.get(meta) !== undefined) continue;\n // let p;\n // while (\n // (p =\n // targetIndices[\n // this.resolvePosition(safeRange.startIndex, safeRange.endIndex, idx)\n // ]) === undefined\n // ) {\n // targetIndices[p] = idx;\n // }\n // }\n // }\n\n replacePositionInFliedIndices(newIndex: number, safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n\n if (this._isOnTheFlyFull) {\n // newIndex is not critical index, do nothing\n if (!isClamped(startIndex, newIndex, endIndex)) {\n return null;\n }\n // if `newIndex` is critical index, replace an un-committed\n // index value from _onTheFlyIndices.\n const pos = this.getOnTheFlyUncriticalPosition(safeRange);\n if (pos != null) return pos;\n }\n return null;\n }\n\n getFliedPosition(newIndex: number, safeRange: SafeRange) {\n const pos = this.replacePositionInFliedIndices(newIndex, safeRange);\n if (pos != null) {\n const meta = this.getIndexMeta(newIndex);\n this._onTheFlyIndices[pos] = meta;\n this._setMetaIndex(meta, newIndex);\n return this._isOnTheFlyFullReturnHook(pos);\n }\n return null;\n }\n\n /**\n *\n * @param newIndex\n * @param safeRange\n * @returns\n *\n *\n * _positionToMetaList maybe undefined on next loop\n */\n getPosition(newIndex: number, safeRange?: SafeRange) {\n this.prepare();\n const meta = this.getIndexMeta(newIndex);\n const prevMetaPosition = this._metaToPositionMap.get(meta);\n\n if (prevMetaPosition !== undefined) {\n const onTheFlyPositionMeta = this._onTheFlyIndices[prevMetaPosition];\n // the occupied meta should change position\n if (onTheFlyPositionMeta) {\n // such as place item 11 twice...\n if (onTheFlyPositionMeta === meta) {\n return prevMetaPosition;\n }\n let positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n if (this._isOnTheFlyFull)\n return this.getFliedPosition(newIndex, safeRange);\n\n while (this._onTheFlyIndices[positionToReplace]) {\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n }\n\n if (positionToReplace != null) {\n this._setMetaIndex(meta, newIndex);\n this._onTheFlyIndices[positionToReplace] = onTheFlyPositionMeta;\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n }\n this._onTheFlyIndices[prevMetaPosition] = meta;\n return this._isOnTheFlyFullReturnHook(prevMetaPosition);\n }\n\n // placed on new buffered position\n if (!this.isBufferFull)\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n\n // console.log('this. fly ', this._isOnTheFlyFull)\n if (this._isOnTheFlyFull) return this.getFliedPosition(newIndex, safeRange);\n\n let positionToReplace;\n const prevIndexMeta = this._indexToMetaMap.get(newIndex);\n // console.log('this. is ', this.isBufferFull, prevIndexMeta);\n\n // Index has already been stored, but we cant use its old position directly...\n // 1:index -> meta, meta may be reused later\n\n // 2: temp use index -> meta -> position, this issue should exist for follows...\n if (!prevIndexMeta) {\n this._cleanHeaps();\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n } else {\n positionToReplace = this._metaToPositionMap.get(prevIndexMeta);\n }\n\n this._onTheFlyIndices[positionToReplace] = meta;\n this._setMetaIndex(meta, newIndex);\n this._setMetaPosition(meta, positionToReplace);\n // should not push to heap, pop only\n // this._pushToHeaps(positionToReplace, newIndex)\n\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n\n replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (!this.isBufferFull) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n return this._replaceFurthestIndexPosition(newIndex, safeRange);\n }\n\n _replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (this._largeValues.empty() || this._smallValues.empty()) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n const minValue = this._smallValues.peek()!.value;\n const maxValue = this._largeValues.peek()!.value;\n\n // console.log('mxa ', maxValue, minValue);\n let indexToReplace;\n\n if (!safeRange) {\n // far from min\n if (Math.abs(newIndex - minValue) > Math.abs(newIndex - maxValue)) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n const { startIndex: lowValue, endIndex: highValue } = safeRange;\n\n // All values currently stored are necessary, we can't reuse any of them.\n if (\n isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n return null;\n } else if (\n isClamped(lowValue, minValue, highValue) &&\n !isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = maxValue;\n this._largeValues.pop();\n } else if (\n !isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else if (lowValue - minValue > maxValue - highValue) {\n // minValue is further from provided range. We will reuse it's position.\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n shuffle() {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta = this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n indices[idx] = targetIndex;\n }\n\n // console.log(\n // 'position xxx ',\n // this._positionToMetaList,\n // this._onTheFlyIndices\n // );\n\n const _arr = new Array(indices.length);\n const _available = [];\n const indexToMetaMap = new Map();\n const metaToIndexMap = new Map();\n const metaToPositionMap = new Map();\n for (let idx = 0; idx < indices.length; idx++) {\n const currentIndex = indices[idx];\n const currentMeta = this._metaExtractor(currentIndex);\n if (currentMeta == null) continue;\n\n indexToMetaMap.set(currentIndex, currentMeta);\n metaToIndexMap.set(currentMeta, currentIndex);\n\n if (currentMeta === this._positionToMetaList[idx]) {\n _arr[idx] = currentMeta;\n continue;\n }\n const _i = this._positionToMetaList.findIndex((v) => v === currentMeta);\n if (_i !== -1) {\n _arr[_i] = currentMeta;\n continue;\n }\n\n _available.push(currentMeta);\n }\n\n const { smallValues, largeValues } = this.initialize();\n const positionToMetaList = [];\n\n for (let position = 0; position < indices.length; position++) {\n const value = indices[position];\n if (_arr[position] != null) {\n positionToMetaList[position] = _arr[position];\n metaToPositionMap.set(_arr[position], position);\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n continue;\n }\n const meta = _available.shift();\n if (meta != null) {\n positionToMetaList[position] = meta;\n metaToPositionMap.set(meta, position);\n\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n }\n }\n\n // console.log('position ', positionToMetaList, largeValues.peek().value);\n\n this._positionToMetaList = positionToMetaList;\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n this._indexToMetaMap = indexToMetaMap;\n this.replaceMetaToIndexMap(metaToIndexMap);\n this._metaToPositionMap = metaToPositionMap;\n this._onTheFlyIndices = [];\n\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n // key point: `meta` should be preserved..\n getIndices() {\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n // which means source data has changed. such as one element has been deleted\n if (meta !== this.getIndexMeta(targetIndex)) {\n return this.shuffle();\n }\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n // clear on the fly indices after return indices.\n this._onTheFlyIndices = [];\n\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n _pushToHeaps(position: number, value: number) {\n const element = { position, value };\n // We can reuse the same object in both heaps, because we don't mutate them\n this._smallValues.push(element);\n this._largeValues.push(element);\n }\n\n _setMetaPosition(meta: Meta, position: number) {\n const prevMetaOnPosition = this._positionToMetaList[position];\n if (prevMetaOnPosition) this._metaToPositionMap.delete(prevMetaOnPosition);\n this._positionToMetaList[position] = meta;\n this._metaToPositionMap.set(meta, position);\n }\n\n /**\n *\n * @param meta\n * @param index\n * @returns true means index not changed\n */\n _setMetaIndex(meta: Meta, index: number) {\n const prevMetaIndex = this.getMetaIndex(meta);\n if (prevMetaIndex !== undefined) {\n // no need to set\n // if (prevMetaIndex === index) return true;\n this._indexToMetaMap.delete(prevMetaIndex);\n }\n this.setMetaIndex(meta, index);\n this._indexToMetaMap.set(index, meta);\n return false;\n }\n\n readyToStartNextLoop() {\n this._lastUpdatedMS = Date.now();\n }\n\n prepare() {\n if (this._loopMS === this._lastUpdatedMS) return;\n this._loopMS = this._lastUpdatedMS;\n\n this._onTheFlyIndices = [];\n this._isOnTheFlyFull = false;\n const len = this._positionToMetaList.length;\n\n for (let index = 0; index < len; index++) {}\n }\n\n _cleanHeaps() {\n // We not usually only remove object from one heap while moving value.\n // Here we make sure that there is no stale data on top of heaps.\n this._cleanHeap(this._smallValues);\n this._cleanHeap(this._largeValues);\n const minHeapSize = Math.min(\n this._smallValues.size(),\n this._largeValues.size()\n );\n const maxHeapSize = Math.max(\n this._smallValues.size(),\n this._largeValues.size()\n );\n if (maxHeapSize > 10 * minHeapSize) {\n // There are many old values in one of heaps. We need to get rid of them\n // to not use too avoid memory leaks\n this._recreateHeaps();\n }\n }\n\n rebuildHeapsWithValues(\n arr: Array<{\n position: number;\n value: number;\n }>\n ) {\n const valueToPositionObject = {};\n const newSmallValues = new Heap<HeapItem>([], this._smallerComparator);\n const newLargeValues = new Heap<HeapItem>([], this._greaterComparator);\n\n arr.forEach((element) => {\n const { position, value } = element;\n if (value !== undefined) {\n const element = {\n position,\n value,\n };\n newSmallValues.push(element);\n newLargeValues.push(element);\n valueToPositionObject[value] = position;\n }\n });\n const _arr = new Array(this._bufferSize).fill(2);\n Object.keys(valueToPositionObject).map(\n (key) => (_arr[valueToPositionObject[key]] = 1)\n );\n _arr.forEach((_i, position) => {\n if (_i === 2) {\n const value = Number.MAX_SAFE_INTEGER - position;\n const element = {\n position,\n value,\n };\n\n newSmallValues.push(element);\n newLargeValues.push(element);\n valueToPositionObject[value] = position;\n }\n });\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n // rebuildHeaps() {\n // const valueToPositionObject = {};\n // const newSmallValues = new Heap<HeapItem>([], this._smallerComparator);\n // const newLargeValues = new Heap<HeapItem>([], this._greaterComparator);\n\n // const keys = Object.keys(this._positionToValueObject);\n // for (let position = 0; position < keys.length; position++) {\n // const value = this._positionToValueObject[position];\n // if (value !== undefined) {\n // const element = {\n // position,\n // value,\n // };\n // valueToPositionObject[value] = position;\n // newSmallValues.push(element);\n // newLargeValues.push(element);\n // }\n // }\n\n // this._smallValues = newSmallValues;\n // this._largeValues = newLargeValues;\n // }\n\n _recreateHeaps() {\n const sourceHeap =\n this._smallValues.size() < this._largeValues.size()\n ? this._smallValues\n : this._largeValues;\n const newSmallValues = new Heap<HeapItem>(\n [], // Initial data in the heap\n this._smallerComparator\n );\n const newLargeValues = new Heap<HeapItem>(\n [], // Initial datat in the heap\n this._greaterComparator\n );\n while (!sourceHeap.empty()) {\n const element = sourceHeap.pop()!;\n // Push all still valid elements to new heaps\n if (\n this._metaToPositionMap.get(this._indexToMetaMap.get(element.value)) !=\n null\n ) {\n newSmallValues.push(element);\n newLargeValues.push(element);\n }\n }\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n _cleanHeap(heap: Heap<HeapItem>) {\n while (\n !heap.empty() &&\n this._metaToPositionMap.get(\n this._indexToMetaMap.get(heap.peek()!.value)\n ) == null\n ) {\n heap.pop();\n }\n }\n\n _smallerComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value < rhs.value;\n }\n\n _greaterComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value > rhs.value;\n }\n}\n\nexport default IntegerBufferSet;\n"],"names":["defaultMetaExtractor","value","IntegerBufferSet","props","_props$name","name","indexExtractor","_props$bufferSize","bufferSize","_props$metaExtractor","metaExtractor","this","_metaExtractor","_indexExtractor","_name","_indexToMetaMap","Map","_metaToPositionMap","_positionToMetaList","_metaToIndexMap","_onTheFlyIndices","_size","_bufferSize","_smallValues","Heap","_smallerComparator","_largeValues","_greaterComparator","getNewPositionForIndex","bind","getIndexPosition","getSize","replacePositionInFliedIndices","replaceFurthestIndexPosition","_isOnTheFlyFullReturnHook","returnHook","setIsOnTheFlyFull","_loopMS","Date","now","_lastUpdatedMS","_proto","prototype","val","data","filter","v","_isOnTheFlyFull","length","getOnTheFlyUncriticalPosition","safeRange","startIndex","endIndex","idx","metaIndex","get","isClamped","initialize","smallValues","largeValues","valueToPositionObject","getIndexMeta","index","getMetaIndex","meta","setMetaIndex","set","deleteMetaIndex","replaceMetaToIndexMap","newMetaToIndexMap","undefined","invariant","newPosition","_pushToHeaps","_setMetaIndex","_setMetaPosition","getMinValue","_this$_smallValues$pe","peek","getMaxValue","_this$_largeValues$pe","setValuePosition","position","findPositionMeta","_step","_iterator","_createForOfIteratorHelperLoose","done","_step$value","rebuildHeapsWithMeta","metaToPositionMap","_step2","_this$initialize","_iterator2","_step2$value","token","push","setPositionIndex","originalPosition","metaToReplace","getMetaPosition","newIndex","pos","getFliedPosition","getPosition","prepare","positionToReplace","prevMetaPosition","onTheFlyPositionMeta","_replaceFurthestIndexPosition","isBufferFull","prevIndexMeta","_cleanHeaps","empty","indexToReplace","minValue","maxValue","Math","abs","pop","replacedMeta","lowValue","highValue","shuffle","indices","Array","targetIndex","_arr","_available","indexToMetaMap","metaToIndexMap","_loop","currentIndex","currentMeta","_this","_i","findIndex","_this$initialize2","positionToMetaList","shift","element","recyclerKey","err","readyToStartNextLoop","getIndices","prevMetaOnPosition","prevMetaIndex","_cleanHeap","minHeapSize","min","size","max","_recreateHeaps","rebuildHeapsWithValues","arr","newSmallValues","newLargeValues","forEach","fill","Object","keys","map","key","Number","MAX_SAFE_INTEGER","sourceHeap","heap","lhs","rhs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integer-buffer-set.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import Heap from '@x-oasis/heap';\nimport isClamped from '@x-oasis/is-clamped';\nimport invariant from '@x-oasis/invariant';\nimport returnHook, { ReturnHook } from '@x-oasis/return-hook';\nimport {\n HeapItem,\n SafeRange,\n MetaExtractor,\n IndexExtractor,\n IntegerBufferSetProps,\n MetaToIndexMap,\n MetaToPositionMap,\n IndexToMetaMap,\n} from './types';\n\nconst defaultMetaExtractor = (value) => value;\nexport const defaultBufferSize = 10;\n\n// !!!!! should do meta validation...meta should has an index...\n// value: original data `index` value\n// value(index) => meta => position\n// `index to getIndices, meta to find index`\n\n// Data structure that allows to store values and assign positions to them\n// in a way to minimize changing positions of stored values when new ones are\n// added or when some values are replaced. Stored elements are alwasy assigned\n// a consecutive set of positoins startin from 0 up to count of elements less 1\n// Following actions can be executed\n// * get position assigned to given value (null if value is not stored)\n// * create new entry for new value and get assigned position back\n// * replace value that is furthest from specified value range with new value\n// and get it's position back\n// All operations take amortized log(n) time where n is number of elements in\n// the set.\n// feature: add / delete / update item will also in consider..\nclass IntegerBufferSet<Meta = any> {\n private _name: string;\n private _bufferSize: number;\n\n private _indexToMetaMap: IndexToMetaMap<Meta>;\n private _metaToPositionMap: MetaToPositionMap<Meta>;\n private _positionToMetaList: Array<Meta>;\n private _metaToIndexMap: MetaToIndexMap<Meta>;\n\n private _smallValues: Heap<HeapItem>;\n private _largeValues: Heap<HeapItem>;\n private _metaExtractor: MetaExtractor<Meta>;\n private _indexExtractor: IndexExtractor<Meta>;\n\n private _onTheFlyIndices: Array<Meta>;\n\n private _isOnTheFlyFull: boolean;\n private _isOnTheFlyFullReturnHook: ReturnHook;\n\n private _loopMS: number;\n private _lastUpdatedMS: number;\n\n constructor(props: IntegerBufferSetProps<Meta> = {}) {\n const {\n name = 'default_buffer',\n indexExtractor,\n bufferSize = defaultBufferSize,\n metaExtractor = defaultMetaExtractor,\n } = props;\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n\n this._name = name;\n\n /**\n * this._indexToMetaMap is used to find the prev meta when finding a position for index.\n */\n this._indexToMetaMap = new Map();\n this._metaToPositionMap = new Map();\n this._positionToMetaList = [];\n this._metaToIndexMap = new Map();\n this._onTheFlyIndices = [];\n\n this._bufferSize = bufferSize;\n\n this._smallValues = new Heap([], this._smallerComparator);\n this._largeValues = new Heap([], this._greaterComparator);\n\n this.getNewPositionForIndex = this.getNewPositionForIndex.bind(this);\n this.getIndexPosition = this.getIndexPosition.bind(this);\n this.replacePositionInFliedIndices =\n this.replacePositionInFliedIndices.bind(this);\n this.replaceFurthestIndexPosition =\n this.replaceFurthestIndexPosition.bind(this);\n this._isOnTheFlyFullReturnHook = returnHook(\n this.setIsOnTheFlyFull.bind(this)\n );\n\n this._loopMS = Date.now();\n this._lastUpdatedMS = this._loopMS;\n }\n\n get bufferSize() {\n return this._bufferSize;\n }\n\n setIsOnTheFlyFull(val: any) {\n if (val != null) {\n const data = this._onTheFlyIndices.filter((v) => v);\n this._isOnTheFlyFull = data.length === this._bufferSize;\n }\n }\n\n get isBufferFull() {\n return this._positionToMetaList.length >= this._bufferSize;\n }\n\n getOnTheFlyUncriticalPosition(safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n for (let idx = 0; idx < this._onTheFlyIndices.length; idx++) {\n const meta = this._onTheFlyIndices[idx];\n const metaIndex = this._metaToIndexMap.get(meta);\n if (!isClamped(startIndex, metaIndex, endIndex)) {\n return idx;\n }\n }\n return null;\n }\n\n initialize() {\n return {\n smallValues: new Heap([], this._smallerComparator),\n largeValues: new Heap([], this._greaterComparator),\n valueToPositionObject: {},\n };\n }\n\n getIndexMeta(index: number) {\n return this._metaExtractor(index);\n }\n\n getMetaIndex(meta: Meta) {\n if (this._indexExtractor) return this._indexExtractor(meta);\n return this._metaToIndexMap.get(meta);\n }\n\n setMetaIndex(meta: Meta, index: number) {\n if (!this._indexExtractor) {\n return this._metaToIndexMap.set(meta, index);\n }\n return false;\n }\n\n deleteMetaIndex(meta: Meta) {\n return this._metaToIndexMap.delete(meta);\n }\n\n replaceMetaToIndexMap(newMetaToIndexMap: MetaToIndexMap<Meta>) {\n if (!this._indexExtractor) {\n return (this._metaToIndexMap = newMetaToIndexMap);\n }\n return false;\n }\n\n getIndexPosition(index: number): undefined | number {\n return this.getMetaIndex(this.getIndexMeta(index));\n }\n\n getNewPositionForIndex(index: number) {\n const meta = this.getIndexMeta(index);\n invariant(\n this._metaToPositionMap.get(meta) === undefined,\n \"Shouldn't try to find new position for value already stored in BufferSet\"\n );\n const newPosition = this._positionToMetaList.length;\n\n this._pushToHeaps(newPosition, index);\n this._setMetaIndex(meta, index);\n this._setMetaPosition(meta, newPosition);\n\n return newPosition;\n }\n\n getMinValue() {\n return this._smallValues.peek()?.value;\n }\n\n getMaxValue() {\n return this._largeValues.peek()?.value;\n }\n\n replacePositionInFliedIndices(newIndex: number, safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n\n if (this._isOnTheFlyFull) {\n // newIndex is not critical index, do nothing\n if (!isClamped(startIndex, newIndex, endIndex)) {\n return null;\n }\n // if `newIndex` is critical index, replace an un-committed\n // index value from _onTheFlyIndices.\n const pos = this.getOnTheFlyUncriticalPosition(safeRange);\n if (pos != null) return pos;\n }\n return null;\n }\n\n getFliedPosition(newIndex: number, safeRange: SafeRange) {\n const pos = this.replacePositionInFliedIndices(newIndex, safeRange);\n if (pos != null) {\n const meta = this.getIndexMeta(newIndex);\n this._onTheFlyIndices[pos] = meta;\n this._setMetaIndex(meta, newIndex);\n return this._isOnTheFlyFullReturnHook(pos);\n }\n return null;\n }\n\n /**\n *\n * @param newIndex\n * @param safeRange\n * @returns\n *\n *\n * _positionToMetaList maybe undefined on next loop\n */\n getPosition(newIndex: number, safeRange?: SafeRange) {\n this.prepare();\n const meta = this.getIndexMeta(newIndex);\n const prevMetaPosition = this._metaToPositionMap.get(meta);\n\n if (prevMetaPosition !== undefined) {\n const onTheFlyPositionMeta = this._onTheFlyIndices[prevMetaPosition];\n // the occupied meta should change position\n if (onTheFlyPositionMeta) {\n // such as place item 11 twice...\n if (onTheFlyPositionMeta === meta) {\n return prevMetaPosition;\n }\n let positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n if (this._isOnTheFlyFull)\n return this.getFliedPosition(newIndex, safeRange);\n\n while (this._onTheFlyIndices[positionToReplace]) {\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n }\n\n if (positionToReplace != null) {\n this._setMetaIndex(meta, newIndex);\n this._onTheFlyIndices[positionToReplace] = onTheFlyPositionMeta;\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n }\n this._onTheFlyIndices[prevMetaPosition] = meta;\n return this._isOnTheFlyFullReturnHook(prevMetaPosition);\n }\n\n // placed on new buffered position\n if (!this.isBufferFull)\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n\n if (this._isOnTheFlyFull) return this.getFliedPosition(newIndex, safeRange);\n\n let positionToReplace;\n const prevIndexMeta = this._indexToMetaMap.get(newIndex);\n\n // Index has already been stored, but we cant use its old position directly...\n // 1:index -> meta, meta may be reused later\n\n // 2: temp use index -> meta -> position, this issue should exist for follows...\n if (!prevIndexMeta) {\n this._cleanHeaps();\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n } else {\n positionToReplace = this._metaToPositionMap.get(prevIndexMeta);\n }\n\n this._onTheFlyIndices[positionToReplace] = meta;\n this._setMetaIndex(meta, newIndex);\n this._setMetaPosition(meta, positionToReplace);\n // should not push to heap, pop only\n // this._pushToHeaps(positionToReplace, newIndex)\n\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n\n replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (!this.isBufferFull) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n return this._replaceFurthestIndexPosition(newIndex, safeRange);\n }\n\n _replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (this._largeValues.empty() || this._smallValues.empty()) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n const minValue = this._smallValues.peek()!.value;\n const maxValue = this._largeValues.peek()!.value;\n\n let indexToReplace;\n\n if (!safeRange) {\n // far from min\n if (Math.abs(newIndex - minValue) > Math.abs(newIndex - maxValue)) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n const { startIndex: lowValue, endIndex: highValue } = safeRange;\n\n // All values currently stored are necessary, we can't reuse any of them.\n if (\n isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n return null;\n } else if (\n isClamped(lowValue, minValue, highValue) &&\n !isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = maxValue;\n this._largeValues.pop();\n } else if (\n !isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else if (lowValue - minValue > maxValue - highValue) {\n // minValue is further from provided range. We will reuse it's position.\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n shuffle() {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta = this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n indices[idx] = targetIndex;\n }\n\n const _arr = new Array(indices.length);\n const _available = [];\n const indexToMetaMap = new Map();\n const metaToIndexMap = new Map();\n const metaToPositionMap = new Map();\n for (let idx = 0; idx < indices.length; idx++) {\n const currentIndex = indices[idx];\n const currentMeta = this._metaExtractor(currentIndex);\n if (currentMeta == null) continue;\n\n indexToMetaMap.set(currentIndex, currentMeta);\n metaToIndexMap.set(currentMeta, currentIndex);\n\n if (currentMeta === this._positionToMetaList[idx]) {\n _arr[idx] = currentMeta;\n continue;\n }\n const _i = this._positionToMetaList.findIndex((v) => v === currentMeta);\n if (_i !== -1) {\n _arr[_i] = currentMeta;\n continue;\n }\n\n _available.push(currentMeta);\n }\n\n const { smallValues, largeValues } = this.initialize();\n const positionToMetaList = [];\n\n for (let position = 0; position < indices.length; position++) {\n const value = indices[position];\n if (_arr[position] != null) {\n positionToMetaList[position] = _arr[position];\n metaToPositionMap.set(_arr[position], position);\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n continue;\n }\n const meta = _available.shift();\n if (meta != null) {\n positionToMetaList[position] = meta;\n metaToPositionMap.set(meta, position);\n\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n }\n }\n\n this._positionToMetaList = positionToMetaList;\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n this._indexToMetaMap = indexToMetaMap;\n this.replaceMetaToIndexMap(metaToIndexMap);\n this._metaToPositionMap = metaToPositionMap;\n this._onTheFlyIndices = [];\n\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n // key point: `meta` should be preserved..\n getIndices() {\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n // which means source data has changed. such as one element has been deleted\n if (meta !== this.getIndexMeta(targetIndex)) {\n return this.shuffle();\n }\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n // clear on the fly indices after return indices.\n this._onTheFlyIndices = [];\n\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n _pushToHeaps(position: number, value: number) {\n const element = { position, value };\n // We can reuse the same object in both heaps, because we don't mutate them\n this._smallValues.push(element);\n this._largeValues.push(element);\n }\n\n _setMetaPosition(meta: Meta, position: number) {\n const prevMetaOnPosition = this._positionToMetaList[position];\n if (prevMetaOnPosition) this._metaToPositionMap.delete(prevMetaOnPosition);\n this._positionToMetaList[position] = meta;\n this._metaToPositionMap.set(meta, position);\n }\n\n /**\n *\n * @param meta\n * @param index\n * @returns true means index not changed\n */\n _setMetaIndex(meta: Meta, index: number) {\n const prevMetaIndex = this.getMetaIndex(meta);\n if (prevMetaIndex !== undefined) {\n // no need to set\n // if (prevMetaIndex === index) return true;\n this._indexToMetaMap.delete(prevMetaIndex);\n }\n this.setMetaIndex(meta, index);\n this._indexToMetaMap.set(index, meta);\n return false;\n }\n\n readyToStartNextLoop() {\n this._lastUpdatedMS = Date.now();\n }\n\n prepare() {\n if (this._loopMS === this._lastUpdatedMS) return;\n this._loopMS = this._lastUpdatedMS;\n\n this._onTheFlyIndices = [];\n this._isOnTheFlyFull = false;\n }\n\n _cleanHeaps() {\n // We not usually only remove object from one heap while moving value.\n // Here we make sure that there is no stale data on top of heaps.\n this._cleanHeap(this._smallValues);\n this._cleanHeap(this._largeValues);\n const minHeapSize = Math.min(\n this._smallValues.size(),\n this._largeValues.size()\n );\n const maxHeapSize = Math.max(\n this._smallValues.size(),\n this._largeValues.size()\n );\n if (maxHeapSize > 10 * minHeapSize) {\n // There are many old values in one of heaps. We need to get rid of them\n // to not use too avoid memory leaks\n this._recreateHeaps();\n }\n }\n _recreateHeaps() {\n const sourceHeap =\n this._smallValues.size() < this._largeValues.size()\n ? this._smallValues\n : this._largeValues;\n const newSmallValues = new Heap<HeapItem>(\n [], // Initial data in the heap\n this._smallerComparator\n );\n const newLargeValues = new Heap<HeapItem>(\n [], // Initial datat in the heap\n this._greaterComparator\n );\n while (!sourceHeap.empty()) {\n const element = sourceHeap.pop()!;\n // Push all still valid elements to new heaps\n if (\n this._metaToPositionMap.get(this._indexToMetaMap.get(element.value)) !=\n null\n ) {\n newSmallValues.push(element);\n newLargeValues.push(element);\n }\n }\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n _cleanHeap(heap: Heap<HeapItem>) {\n while (\n !heap.empty() &&\n this._metaToPositionMap.get(\n this._indexToMetaMap.get(heap.peek()!.value)\n ) == null\n ) {\n heap.pop();\n }\n }\n\n _smallerComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value < rhs.value;\n }\n\n _greaterComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value > rhs.value;\n }\n}\n\nexport default IntegerBufferSet;\n"],"names":["defaultMetaExtractor","value","IntegerBufferSet","props","_props$name","name","indexExtractor","_props$bufferSize","bufferSize","_props$metaExtractor","metaExtractor","this","_metaExtractor","_indexExtractor","_name","_indexToMetaMap","Map","_metaToPositionMap","_positionToMetaList","_metaToIndexMap","_onTheFlyIndices","_bufferSize","_smallValues","Heap","_smallerComparator","_largeValues","_greaterComparator","getNewPositionForIndex","bind","getIndexPosition","replacePositionInFliedIndices","replaceFurthestIndexPosition","_isOnTheFlyFullReturnHook","returnHook","setIsOnTheFlyFull","_loopMS","Date","now","_lastUpdatedMS","_proto","prototype","val","data","filter","v","_isOnTheFlyFull","length","getOnTheFlyUncriticalPosition","safeRange","startIndex","endIndex","idx","metaIndex","get","isClamped","initialize","smallValues","largeValues","valueToPositionObject","getIndexMeta","index","getMetaIndex","meta","setMetaIndex","set","deleteMetaIndex","replaceMetaToIndexMap","newMetaToIndexMap","undefined","invariant","newPosition","_pushToHeaps","_setMetaIndex","_setMetaPosition","getMinValue","_this$_smallValues$pe","peek","getMaxValue","_this$_largeValues$pe","newIndex","pos","getFliedPosition","getPosition","prepare","positionToReplace","prevMetaPosition","onTheFlyPositionMeta","_replaceFurthestIndexPosition","isBufferFull","prevIndexMeta","_cleanHeaps","empty","indexToReplace","minValue","maxValue","Math","abs","pop","replacedMeta","lowValue","highValue","shuffle","indices","Array","targetIndex","_arr","_available","indexToMetaMap","metaToIndexMap","metaToPositionMap","_loop","currentIndex","currentMeta","_this","_i","findIndex","push","_this$initialize","positionToMetaList","position","shift","element","recyclerKey","err","readyToStartNextLoop","getIndices","prevMetaOnPosition","prevMetaIndex","_cleanHeap","minHeapSize","min","size","max","_recreateHeaps","sourceHeap","newSmallValues","newLargeValues","heap","lhs","rhs","key"],"mappings":"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"}
|
|
@@ -20,37 +20,6 @@ function _createClass(Constructor, protoProps, staticProps) {
|
|
|
20
20
|
});
|
|
21
21
|
return Constructor;
|
|
22
22
|
}
|
|
23
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
24
|
-
if (!o) return;
|
|
25
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
26
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
27
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
28
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
29
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
30
|
-
}
|
|
31
|
-
function _arrayLikeToArray(arr, len) {
|
|
32
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
33
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
34
|
-
return arr2;
|
|
35
|
-
}
|
|
36
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
37
|
-
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
38
|
-
if (it) return (it = it.call(o)).next.bind(it);
|
|
39
|
-
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
40
|
-
if (it) o = it;
|
|
41
|
-
var i = 0;
|
|
42
|
-
return function () {
|
|
43
|
-
if (i >= o.length) return {
|
|
44
|
-
done: true
|
|
45
|
-
};
|
|
46
|
-
return {
|
|
47
|
-
done: false,
|
|
48
|
-
value: o[i++]
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
53
|
-
}
|
|
54
23
|
function _toPrimitive(input, hint) {
|
|
55
24
|
if (typeof input !== "object" || input === null) return input;
|
|
56
25
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -91,13 +60,11 @@ var IntegerBufferSet = /*#__PURE__*/function () {
|
|
|
91
60
|
this._positionToMetaList = [];
|
|
92
61
|
this._metaToIndexMap = new Map();
|
|
93
62
|
this._onTheFlyIndices = [];
|
|
94
|
-
this._size = 0;
|
|
95
63
|
this._bufferSize = bufferSize;
|
|
96
64
|
this._smallValues = new Heap([], this._smallerComparator);
|
|
97
65
|
this._largeValues = new Heap([], this._greaterComparator);
|
|
98
66
|
this.getNewPositionForIndex = this.getNewPositionForIndex.bind(this);
|
|
99
67
|
this.getIndexPosition = this.getIndexPosition.bind(this);
|
|
100
|
-
this.getSize = this.getSize.bind(this);
|
|
101
68
|
this.replacePositionInFliedIndices = this.replacePositionInFliedIndices.bind(this);
|
|
102
69
|
this.replaceFurthestIndexPosition = this.replaceFurthestIndexPosition.bind(this);
|
|
103
70
|
this._isOnTheFlyFullReturnHook = returnHook(this.setIsOnTheFlyFull.bind(this));
|
|
@@ -105,9 +72,6 @@ var IntegerBufferSet = /*#__PURE__*/function () {
|
|
|
105
72
|
this._lastUpdatedMS = this._loopMS;
|
|
106
73
|
}
|
|
107
74
|
var _proto = IntegerBufferSet.prototype;
|
|
108
|
-
_proto.getSize = function getSize() {
|
|
109
|
-
return this._size;
|
|
110
|
-
};
|
|
111
75
|
_proto.setIsOnTheFlyFull = function setIsOnTheFlyFull(val) {
|
|
112
76
|
if (val != null) {
|
|
113
77
|
var data = this._onTheFlyIndices.filter(function (v) {
|
|
@@ -177,51 +141,6 @@ var IntegerBufferSet = /*#__PURE__*/function () {
|
|
|
177
141
|
var _this$_largeValues$pe;
|
|
178
142
|
return (_this$_largeValues$pe = this._largeValues.peek()) == null ? void 0 : _this$_largeValues$pe.value;
|
|
179
143
|
};
|
|
180
|
-
_proto.setValuePosition = function setValuePosition(value, position) {};
|
|
181
|
-
_proto.findPositionMeta = function findPositionMeta(position) {
|
|
182
|
-
for (var _iterator = _createForOfIteratorHelperLoose(this._metaToPositionMap), _step; !(_step = _iterator()).done;) {
|
|
183
|
-
var _step$value = _step.value,
|
|
184
|
-
meta = _step$value[0],
|
|
185
|
-
pos = _step$value[1];
|
|
186
|
-
if (pos === position) return meta;
|
|
187
|
-
}
|
|
188
|
-
return null;
|
|
189
|
-
};
|
|
190
|
-
_proto.rebuildHeapsWithMeta = function rebuildHeapsWithMeta(metaToPositionMap) {
|
|
191
|
-
var _this$initialize = this.initialize(),
|
|
192
|
-
smallValues = _this$initialize.smallValues,
|
|
193
|
-
largeValues = _this$initialize.largeValues;
|
|
194
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(metaToPositionMap), _step2; !(_step2 = _iterator2()).done;) {
|
|
195
|
-
var _step2$value = _step2.value,
|
|
196
|
-
meta = _step2$value[0],
|
|
197
|
-
position = _step2$value[1];
|
|
198
|
-
var index = this.getMetaIndex(meta);
|
|
199
|
-
var token = {
|
|
200
|
-
index: index,
|
|
201
|
-
position: position
|
|
202
|
-
};
|
|
203
|
-
smallValues.push(token);
|
|
204
|
-
largeValues.push(token);
|
|
205
|
-
}
|
|
206
|
-
this._smallValues = smallValues;
|
|
207
|
-
this._largeValues = largeValues;
|
|
208
|
-
};
|
|
209
|
-
_proto.setPositionIndex = function setPositionIndex(position, index) {
|
|
210
|
-
var meta = this._metaExtractor(index);
|
|
211
|
-
var originalPosition = this._metaToPositionMap.get(meta);
|
|
212
|
-
if (originalPosition !== undefined) {
|
|
213
|
-
if (originalPosition === position) return true;
|
|
214
|
-
this.deleteMetaIndex(meta);
|
|
215
|
-
}
|
|
216
|
-
var metaToReplace = this.findPositionMeta(position);
|
|
217
|
-
if (metaToReplace) this._metaToPositionMap["delete"](metaToReplace);
|
|
218
|
-
this._metaToPositionMap.set(meta, position);
|
|
219
|
-
this.rebuildHeapsWithMeta(this._metaToPositionMap);
|
|
220
|
-
return true;
|
|
221
|
-
};
|
|
222
|
-
_proto.getMetaPosition = function getMetaPosition(meta) {
|
|
223
|
-
return this._metaToPositionMap.get(meta);
|
|
224
|
-
};
|
|
225
144
|
_proto.replacePositionInFliedIndices = function replacePositionInFliedIndices(newIndex, safeRange) {
|
|
226
145
|
var startIndex = safeRange.startIndex,
|
|
227
146
|
endIndex = safeRange.endIndex;
|
|
@@ -365,9 +284,9 @@ var IntegerBufferSet = /*#__PURE__*/function () {
|
|
|
365
284
|
var _ret = _loop();
|
|
366
285
|
if (_ret === "continue") continue;
|
|
367
286
|
}
|
|
368
|
-
var _this$
|
|
369
|
-
smallValues = _this$
|
|
370
|
-
largeValues = _this$
|
|
287
|
+
var _this$initialize = this.initialize(),
|
|
288
|
+
smallValues = _this$initialize.smallValues,
|
|
289
|
+
largeValues = _this$initialize.largeValues;
|
|
371
290
|
var positionToMetaList = [];
|
|
372
291
|
for (var position = 0; position < indices.length; position++) {
|
|
373
292
|
var value = indices[position];
|
|
@@ -485,42 +404,6 @@ var IntegerBufferSet = /*#__PURE__*/function () {
|
|
|
485
404
|
this._recreateHeaps();
|
|
486
405
|
}
|
|
487
406
|
};
|
|
488
|
-
_proto.rebuildHeapsWithValues = function rebuildHeapsWithValues(arr) {
|
|
489
|
-
var valueToPositionObject = {};
|
|
490
|
-
var newSmallValues = new Heap([], this._smallerComparator);
|
|
491
|
-
var newLargeValues = new Heap([], this._greaterComparator);
|
|
492
|
-
arr.forEach(function (element) {
|
|
493
|
-
var position = element.position,
|
|
494
|
-
value = element.value;
|
|
495
|
-
if (value !== undefined) {
|
|
496
|
-
var _element2 = {
|
|
497
|
-
position: position,
|
|
498
|
-
value: value
|
|
499
|
-
};
|
|
500
|
-
newSmallValues.push(_element2);
|
|
501
|
-
newLargeValues.push(_element2);
|
|
502
|
-
valueToPositionObject[value] = position;
|
|
503
|
-
}
|
|
504
|
-
});
|
|
505
|
-
var _arr = new Array(this._bufferSize).fill(2);
|
|
506
|
-
Object.keys(valueToPositionObject).map(function (key) {
|
|
507
|
-
return _arr[valueToPositionObject[key]] = 1;
|
|
508
|
-
});
|
|
509
|
-
_arr.forEach(function (_i, position) {
|
|
510
|
-
if (_i === 2) {
|
|
511
|
-
var value = Number.MAX_SAFE_INTEGER - position;
|
|
512
|
-
var element = {
|
|
513
|
-
position: position,
|
|
514
|
-
value: value
|
|
515
|
-
};
|
|
516
|
-
newSmallValues.push(element);
|
|
517
|
-
newLargeValues.push(element);
|
|
518
|
-
valueToPositionObject[value] = position;
|
|
519
|
-
}
|
|
520
|
-
});
|
|
521
|
-
this._smallValues = newSmallValues;
|
|
522
|
-
this._largeValues = newLargeValues;
|
|
523
|
-
};
|
|
524
407
|
_proto._recreateHeaps = function _recreateHeaps() {
|
|
525
408
|
var sourceHeap = this._smallValues.size() < this._largeValues.size() ? this._smallValues : this._largeValues;
|
|
526
409
|
var newSmallValues = new Heap([], this._smallerComparator);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integer-buffer-set.esm.js","sources":["../src/index.ts"],"sourcesContent":["import Heap from '@x-oasis/heap';\nimport isClamped from '@x-oasis/is-clamped';\nimport invariant from '@x-oasis/invariant';\nimport returnHook, { ReturnHook } from '@x-oasis/return-hook';\nimport {\n HeapItem,\n SafeRange,\n MetaExtractor,\n IndexExtractor,\n IntegerBufferSetProps,\n MetaToIndexMap,\n MetaToPositionMap,\n IndexToMetaMap,\n} from './types';\n\nconst defaultMetaExtractor = (value) => value;\nexport const defaultBufferSize = 10;\n\n// !!!!! should do meta validation...meta should has an index...\n// value: original data `index` value\n// value(index) => meta => position\n// `index to getIndices, meta to find index`\n\n// Data structure that allows to store values and assign positions to them\n// in a way to minimize changing positions of stored values when new ones are\n// added or when some values are replaced. Stored elements are alwasy assigned\n// a consecutive set of positoins startin from 0 up to count of elements less 1\n// Following actions can be executed\n// * get position assigned to given value (null if value is not stored)\n// * create new entry for new value and get assigned position back\n// * replace value that is furthest from specified value range with new value\n// and get it's position back\n// All operations take amortized log(n) time where n is number of elements in\n// the set.\n// feature: add / delete / update item will also in consider..\nclass IntegerBufferSet<Meta = any> {\n private _size: number;\n private _name: string;\n private _bufferSize: number;\n // private _positionToValueObject: ValueToPositionObject;\n\n private _indexToMetaMap: IndexToMetaMap<Meta>;\n private _metaToPositionMap: MetaToPositionMap<Meta>;\n private _positionToMetaList: Array<Meta>;\n private _metaToIndexMap: MetaToIndexMap<Meta>;\n\n private _smallValues: Heap<HeapItem>;\n private _largeValues: Heap<HeapItem>;\n private _metaExtractor: MetaExtractor<Meta>;\n private _indexExtractor: IndexExtractor<Meta>;\n\n private _onTheFlyIndices: Array<Meta>;\n\n private _isOnTheFlyFull: boolean;\n private _isOnTheFlyFullReturnHook: ReturnHook;\n\n private _loopMS: number;\n private _lastUpdatedMS: number;\n\n constructor(props: IntegerBufferSetProps<Meta> = {}) {\n const {\n name = 'default_buffer',\n indexExtractor,\n bufferSize = defaultBufferSize,\n metaExtractor = defaultMetaExtractor,\n } = props;\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n\n this._name = name;\n // this._positionToValueObject = {};\n\n /**\n * this._indexToMetaMap is used to find the prev meta when finding a position for index.\n */\n this._indexToMetaMap = new Map();\n this._metaToPositionMap = new Map();\n this._positionToMetaList = [];\n this._metaToIndexMap = new Map();\n this._onTheFlyIndices = [];\n\n this._size = 0;\n this._bufferSize = bufferSize;\n\n this._smallValues = new Heap([], this._smallerComparator);\n this._largeValues = new Heap([], this._greaterComparator);\n\n this.getNewPositionForIndex = this.getNewPositionForIndex.bind(this);\n this.getIndexPosition = this.getIndexPosition.bind(this);\n this.getSize = this.getSize.bind(this);\n this.replacePositionInFliedIndices =\n this.replacePositionInFliedIndices.bind(this);\n this.replaceFurthestIndexPosition =\n this.replaceFurthestIndexPosition.bind(this);\n this._isOnTheFlyFullReturnHook = returnHook(\n this.setIsOnTheFlyFull.bind(this)\n );\n\n this._loopMS = Date.now();\n this._lastUpdatedMS = this._loopMS;\n }\n\n getSize() {\n return this._size;\n }\n\n get bufferSize() {\n return this._bufferSize;\n }\n\n setIsOnTheFlyFull(val: any) {\n if (val != null) {\n const data = this._onTheFlyIndices.filter((v) => v);\n this._isOnTheFlyFull = data.length === this._bufferSize;\n }\n }\n\n get isBufferFull() {\n return this._positionToMetaList.length >= this._bufferSize;\n }\n\n getOnTheFlyUncriticalPosition(safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n for (let idx = 0; idx < this._onTheFlyIndices.length; idx++) {\n const meta = this._onTheFlyIndices[idx];\n const metaIndex = this._metaToIndexMap.get(meta);\n if (!isClamped(startIndex, metaIndex, endIndex)) {\n return idx;\n }\n }\n return null;\n }\n\n initialize() {\n return {\n smallValues: new Heap([], this._smallerComparator),\n largeValues: new Heap([], this._greaterComparator),\n valueToPositionObject: {},\n };\n }\n\n getIndexMeta(index: number) {\n return this._metaExtractor(index);\n }\n\n getMetaIndex(meta: Meta) {\n if (this._indexExtractor) return this._indexExtractor(meta);\n return this._metaToIndexMap.get(meta);\n }\n\n setMetaIndex(meta: Meta, index: number) {\n if (!this._indexExtractor) {\n return this._metaToIndexMap.set(meta, index);\n }\n return false;\n }\n\n deleteMetaIndex(meta: Meta) {\n return this._metaToIndexMap.delete(meta);\n }\n\n replaceMetaToIndexMap(newMetaToIndexMap: MetaToIndexMap<Meta>) {\n if (!this._indexExtractor) {\n return (this._metaToIndexMap = newMetaToIndexMap);\n }\n return false;\n }\n\n getIndexPosition(index: number): undefined | number {\n return this.getMetaIndex(this.getIndexMeta(index));\n }\n\n getNewPositionForIndex(index: number) {\n const meta = this.getIndexMeta(index);\n invariant(\n this._metaToPositionMap.get(meta) === undefined,\n \"Shouldn't try to find new position for value already stored in BufferSet\"\n );\n const newPosition = this._positionToMetaList.length;\n\n this._pushToHeaps(newPosition, index);\n this._setMetaIndex(meta, index);\n this._setMetaPosition(meta, newPosition);\n\n return newPosition;\n }\n\n getMinValue() {\n return this._smallValues.peek()?.value;\n }\n\n getMaxValue() {\n return this._largeValues.peek()?.value;\n }\n\n /**\n * values actually is the position of original data.\n */\n setValuePosition(value: number, position: number) {}\n\n findPositionMeta(position: number) {\n for (const [meta, pos] of this._metaToPositionMap) {\n if (pos === position) return meta;\n }\n return null;\n }\n\n rebuildHeapsWithMeta(metaToPositionMap: MetaToPositionMap<Meta>) {\n const { smallValues, largeValues } = this.initialize();\n\n for (const [meta, position] of metaToPositionMap) {\n const index = this.getMetaIndex(meta);\n const token = { index, position };\n smallValues.push(token);\n largeValues.push(token);\n }\n\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n }\n\n /**\n *\n * @param position\n * @param value\n *\n *\n */\n setPositionIndex(position: number, index: number) {\n const meta = this._metaExtractor(index);\n const originalPosition = this._metaToPositionMap.get(meta);\n\n // current index has a position\n if (originalPosition !== undefined) {\n if (originalPosition === position) return true;\n this.deleteMetaIndex(meta);\n }\n\n const metaToReplace = this.findPositionMeta(position);\n if (metaToReplace) this._metaToPositionMap.delete(metaToReplace);\n this._metaToPositionMap.set(meta, position);\n\n this.rebuildHeapsWithMeta(this._metaToPositionMap);\n return true;\n }\n\n getMetaPosition(meta: Meta) {\n return this._metaToPositionMap.get(meta);\n }\n\n // performRangeUpdate(\n // startIndex: number,\n // endIndex: number,\n // safeRange: {\n // startIndex: number;\n // endIndex: number;\n // }\n // ) {\n // const _start = Math.max(startIndex, safeRange.startIndex);\n // const _end = Math.min(endIndex, safeRange.endIndex);\n // const primaryMetaList = [];\n // const secondaryMetaList = [];\n // const locationStartIndex = startIndex;\n // const targetIndices = new Array(this._bufferSize);\n\n // const _valueToPositionObject = {};\n // const _positionToValueObject = {};\n\n // const _valueToMetaObject = {};\n // const _metaToIndexMap = new Map();\n\n // for (let value = startIndex; value <= endIndex; value++) {\n // const meta = this._metaExtractor(value);\n // if (meta) {\n // const _i = value - locationStartIndex;\n // if (isClamped(value, safeRange.startIndex, safeRange.endIndex)) {\n // primaryMetaList[_i] = meta;\n // const targetIndex = this.getMetaPosition(meta);\n // if (isNumber(targetIndex)) {\n // targetIndices[targetIndex] = value;\n // _valueToPositionObject[value] = targetIndex;\n // _valueToMetaObject[value] = meta;\n // _metaToIndexMap.set(meta, value);\n // _positionToValueObject[targetIndex] = value;\n // }\n // } else {\n // secondaryMetaList[_i] = meta;\n // }\n // }\n // }\n\n // for (let idx = _start; idx <= _end; idx++) {\n // const meta = this._metaExtractor(idx);\n // if (_metaToIndexMap.get(meta) !== undefined) continue;\n // let p;\n // while (\n // (p =\n // targetIndices[\n // this.resolvePosition(safeRange.startIndex, safeRange.endIndex, idx)\n // ]) === undefined\n // ) {\n // targetIndices[p] = idx;\n // }\n // }\n // }\n\n replacePositionInFliedIndices(newIndex: number, safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n\n if (this._isOnTheFlyFull) {\n // newIndex is not critical index, do nothing\n if (!isClamped(startIndex, newIndex, endIndex)) {\n return null;\n }\n // if `newIndex` is critical index, replace an un-committed\n // index value from _onTheFlyIndices.\n const pos = this.getOnTheFlyUncriticalPosition(safeRange);\n if (pos != null) return pos;\n }\n return null;\n }\n\n getFliedPosition(newIndex: number, safeRange: SafeRange) {\n const pos = this.replacePositionInFliedIndices(newIndex, safeRange);\n if (pos != null) {\n const meta = this.getIndexMeta(newIndex);\n this._onTheFlyIndices[pos] = meta;\n this._setMetaIndex(meta, newIndex);\n return this._isOnTheFlyFullReturnHook(pos);\n }\n return null;\n }\n\n /**\n *\n * @param newIndex\n * @param safeRange\n * @returns\n *\n *\n * _positionToMetaList maybe undefined on next loop\n */\n getPosition(newIndex: number, safeRange?: SafeRange) {\n this.prepare();\n const meta = this.getIndexMeta(newIndex);\n const prevMetaPosition = this._metaToPositionMap.get(meta);\n\n if (prevMetaPosition !== undefined) {\n const onTheFlyPositionMeta = this._onTheFlyIndices[prevMetaPosition];\n // the occupied meta should change position\n if (onTheFlyPositionMeta) {\n // such as place item 11 twice...\n if (onTheFlyPositionMeta === meta) {\n return prevMetaPosition;\n }\n let positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n if (this._isOnTheFlyFull)\n return this.getFliedPosition(newIndex, safeRange);\n\n while (this._onTheFlyIndices[positionToReplace]) {\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n }\n\n if (positionToReplace != null) {\n this._setMetaIndex(meta, newIndex);\n this._onTheFlyIndices[positionToReplace] = onTheFlyPositionMeta;\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n }\n this._onTheFlyIndices[prevMetaPosition] = meta;\n return this._isOnTheFlyFullReturnHook(prevMetaPosition);\n }\n\n // placed on new buffered position\n if (!this.isBufferFull)\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n\n // console.log('this. fly ', this._isOnTheFlyFull)\n if (this._isOnTheFlyFull) return this.getFliedPosition(newIndex, safeRange);\n\n let positionToReplace;\n const prevIndexMeta = this._indexToMetaMap.get(newIndex);\n // console.log('this. is ', this.isBufferFull, prevIndexMeta);\n\n // Index has already been stored, but we cant use its old position directly...\n // 1:index -> meta, meta may be reused later\n\n // 2: temp use index -> meta -> position, this issue should exist for follows...\n if (!prevIndexMeta) {\n this._cleanHeaps();\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n } else {\n positionToReplace = this._metaToPositionMap.get(prevIndexMeta);\n }\n\n this._onTheFlyIndices[positionToReplace] = meta;\n this._setMetaIndex(meta, newIndex);\n this._setMetaPosition(meta, positionToReplace);\n // should not push to heap, pop only\n // this._pushToHeaps(positionToReplace, newIndex)\n\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n\n replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (!this.isBufferFull) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n return this._replaceFurthestIndexPosition(newIndex, safeRange);\n }\n\n _replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (this._largeValues.empty() || this._smallValues.empty()) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n const minValue = this._smallValues.peek()!.value;\n const maxValue = this._largeValues.peek()!.value;\n\n // console.log('mxa ', maxValue, minValue);\n let indexToReplace;\n\n if (!safeRange) {\n // far from min\n if (Math.abs(newIndex - minValue) > Math.abs(newIndex - maxValue)) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n const { startIndex: lowValue, endIndex: highValue } = safeRange;\n\n // All values currently stored are necessary, we can't reuse any of them.\n if (\n isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n return null;\n } else if (\n isClamped(lowValue, minValue, highValue) &&\n !isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = maxValue;\n this._largeValues.pop();\n } else if (\n !isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else if (lowValue - minValue > maxValue - highValue) {\n // minValue is further from provided range. We will reuse it's position.\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n shuffle() {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta = this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n indices[idx] = targetIndex;\n }\n\n // console.log(\n // 'position xxx ',\n // this._positionToMetaList,\n // this._onTheFlyIndices\n // );\n\n const _arr = new Array(indices.length);\n const _available = [];\n const indexToMetaMap = new Map();\n const metaToIndexMap = new Map();\n const metaToPositionMap = new Map();\n for (let idx = 0; idx < indices.length; idx++) {\n const currentIndex = indices[idx];\n const currentMeta = this._metaExtractor(currentIndex);\n if (currentMeta == null) continue;\n\n indexToMetaMap.set(currentIndex, currentMeta);\n metaToIndexMap.set(currentMeta, currentIndex);\n\n if (currentMeta === this._positionToMetaList[idx]) {\n _arr[idx] = currentMeta;\n continue;\n }\n const _i = this._positionToMetaList.findIndex((v) => v === currentMeta);\n if (_i !== -1) {\n _arr[_i] = currentMeta;\n continue;\n }\n\n _available.push(currentMeta);\n }\n\n const { smallValues, largeValues } = this.initialize();\n const positionToMetaList = [];\n\n for (let position = 0; position < indices.length; position++) {\n const value = indices[position];\n if (_arr[position] != null) {\n positionToMetaList[position] = _arr[position];\n metaToPositionMap.set(_arr[position], position);\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n continue;\n }\n const meta = _available.shift();\n if (meta != null) {\n positionToMetaList[position] = meta;\n metaToPositionMap.set(meta, position);\n\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n }\n }\n\n // console.log('position ', positionToMetaList, largeValues.peek().value);\n\n this._positionToMetaList = positionToMetaList;\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n this._indexToMetaMap = indexToMetaMap;\n this.replaceMetaToIndexMap(metaToIndexMap);\n this._metaToPositionMap = metaToPositionMap;\n this._onTheFlyIndices = [];\n\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n // key point: `meta` should be preserved..\n getIndices() {\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n // which means source data has changed. such as one element has been deleted\n if (meta !== this.getIndexMeta(targetIndex)) {\n return this.shuffle();\n }\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n // clear on the fly indices after return indices.\n this._onTheFlyIndices = [];\n\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n _pushToHeaps(position: number, value: number) {\n const element = { position, value };\n // We can reuse the same object in both heaps, because we don't mutate them\n this._smallValues.push(element);\n this._largeValues.push(element);\n }\n\n _setMetaPosition(meta: Meta, position: number) {\n const prevMetaOnPosition = this._positionToMetaList[position];\n if (prevMetaOnPosition) this._metaToPositionMap.delete(prevMetaOnPosition);\n this._positionToMetaList[position] = meta;\n this._metaToPositionMap.set(meta, position);\n }\n\n /**\n *\n * @param meta\n * @param index\n * @returns true means index not changed\n */\n _setMetaIndex(meta: Meta, index: number) {\n const prevMetaIndex = this.getMetaIndex(meta);\n if (prevMetaIndex !== undefined) {\n // no need to set\n // if (prevMetaIndex === index) return true;\n this._indexToMetaMap.delete(prevMetaIndex);\n }\n this.setMetaIndex(meta, index);\n this._indexToMetaMap.set(index, meta);\n return false;\n }\n\n readyToStartNextLoop() {\n this._lastUpdatedMS = Date.now();\n }\n\n prepare() {\n if (this._loopMS === this._lastUpdatedMS) return;\n this._loopMS = this._lastUpdatedMS;\n\n this._onTheFlyIndices = [];\n this._isOnTheFlyFull = false;\n const len = this._positionToMetaList.length;\n\n for (let index = 0; index < len; index++) {}\n }\n\n _cleanHeaps() {\n // We not usually only remove object from one heap while moving value.\n // Here we make sure that there is no stale data on top of heaps.\n this._cleanHeap(this._smallValues);\n this._cleanHeap(this._largeValues);\n const minHeapSize = Math.min(\n this._smallValues.size(),\n this._largeValues.size()\n );\n const maxHeapSize = Math.max(\n this._smallValues.size(),\n this._largeValues.size()\n );\n if (maxHeapSize > 10 * minHeapSize) {\n // There are many old values in one of heaps. We need to get rid of them\n // to not use too avoid memory leaks\n this._recreateHeaps();\n }\n }\n\n rebuildHeapsWithValues(\n arr: Array<{\n position: number;\n value: number;\n }>\n ) {\n const valueToPositionObject = {};\n const newSmallValues = new Heap<HeapItem>([], this._smallerComparator);\n const newLargeValues = new Heap<HeapItem>([], this._greaterComparator);\n\n arr.forEach((element) => {\n const { position, value } = element;\n if (value !== undefined) {\n const element = {\n position,\n value,\n };\n newSmallValues.push(element);\n newLargeValues.push(element);\n valueToPositionObject[value] = position;\n }\n });\n const _arr = new Array(this._bufferSize).fill(2);\n Object.keys(valueToPositionObject).map(\n (key) => (_arr[valueToPositionObject[key]] = 1)\n );\n _arr.forEach((_i, position) => {\n if (_i === 2) {\n const value = Number.MAX_SAFE_INTEGER - position;\n const element = {\n position,\n value,\n };\n\n newSmallValues.push(element);\n newLargeValues.push(element);\n valueToPositionObject[value] = position;\n }\n });\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n // rebuildHeaps() {\n // const valueToPositionObject = {};\n // const newSmallValues = new Heap<HeapItem>([], this._smallerComparator);\n // const newLargeValues = new Heap<HeapItem>([], this._greaterComparator);\n\n // const keys = Object.keys(this._positionToValueObject);\n // for (let position = 0; position < keys.length; position++) {\n // const value = this._positionToValueObject[position];\n // if (value !== undefined) {\n // const element = {\n // position,\n // value,\n // };\n // valueToPositionObject[value] = position;\n // newSmallValues.push(element);\n // newLargeValues.push(element);\n // }\n // }\n\n // this._smallValues = newSmallValues;\n // this._largeValues = newLargeValues;\n // }\n\n _recreateHeaps() {\n const sourceHeap =\n this._smallValues.size() < this._largeValues.size()\n ? this._smallValues\n : this._largeValues;\n const newSmallValues = new Heap<HeapItem>(\n [], // Initial data in the heap\n this._smallerComparator\n );\n const newLargeValues = new Heap<HeapItem>(\n [], // Initial datat in the heap\n this._greaterComparator\n );\n while (!sourceHeap.empty()) {\n const element = sourceHeap.pop()!;\n // Push all still valid elements to new heaps\n if (\n this._metaToPositionMap.get(this._indexToMetaMap.get(element.value)) !=\n null\n ) {\n newSmallValues.push(element);\n newLargeValues.push(element);\n }\n }\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n _cleanHeap(heap: Heap<HeapItem>) {\n while (\n !heap.empty() &&\n this._metaToPositionMap.get(\n this._indexToMetaMap.get(heap.peek()!.value)\n ) == null\n ) {\n heap.pop();\n }\n }\n\n _smallerComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value < rhs.value;\n }\n\n _greaterComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value > rhs.value;\n }\n}\n\nexport default IntegerBufferSet;\n"],"names":["defaultMetaExtractor","value","defaultBufferSize","IntegerBufferSet","props","_props","_props$name","name","indexExtractor","_props$bufferSize","bufferSize","_props$metaExtractor","metaExtractor","_metaExtractor","_indexExtractor","_name","_indexToMetaMap","Map","_metaToPositionMap","_positionToMetaList","_metaToIndexMap","_onTheFlyIndices","_size","_bufferSize","_smallValues","Heap","_smallerComparator","_largeValues","_greaterComparator","getNewPositionForIndex","bind","getIndexPosition","getSize","replacePositionInFliedIndices","replaceFurthestIndexPosition","_isOnTheFlyFullReturnHook","returnHook","setIsOnTheFlyFull","_loopMS","Date","now","_lastUpdatedMS","_proto","prototype","val","data","filter","v","_isOnTheFlyFull","length","getOnTheFlyUncriticalPosition","safeRange","startIndex","endIndex","idx","meta","metaIndex","get","isClamped","initialize","smallValues","largeValues","valueToPositionObject","getIndexMeta","index","getMetaIndex","setMetaIndex","set","deleteMetaIndex","replaceMetaToIndexMap","newMetaToIndexMap","undefined","process","env","NODE_ENV","invariant","newPosition","_pushToHeaps","_setMetaIndex","_setMetaPosition","getMinValue","_this$_smallValues$pe","peek","getMaxValue","_this$_largeValues$pe","setValuePosition","position","findPositionMeta","_iterator","_createForOfIteratorHelperLoose","_step","done","_step$value","pos","rebuildHeapsWithMeta","metaToPositionMap","_this$initialize","_iterator2","_step2","_step2$value","token","push","setPositionIndex","originalPosition","metaToReplace","getMetaPosition","newIndex","getFliedPosition","getPosition","prepare","prevMetaPosition","onTheFlyPositionMeta","positionToReplace","_replaceFurthestIndexPosition","isBufferFull","prevIndexMeta","_cleanHeaps","empty","minValue","maxValue","indexToReplace","Math","abs","pop","replacedMeta","lowValue","highValue","shuffle","indices","Array","targetIndex","_arr","_available","indexToMetaMap","metaToIndexMap","_loop","currentIndex","currentMeta","_this","_i","findIndex","_ret","_this$initialize2","positionToMetaList","element","shift","recyclerKey","err","readyToStartNextLoop","getIndices","prevMetaOnPosition","prevMetaIndex","_cleanHeap","minHeapSize","min","size","maxHeapSize","max","_recreateHeaps","rebuildHeapsWithValues","arr","newSmallValues","newLargeValues","forEach","fill","Object","keys","map","key","Number","MAX_SAFE_INTEGER","sourceHeap","heap","lhs","rhs","_createClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,KAAK;EAAA,OAAKA,KAAK;AAAA;IAChCC,iBAAiB,GAAG;AAAG,IAmB9BC,gBAAgB;EAwBpB,SAAAA,iBAAYC;QAAAA;MAAAA,QAAqC,EAAE;;IACjD,IAAAC,MAAA,GAKID,KAAK;MAAAE,WAAA,GAAAD,MAAA,CAJPE,IAAI;MAAJA,IAAI,GAAAD,WAAA,cAAG,gBAAgB,GAAAA,WAAA;MACvBE,cAAc,GAAAH,MAAA,CAAdG,cAAc;MAAAC,iBAAA,GAAAJ,MAAA,CACdK,UAAU;MAAVA,UAAU,GAAAD,iBAAA,cAAGP,iBAAiB,GAAAO,iBAAA;MAAAE,oBAAA,GAAAN,MAAA,CAC9BO,aAAa;MAAbA,aAAa,GAAAD,oBAAA,cAAGX,oBAAoB,GAAAW,oBAAA;IAEtC,IAAI,CAACE,cAAc,GAAGD,aAAa;IACnC,IAAI,CAACE,eAAe,GAAGN,cAAc;IAErC,IAAI,CAACO,KAAK,GAAGR,IAAI;IAMjB,IAAI,CAACS,eAAe,GAAG,IAAIC,GAAG,EAAE;IAChC,IAAI,CAACC,kBAAkB,GAAG,IAAID,GAAG,EAAE;IACnC,IAAI,CAACE,mBAAmB,GAAG,EAAE;IAC7B,IAAI,CAACC,eAAe,GAAG,IAAIH,GAAG,EAAE;IAChC,IAAI,CAACI,gBAAgB,GAAG,EAAE;IAE1B,IAAI,CAACC,KAAK,GAAG,CAAC;IACd,IAAI,CAACC,WAAW,GAAGb,UAAU;IAE7B,IAAI,CAACc,YAAY,GAAG,IAAIC,IAAI,CAAC,EAAE,EAAE,IAAI,CAACC,kBAAkB,CAAC;IACzD,IAAI,CAACC,YAAY,GAAG,IAAIF,IAAI,CAAC,EAAE,EAAE,IAAI,CAACG,kBAAkB,CAAC;IAEzD,IAAI,CAACC,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACC,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACE,OAAO,GAAG,IAAI,CAACA,OAAO,CAACF,IAAI,CAAC,IAAI,CAAC;IACtC,IAAI,CAACG,6BAA6B,GAChC,IAAI,CAACA,6BAA6B,CAACH,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI,CAACI,4BAA4B,GAC/B,IAAI,CAACA,4BAA4B,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACK,yBAAyB,GAAGC,UAAU,CACzC,IAAI,CAACC,iBAAiB,CAACP,IAAI,CAAC,IAAI,CAAC,CAClC;IAED,IAAI,CAACQ,OAAO,GAAGC,IAAI,CAACC,GAAG,EAAE;IACzB,IAAI,CAACC,cAAc,GAAG,IAAI,CAACH,OAAO;;EACnC,IAAAI,MAAA,GAAAvC,gBAAA,CAAAwC,SAAA;EAAAD,MAAA,CAEDV,OAAO,GAAP,SAAAA;IACE,OAAO,IAAI,CAACV,KAAK;GAClB;EAAAoB,MAAA,CAMDL,iBAAiB,GAAjB,SAAAA,kBAAkBO,GAAQ;IACxB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACf,IAAMC,IAAI,GAAG,IAAI,CAACxB,gBAAgB,CAACyB,MAAM,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC;QAAC;MACnD,IAAI,CAACC,eAAe,GAAGH,IAAI,CAACI,MAAM,KAAK,IAAI,CAAC1B,WAAW;;GAE1D;EAAAmB,MAAA,CAMDQ,6BAA6B,GAA7B,SAAAA,8BAA8BC,SAAoB;IAChD,IAAQC,UAAU,GAAeD,SAAS,CAAlCC,UAAU;MAAEC,QAAQ,GAAKF,SAAS,CAAtBE,QAAQ;IAC5B,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG,IAAI,CAACjC,gBAAgB,CAAC4B,MAAM,EAAEK,GAAG,EAAE,EAAE;MAC3D,IAAMC,IAAI,GAAG,IAAI,CAAClC,gBAAgB,CAACiC,GAAG,CAAC;MACvC,IAAME,SAAS,GAAG,IAAI,CAACpC,eAAe,CAACqC,GAAG,CAACF,IAAI,CAAC;MAChD,IAAI,CAACG,SAAS,CAACN,UAAU,EAAEI,SAAS,EAAEH,QAAQ,CAAC,EAAE;QAC/C,OAAOC,GAAG;;;IAGd,OAAO,IAAI;GACZ;EAAAZ,MAAA,CAEDiB,UAAU,GAAV,SAAAA;IACE,OAAO;MACLC,WAAW,EAAE,IAAInC,IAAI,CAAC,EAAE,EAAE,IAAI,CAACC,kBAAkB,CAAC;MAClDmC,WAAW,EAAE,IAAIpC,IAAI,CAAC,EAAE,EAAE,IAAI,CAACG,kBAAkB,CAAC;MAClDkC,qBAAqB,EAAE;KACxB;GACF;EAAApB,MAAA,CAEDqB,YAAY,GAAZ,SAAAA,aAAaC,KAAa;IACxB,OAAO,IAAI,CAACnD,cAAc,CAACmD,KAAK,CAAC;GAClC;EAAAtB,MAAA,CAEDuB,YAAY,GAAZ,SAAAA,aAAaV,IAAU;IACrB,IAAI,IAAI,CAACzC,eAAe,EAAE,OAAO,IAAI,CAACA,eAAe,CAACyC,IAAI,CAAC;IAC3D,OAAO,IAAI,CAACnC,eAAe,CAACqC,GAAG,CAACF,IAAI,CAAC;GACtC;EAAAb,MAAA,CAEDwB,YAAY,GAAZ,SAAAA,aAAaX,IAAU,EAAES,KAAa;IACpC,IAAI,CAAC,IAAI,CAAClD,eAAe,EAAE;MACzB,OAAO,IAAI,CAACM,eAAe,CAAC+C,GAAG,CAACZ,IAAI,EAAES,KAAK,CAAC;;IAE9C,OAAO,KAAK;GACb;EAAAtB,MAAA,CAED0B,eAAe,GAAf,SAAAA,gBAAgBb,IAAU;IACxB,OAAO,IAAI,CAACnC,eAAe,UAAO,CAACmC,IAAI,CAAC;GACzC;EAAAb,MAAA,CAED2B,qBAAqB,GAArB,SAAAA,sBAAsBC,iBAAuC;IAC3D,IAAI,CAAC,IAAI,CAACxD,eAAe,EAAE;MACzB,OAAQ,IAAI,CAACM,eAAe,GAAGkD,iBAAiB;;IAElD,OAAO,KAAK;GACb;EAAA5B,MAAA,CAEDX,gBAAgB,GAAhB,SAAAA,iBAAiBiC,KAAa;IAC5B,OAAO,IAAI,CAACC,YAAY,CAAC,IAAI,CAACF,YAAY,CAACC,KAAK,CAAC,CAAC;GACnD;EAAAtB,MAAA,CAEDb,sBAAsB,GAAtB,SAAAA,uBAAuBmC,KAAa;IAClC,IAAMT,IAAI,GAAG,IAAI,CAACQ,YAAY,CAACC,KAAK,CAAC;IACrC,EACE,IAAI,CAAC9C,kBAAkB,CAACuC,GAAG,CAACF,IAAI,CAAC,KAAKgB,SAAS,IAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADjDC,SAAS,QAEP,0EAA0E,IAF5EA,SAAS;IAIT,IAAMC,WAAW,GAAG,IAAI,CAACzD,mBAAmB,CAAC8B,MAAM;IAEnD,IAAI,CAAC4B,YAAY,CAACD,WAAW,EAAEZ,KAAK,CAAC;IACrC,IAAI,CAACc,aAAa,CAACvB,IAAI,EAAES,KAAK,CAAC;IAC/B,IAAI,CAACe,gBAAgB,CAACxB,IAAI,EAAEqB,WAAW,CAAC;IAExC,OAAOA,WAAW;GACnB;EAAAlC,MAAA,CAEDsC,WAAW,GAAX,SAAAA;;IACE,QAAAC,qBAAA,GAAO,IAAI,CAACzD,YAAY,CAAC0D,IAAI,EAAE,qBAAxBD,qBAAA,CAA0BhF,KAAK;GACvC;EAAAyC,MAAA,CAEDyC,WAAW,GAAX,SAAAA;;IACE,QAAAC,qBAAA,GAAO,IAAI,CAACzD,YAAY,CAACuD,IAAI,EAAE,qBAAxBE,qBAAA,CAA0BnF,KAAK;GACvC;EAAAyC,MAAA,CAKD2C,gBAAgB,GAAhB,SAAAA,iBAAiBpF,KAAa,EAAEqF,QAAgB,IAAI;EAAA5C,MAAA,CAEpD6C,gBAAgB,GAAhB,SAAAA,iBAAiBD,QAAgB;IAC/B,SAAAE,SAAA,GAAAC,+BAAA,CAA0B,IAAI,CAACvE,kBAAkB,GAAAwE,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;MAAA,IAAAC,WAAA,GAAAF,KAAA,CAAAzF,KAAA;QAAvCsD,IAAI,GAAAqC,WAAA;QAAEC,GAAG,GAAAD,WAAA;MACnB,IAAIC,GAAG,KAAKP,QAAQ,EAAE,OAAO/B,IAAI;;IAEnC,OAAO,IAAI;GACZ;EAAAb,MAAA,CAEDoD,oBAAoB,GAApB,SAAAA,qBAAqBC,iBAA0C;IAC7D,IAAAC,gBAAA,GAAqC,IAAI,CAACrC,UAAU,EAAE;MAA9CC,WAAW,GAAAoC,gBAAA,CAAXpC,WAAW;MAAEC,WAAW,GAAAmC,gBAAA,CAAXnC,WAAW;IAEhC,SAAAoC,UAAA,GAAAR,+BAAA,CAA+BM,iBAAiB,GAAAG,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAN,IAAA,GAAE;MAAA,IAAAQ,YAAA,GAAAD,MAAA,CAAAjG,KAAA;QAAtCsD,IAAI,GAAA4C,YAAA;QAAEb,QAAQ,GAAAa,YAAA;MACxB,IAAMnC,KAAK,GAAG,IAAI,CAACC,YAAY,CAACV,IAAI,CAAC;MACrC,IAAM6C,KAAK,GAAG;QAAEpC,KAAK,EAALA,KAAK;QAAEsB,QAAQ,EAARA;OAAU;MACjC1B,WAAW,CAACyC,IAAI,CAACD,KAAK,CAAC;MACvBvC,WAAW,CAACwC,IAAI,CAACD,KAAK,CAAC;;IAGzB,IAAI,CAAC5E,YAAY,GAAGoC,WAAW;IAC/B,IAAI,CAACjC,YAAY,GAAGkC,WAAW;GAChC;EAAAnB,MAAA,CASD4D,gBAAgB,GAAhB,SAAAA,iBAAiBhB,QAAgB,EAAEtB,KAAa;IAC9C,IAAMT,IAAI,GAAG,IAAI,CAAC1C,cAAc,CAACmD,KAAK,CAAC;IACvC,IAAMuC,gBAAgB,GAAG,IAAI,CAACrF,kBAAkB,CAACuC,GAAG,CAACF,IAAI,CAAC;IAG1D,IAAIgD,gBAAgB,KAAKhC,SAAS,EAAE;MAClC,IAAIgC,gBAAgB,KAAKjB,QAAQ,EAAE,OAAO,IAAI;MAC9C,IAAI,CAAClB,eAAe,CAACb,IAAI,CAAC;;IAG5B,IAAMiD,aAAa,GAAG,IAAI,CAACjB,gBAAgB,CAACD,QAAQ,CAAC;IACrD,IAAIkB,aAAa,EAAE,IAAI,CAACtF,kBAAkB,UAAO,CAACsF,aAAa,CAAC;IAChE,IAAI,CAACtF,kBAAkB,CAACiD,GAAG,CAACZ,IAAI,EAAE+B,QAAQ,CAAC;IAE3C,IAAI,CAACQ,oBAAoB,CAAC,IAAI,CAAC5E,kBAAkB,CAAC;IAClD,OAAO,IAAI;GACZ;EAAAwB,MAAA,CAED+D,eAAe,GAAf,SAAAA,gBAAgBlD,IAAU;IACxB,OAAO,IAAI,CAACrC,kBAAkB,CAACuC,GAAG,CAACF,IAAI,CAAC;GACzC;EAAAb,MAAA,CA0DDT,6BAA6B,GAA7B,SAAAA,8BAA8ByE,QAAgB,EAAEvD,SAAoB;IAClE,IAAQC,UAAU,GAAeD,SAAS,CAAlCC,UAAU;MAAEC,QAAQ,GAAKF,SAAS,CAAtBE,QAAQ;IAE5B,IAAI,IAAI,CAACL,eAAe,EAAE;MAExB,IAAI,CAACU,SAAS,CAACN,UAAU,EAAEsD,QAAQ,EAAErD,QAAQ,CAAC,EAAE;QAC9C,OAAO,IAAI;;MAIb,IAAMwC,GAAG,GAAG,IAAI,CAAC3C,6BAA6B,CAACC,SAAS,CAAC;MACzD,IAAI0C,GAAG,IAAI,IAAI,EAAE,OAAOA,GAAG;;IAE7B,OAAO,IAAI;GACZ;EAAAnD,MAAA,CAEDiE,gBAAgB,GAAhB,SAAAA,iBAAiBD,QAAgB,EAAEvD,SAAoB;IACrD,IAAM0C,GAAG,GAAG,IAAI,CAAC5D,6BAA6B,CAACyE,QAAQ,EAAEvD,SAAS,CAAC;IACnE,IAAI0C,GAAG,IAAI,IAAI,EAAE;MACf,IAAMtC,IAAI,GAAG,IAAI,CAACQ,YAAY,CAAC2C,QAAQ,CAAC;MACxC,IAAI,CAACrF,gBAAgB,CAACwE,GAAG,CAAC,GAAGtC,IAAI;MACjC,IAAI,CAACuB,aAAa,CAACvB,IAAI,EAAEmD,QAAQ,CAAC;MAClC,OAAO,IAAI,CAACvE,yBAAyB,CAAC0D,GAAG,CAAC;;IAE5C,OAAO,IAAI;GACZ;EAAAnD,MAAA,CAWDkE,WAAW,GAAX,SAAAA,YAAYF,QAAgB,EAAEvD,SAAqB;IACjD,IAAI,CAAC0D,OAAO,EAAE;IACd,IAAMtD,IAAI,GAAG,IAAI,CAACQ,YAAY,CAAC2C,QAAQ,CAAC;IACxC,IAAMI,gBAAgB,GAAG,IAAI,CAAC5F,kBAAkB,CAACuC,GAAG,CAACF,IAAI,CAAC;IAE1D,IAAIuD,gBAAgB,KAAKvC,SAAS,EAAE;MAClC,IAAMwC,oBAAoB,GAAG,IAAI,CAAC1F,gBAAgB,CAACyF,gBAAgB,CAAC;MAEpE,IAAIC,oBAAoB,EAAE;QAExB,IAAIA,oBAAoB,KAAKxD,IAAI,EAAE;UACjC,OAAOuD,gBAAgB;;QAEzB,IAAIE,kBAAiB,GAAG,IAAI,CAACC,6BAA6B,CACxDP,QAAQ,EACRvD,SAAS,CACV;QACD,IAAI,IAAI,CAACH,eAAe,EACtB,OAAO,IAAI,CAAC2D,gBAAgB,CAACD,QAAQ,EAAEvD,SAAS,CAAC;QAEnD,OAAO,IAAI,CAAC9B,gBAAgB,CAAC2F,kBAAiB,CAAC,EAAE;UAC/CA,kBAAiB,GAAG,IAAI,CAACC,6BAA6B,CACpDP,QAAQ,EACRvD,SAAS,CACV;;QAGH,IAAI6D,kBAAiB,IAAI,IAAI,EAAE;UAC7B,IAAI,CAAClC,aAAa,CAACvB,IAAI,EAAEmD,QAAQ,CAAC;UAClC,IAAI,CAACrF,gBAAgB,CAAC2F,kBAAiB,CAAC,GAAGD,oBAAoB;UAC/D,OAAO,IAAI,CAAC5E,yBAAyB,CAAC6E,kBAAiB,CAAC;;;MAG5D,IAAI,CAAC3F,gBAAgB,CAACyF,gBAAgB,CAAC,GAAGvD,IAAI;MAC9C,OAAO,IAAI,CAACpB,yBAAyB,CAAC2E,gBAAgB,CAAC;;IAIzD,IAAI,CAAC,IAAI,CAACI,YAAY,EACpB,OAAO,IAAI,CAAC/E,yBAAyB,CACnC,IAAI,CAACN,sBAAsB,CAAC6E,QAAQ,CAAC,CACtC;IAGH,IAAI,IAAI,CAAC1D,eAAe,EAAE,OAAO,IAAI,CAAC2D,gBAAgB,CAACD,QAAQ,EAAEvD,SAAS,CAAC;IAE3E,IAAI6D,iBAAiB;IACrB,IAAMG,aAAa,GAAG,IAAI,CAACnG,eAAe,CAACyC,GAAG,CAACiD,QAAQ,CAAC;IAOxD,IAAI,CAACS,aAAa,EAAE;MAClB,IAAI,CAACC,WAAW,EAAE;MAClBJ,iBAAiB,GAAG,IAAI,CAACC,6BAA6B,CACpDP,QAAQ,EACRvD,SAAS,CACV;KACF,MAAM;MACL6D,iBAAiB,GAAG,IAAI,CAAC9F,kBAAkB,CAACuC,GAAG,CAAC0D,aAAa,CAAC;;IAGhE,IAAI,CAAC9F,gBAAgB,CAAC2F,iBAAiB,CAAC,GAAGzD,IAAI;IAC/C,IAAI,CAACuB,aAAa,CAACvB,IAAI,EAAEmD,QAAQ,CAAC;IAClC,IAAI,CAAC3B,gBAAgB,CAACxB,IAAI,EAAEyD,iBAAiB,CAAC;IAI9C,OAAO,IAAI,CAAC7E,yBAAyB,CAAC6E,iBAAiB,CAAC;GACzD;EAAAtE,MAAA,CAEDR,4BAA4B,GAA5B,SAAAA,6BACEwE,QAAgB,EAChBvD,SAGC;IAED,IAAI,CAAC,IAAI,CAAC+D,YAAY,EAAE;MACtB,OAAO,IAAI,CAAC/E,yBAAyB,CACnC,IAAI,CAACN,sBAAsB,CAAC6E,QAAQ,CAAC,CACtC;;IAGH,OAAO,IAAI,CAACO,6BAA6B,CAACP,QAAQ,EAAEvD,SAAS,CAAC;GAC/D;EAAAT,MAAA,CAEDuE,6BAA6B,GAA7B,SAAAA,8BACEP,QAAgB,EAChBvD,SAGC;IAED,IAAI,IAAI,CAACxB,YAAY,CAAC0F,KAAK,EAAE,IAAI,IAAI,CAAC7F,YAAY,CAAC6F,KAAK,EAAE,EAAE;MAC1D,OAAO,IAAI,CAAClF,yBAAyB,CACnC,IAAI,CAACN,sBAAsB,CAAC6E,QAAQ,CAAC,CACtC;;IAGH,IAAMY,QAAQ,GAAG,IAAI,CAAC9F,YAAY,CAAC0D,IAAI,EAAG,CAACjF,KAAK;IAChD,IAAMsH,QAAQ,GAAG,IAAI,CAAC5F,YAAY,CAACuD,IAAI,EAAG,CAACjF,KAAK;IAGhD,IAAIuH,cAAc;IAElB,IAAI,CAACrE,SAAS,EAAE;MAEd,IAAIsE,IAAI,CAACC,GAAG,CAAChB,QAAQ,GAAGY,QAAQ,CAAC,GAAGG,IAAI,CAACC,GAAG,CAAChB,QAAQ,GAAGa,QAAQ,CAAC,EAAE;QACjEC,cAAc,GAAGF,QAAQ;QACzB,IAAI,CAAC9F,YAAY,CAACmG,GAAG,EAAE;OACxB,MAAM;QACLH,cAAc,GAAGD,QAAQ;QACzB,IAAI,CAAC5F,YAAY,CAACgG,GAAG,EAAE;;MAEzB,IAAMC,aAAY,GAAG,IAAI,CAAC5G,eAAe,CAACyC,GAAG,CAAC+D,cAAc,CAAC;MAC7D,IAAMlC,SAAQ,GAAG,IAAI,CAACpE,kBAAkB,CAACuC,GAAG,CAACmE,aAAY,CAAC;MAE1D,OAAOtC,SAAQ;;IAGjB,IAAoBuC,QAAQ,GAA0B1E,SAAS,CAAvDC,UAAU;MAAsB0E,SAAS,GAAK3E,SAAS,CAAjCE,QAAQ;IAGtC,IACEK,SAAS,CAACmE,QAAQ,EAAEP,QAAQ,EAAEQ,SAAS,CAAC,IACxCpE,SAAS,CAACmE,QAAQ,EAAEN,QAAQ,EAAEO,SAAS,CAAC,EACxC;MACA,OAAO,IAAI;KACZ,MAAM,IACLpE,SAAS,CAACmE,QAAQ,EAAEP,QAAQ,EAAEQ,SAAS,CAAC,IACxC,CAACpE,SAAS,CAACmE,QAAQ,EAAEN,QAAQ,EAAEO,SAAS,CAAC,EACzC;MACAN,cAAc,GAAGD,QAAQ;MACzB,IAAI,CAAC5F,YAAY,CAACgG,GAAG,EAAE;KACxB,MAAM,IACL,CAACjE,SAAS,CAACmE,QAAQ,EAAEP,QAAQ,EAAEQ,SAAS,CAAC,IACzCpE,SAAS,CAACmE,QAAQ,EAAEN,QAAQ,EAAEO,SAAS,CAAC,EACxC;MACAN,cAAc,GAAGF,QAAQ;MACzB,IAAI,CAAC9F,YAAY,CAACmG,GAAG,EAAE;KACxB,MAAM,IAAIE,QAAQ,GAAGP,QAAQ,GAAGC,QAAQ,GAAGO,SAAS,EAAE;MAErDN,cAAc,GAAGF,QAAQ;MACzB,IAAI,CAAC9F,YAAY,CAACmG,GAAG,EAAE;KACxB,MAAM;MACLH,cAAc,GAAGD,QAAQ;MACzB,IAAI,CAAC5F,YAAY,CAACgG,GAAG,EAAE;;IAGzB,IAAMC,YAAY,GAAG,IAAI,CAAC5G,eAAe,CAACyC,GAAG,CAAC+D,cAAc,CAAC;IAC7D,IAAMlC,QAAQ,GAAG,IAAI,CAACpE,kBAAkB,CAACuC,GAAG,CAACmE,YAAY,CAAC;IAE1D,OAAOtC,QAAQ;GAChB;EAAA5C,MAAA,CAEDqF,OAAO,GAAP,SAAAA;;IACE,IAAMC,OAAO,GAAG,IAAIC,KAAK,CAAC,IAAI,CAACvH,UAAU,CAAC;IAC1C,KAAK,IAAI4C,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG0E,OAAO,CAAC/E,MAAM,EAAEK,GAAG,EAAE,EAAE;MAC7C,IAAMC,IAAI,GAAG,IAAI,CAAClC,gBAAgB,CAACiC,GAAG,CAAC,IAAI,IAAI,CAACnC,mBAAmB,CAACmC,GAAG,CAAC;MACxE,IAAM4E,WAAW,GAAG,IAAI,CAACjE,YAAY,CAACV,IAAI,CAAC;MAC3CyE,OAAO,CAAC1E,GAAG,CAAC,GAAG4E,WAAW;;IAS5B,IAAMC,IAAI,GAAG,IAAIF,KAAK,CAACD,OAAO,CAAC/E,MAAM,CAAC;IACtC,IAAMmF,UAAU,GAAG,EAAE;IACrB,IAAMC,cAAc,GAAG,IAAIpH,GAAG,EAAE;IAChC,IAAMqH,cAAc,GAAG,IAAIrH,GAAG,EAAE;IAChC,IAAM8E,iBAAiB,GAAG,IAAI9E,GAAG,EAAE;IAAC,IAAAsH,KAAA,YAAAA,QACW;MAC7C,IAAMC,YAAY,GAAGR,OAAO,CAAC1E,IAAG,CAAC;MACjC,IAAMmF,WAAW,GAAGC,KAAI,CAAC7H,cAAc,CAAC2H,YAAY,CAAC;MACrD,IAAIC,WAAW,IAAI,IAAI;MAEvBJ,cAAc,CAAClE,GAAG,CAACqE,YAAY,EAAEC,WAAW,CAAC;MAC7CH,cAAc,CAACnE,GAAG,CAACsE,WAAW,EAAED,YAAY,CAAC;MAE7C,IAAIC,WAAW,KAAKC,KAAI,CAACvH,mBAAmB,CAACmC,IAAG,CAAC,EAAE;QACjD6E,IAAI,CAAC7E,IAAG,CAAC,GAAGmF,WAAW;QAAC;;MAG1B,IAAME,EAAE,GAAGD,KAAI,CAACvH,mBAAmB,CAACyH,SAAS,CAAC,UAAC7F,CAAC;QAAA,OAAKA,CAAC,KAAK0F,WAAW;QAAC;MACvE,IAAIE,EAAE,KAAK,CAAC,CAAC,EAAE;QACbR,IAAI,CAACQ,EAAE,CAAC,GAAGF,WAAW;QAAC;;MAIzBL,UAAU,CAAC/B,IAAI,CAACoC,WAAW,CAAC;KAC7B;IAnBD,KAAK,IAAInF,IAAG,GAAG,CAAC,EAAEA,IAAG,GAAG0E,OAAO,CAAC/E,MAAM,EAAEK,IAAG,EAAE;MAAA,IAAAuF,IAAA,GAAAN,KAAA;MAAA,IAAAM,IAAA,iBAGlB;;IAkB3B,IAAAC,iBAAA,GAAqC,IAAI,CAACnF,UAAU,EAAE;MAA9CC,WAAW,GAAAkF,iBAAA,CAAXlF,WAAW;MAAEC,WAAW,GAAAiF,iBAAA,CAAXjF,WAAW;IAChC,IAAMkF,kBAAkB,GAAG,EAAE;IAE7B,KAAK,IAAIzD,QAAQ,GAAG,CAAC,EAAEA,QAAQ,GAAG0C,OAAO,CAAC/E,MAAM,EAAEqC,QAAQ,EAAE,EAAE;MAC5D,IAAMrF,KAAK,GAAG+H,OAAO,CAAC1C,QAAQ,CAAC;MAC/B,IAAI6C,IAAI,CAAC7C,QAAQ,CAAC,IAAI,IAAI,EAAE;QAC1ByD,kBAAkB,CAACzD,QAAQ,CAAC,GAAG6C,IAAI,CAAC7C,QAAQ,CAAC;QAC7CS,iBAAiB,CAAC5B,GAAG,CAACgE,IAAI,CAAC7C,QAAQ,CAAC,EAAEA,QAAQ,CAAC;QAC/C,IAAM0D,OAAO,GAAG;UAAE1D,QAAQ,EAARA,QAAQ;UAAErF,KAAK,EAALA;SAAO;QACnC2D,WAAW,CAACyC,IAAI,CAAC2C,OAAO,CAAC;QACzBnF,WAAW,CAACwC,IAAI,CAAC2C,OAAO,CAAC;QACzB;;MAEF,IAAMzF,KAAI,GAAG6E,UAAU,CAACa,KAAK,EAAE;MAC/B,IAAI1F,KAAI,IAAI,IAAI,EAAE;QAChBwF,kBAAkB,CAACzD,QAAQ,CAAC,GAAG/B,KAAI;QACnCwC,iBAAiB,CAAC5B,GAAG,CAACZ,KAAI,EAAE+B,QAAQ,CAAC;QAErC,IAAM0D,QAAO,GAAG;UAAE1D,QAAQ,EAARA,QAAQ;UAAErF,KAAK,EAALA;SAAO;QACnC2D,WAAW,CAACyC,IAAI,CAAC2C,QAAO,CAAC;QACzBnF,WAAW,CAACwC,IAAI,CAAC2C,QAAO,CAAC;;;IAM7B,IAAI,CAAC7H,mBAAmB,GAAG4H,kBAAkB;IAC7C,IAAI,CAACvH,YAAY,GAAGoC,WAAW;IAC/B,IAAI,CAACjC,YAAY,GAAGkC,WAAW;IAC/B,IAAI,CAAC7C,eAAe,GAAGqH,cAAc;IACrC,IAAI,CAAChE,qBAAqB,CAACiE,cAAc,CAAC;IAC1C,IAAI,CAACpH,kBAAkB,GAAG6E,iBAAiB;IAC3C,IAAI,CAAC1E,gBAAgB,GAAG,EAAE;IAE1B,IAAI;MACF,IAAM2G,QAAO,GAAG,IAAIC,KAAK,CAAC,IAAI,CAACvH,UAAU,CAAC;MAC1C,KAAK,IAAI4C,KAAG,GAAG,CAAC,EAAEA,KAAG,GAAG0E,QAAO,CAAC/E,MAAM,EAAEK,KAAG,EAAE,EAAE;QAC7C,IAAMC,MAAI,GACR,IAAI,CAAClC,gBAAgB,CAACiC,KAAG,CAAC,IAAI,IAAI,CAACnC,mBAAmB,CAACmC,KAAG,CAAC;QAC7D,IAAM4E,YAAW,GAAG,IAAI,CAACjE,YAAY,CAACV,MAAI,CAAC;QAC3C,IAAIA,MAAI,IAAI,IAAI,EAAE;UAChByE,QAAO,CAAC1E,KAAG,CAAC,GAAG;YACbC,IAAI,EAAJA,MAAI;YACJ2E,WAAW,EAAXA,YAAW;YACXgB,WAAW,EAAK,IAAI,CAACnI,KAAK,SAAIuC;WAC/B;;;MAGL,OAAO0E,QAAO;KACf,CAAC,OAAOmB,GAAG,EAAE;MACZ,IAAI,CAACC,oBAAoB,EAAE;MAC3B,OAAO,IAAI,CAACjI,mBAAmB;;GAElC;EAAAuB,MAAA,CAGD2G,UAAU,GAAV,SAAAA;IACE,IAAI;MACF,IAAMrB,OAAO,GAAG,IAAIC,KAAK,CAAC,IAAI,CAACvH,UAAU,CAAC;MAC1C,KAAK,IAAI4C,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG0E,OAAO,CAAC/E,MAAM,EAAEK,GAAG,EAAE,EAAE;QAC7C,IAAMC,IAAI,GACR,IAAI,CAAClC,gBAAgB,CAACiC,GAAG,CAAC,IAAI,IAAI,CAACnC,mBAAmB,CAACmC,GAAG,CAAC;QAC7D,IAAM4E,WAAW,GAAG,IAAI,CAACjE,YAAY,CAACV,IAAI,CAAC;QAE3C,IAAIA,IAAI,KAAK,IAAI,CAACQ,YAAY,CAACmE,WAAW,CAAC,EAAE;UAC3C,OAAO,IAAI,CAACH,OAAO,EAAE;;QAEvB,IAAIxE,IAAI,IAAI,IAAI,EAAE;UAChByE,OAAO,CAAC1E,GAAG,CAAC,GAAG;YACbC,IAAI,EAAJA,IAAI;YACJ2E,WAAW,EAAXA,WAAW;YACXgB,WAAW,EAAK,IAAI,CAACnI,KAAK,SAAIuC;WAC/B;;;MAIL,IAAI,CAACjC,gBAAgB,GAAG,EAAE;MAE1B,OAAO2G,OAAO;KACf,CAAC,OAAOmB,GAAG,EAAE;MACZ,IAAI,CAACC,oBAAoB,EAAE;MAC3B,OAAO,IAAI,CAACjI,mBAAmB;;GAElC;EAAAuB,MAAA,CAEDmC,YAAY,GAAZ,SAAAA,aAAaS,QAAgB,EAAErF,KAAa;IAC1C,IAAM+I,OAAO,GAAG;MAAE1D,QAAQ,EAARA,QAAQ;MAAErF,KAAK,EAALA;KAAO;IAEnC,IAAI,CAACuB,YAAY,CAAC6E,IAAI,CAAC2C,OAAO,CAAC;IAC/B,IAAI,CAACrH,YAAY,CAAC0E,IAAI,CAAC2C,OAAO,CAAC;GAChC;EAAAtG,MAAA,CAEDqC,gBAAgB,GAAhB,SAAAA,iBAAiBxB,IAAU,EAAE+B,QAAgB;IAC3C,IAAMgE,kBAAkB,GAAG,IAAI,CAACnI,mBAAmB,CAACmE,QAAQ,CAAC;IAC7D,IAAIgE,kBAAkB,EAAE,IAAI,CAACpI,kBAAkB,UAAO,CAACoI,kBAAkB,CAAC;IAC1E,IAAI,CAACnI,mBAAmB,CAACmE,QAAQ,CAAC,GAAG/B,IAAI;IACzC,IAAI,CAACrC,kBAAkB,CAACiD,GAAG,CAACZ,IAAI,EAAE+B,QAAQ,CAAC;GAC5C;EAAA5C,MAAA,CAQDoC,aAAa,GAAb,SAAAA,cAAcvB,IAAU,EAAES,KAAa;IACrC,IAAMuF,aAAa,GAAG,IAAI,CAACtF,YAAY,CAACV,IAAI,CAAC;IAC7C,IAAIgG,aAAa,KAAKhF,SAAS,EAAE;MAG/B,IAAI,CAACvD,eAAe,UAAO,CAACuI,aAAa,CAAC;;IAE5C,IAAI,CAACrF,YAAY,CAACX,IAAI,EAAES,KAAK,CAAC;IAC9B,IAAI,CAAChD,eAAe,CAACmD,GAAG,CAACH,KAAK,EAAET,IAAI,CAAC;IACrC,OAAO,KAAK;GACb;EAAAb,MAAA,CAED0G,oBAAoB,GAApB,SAAAA;IACE,IAAI,CAAC3G,cAAc,GAAGF,IAAI,CAACC,GAAG,EAAE;GACjC;EAAAE,MAAA,CAEDmE,OAAO,GAAP,SAAAA;IACE,IAAI,IAAI,CAACvE,OAAO,KAAK,IAAI,CAACG,cAAc,EAAE;IAC1C,IAAI,CAACH,OAAO,GAAG,IAAI,CAACG,cAAc;IAElC,IAAI,CAACpB,gBAAgB,GAAG,EAAE;IAC1B,IAAI,CAAC2B,eAAe,GAAG,KAAK;GAI7B;EAAAN,MAAA,CAED0E,WAAW,GAAX,SAAAA;IAGE,IAAI,CAACoC,UAAU,CAAC,IAAI,CAAChI,YAAY,CAAC;IAClC,IAAI,CAACgI,UAAU,CAAC,IAAI,CAAC7H,YAAY,CAAC;IAClC,IAAM8H,WAAW,GAAGhC,IAAI,CAACiC,GAAG,CAC1B,IAAI,CAAClI,YAAY,CAACmI,IAAI,EAAE,EACxB,IAAI,CAAChI,YAAY,CAACgI,IAAI,EAAE,CACzB;IACD,IAAMC,WAAW,GAAGnC,IAAI,CAACoC,GAAG,CAC1B,IAAI,CAACrI,YAAY,CAACmI,IAAI,EAAE,EACxB,IAAI,CAAChI,YAAY,CAACgI,IAAI,EAAE,CACzB;IACD,IAAIC,WAAW,GAAG,EAAE,GAAGH,WAAW,EAAE;MAGlC,IAAI,CAACK,cAAc,EAAE;;GAExB;EAAApH,MAAA,CAEDqH,sBAAsB,GAAtB,SAAAA,uBACEC,GAGE;IAEF,IAAMlG,qBAAqB,GAAG,EAAE;IAChC,IAAMmG,cAAc,GAAG,IAAIxI,IAAI,CAAW,EAAE,EAAE,IAAI,CAACC,kBAAkB,CAAC;IACtE,IAAMwI,cAAc,GAAG,IAAIzI,IAAI,CAAW,EAAE,EAAE,IAAI,CAACG,kBAAkB,CAAC;IAEtEoI,GAAG,CAACG,OAAO,CAAC,UAACnB,OAAO;MAClB,IAAQ1D,QAAQ,GAAY0D,OAAO,CAA3B1D,QAAQ;QAAErF,KAAK,GAAK+I,OAAO,CAAjB/I,KAAK;MACvB,IAAIA,KAAK,KAAKsE,SAAS,EAAE;QACvB,IAAMyE,SAAO,GAAG;UACd1D,QAAQ,EAARA,QAAQ;UACRrF,KAAK,EAALA;SACD;QACDgK,cAAc,CAAC5D,IAAI,CAAC2C,SAAO,CAAC;QAC5BkB,cAAc,CAAC7D,IAAI,CAAC2C,SAAO,CAAC;QAC5BlF,qBAAqB,CAAC7D,KAAK,CAAC,GAAGqF,QAAQ;;KAE1C,CAAC;IACF,IAAM6C,IAAI,GAAG,IAAIF,KAAK,CAAC,IAAI,CAAC1G,WAAW,CAAC,CAAC6I,IAAI,CAAC,CAAC,CAAC;IAChDC,MAAM,CAACC,IAAI,CAACxG,qBAAqB,CAAC,CAACyG,GAAG,CACpC,UAACC,GAAG;MAAA,OAAMrC,IAAI,CAACrE,qBAAqB,CAAC0G,GAAG,CAAC,CAAC,GAAG,CAAC;KAAC,CAChD;IACDrC,IAAI,CAACgC,OAAO,CAAC,UAACxB,EAAE,EAAErD,QAAQ;MACxB,IAAIqD,EAAE,KAAK,CAAC,EAAE;QACZ,IAAM1I,KAAK,GAAGwK,MAAM,CAACC,gBAAgB,GAAGpF,QAAQ;QAChD,IAAM0D,OAAO,GAAG;UACd1D,QAAQ,EAARA,QAAQ;UACRrF,KAAK,EAALA;SACD;QAEDgK,cAAc,CAAC5D,IAAI,CAAC2C,OAAO,CAAC;QAC5BkB,cAAc,CAAC7D,IAAI,CAAC2C,OAAO,CAAC;QAC5BlF,qBAAqB,CAAC7D,KAAK,CAAC,GAAGqF,QAAQ;;KAE1C,CAAC;IACF,IAAI,CAAC9D,YAAY,GAAGyI,cAAc;IAClC,IAAI,CAACtI,YAAY,GAAGuI,cAAc;GACnC;EAAAxH,MAAA,CAyBDoH,cAAc,GAAd,SAAAA;IACE,IAAMa,UAAU,GACd,IAAI,CAACnJ,YAAY,CAACmI,IAAI,EAAE,GAAG,IAAI,CAAChI,YAAY,CAACgI,IAAI,EAAE,GAC/C,IAAI,CAACnI,YAAY,GACjB,IAAI,CAACG,YAAY;IACvB,IAAMsI,cAAc,GAAG,IAAIxI,IAAI,CAC7B,EAAE,EACF,IAAI,CAACC,kBAAkB,CACxB;IACD,IAAMwI,cAAc,GAAG,IAAIzI,IAAI,CAC7B,EAAE,EACF,IAAI,CAACG,kBAAkB,CACxB;IACD,OAAO,CAAC+I,UAAU,CAACtD,KAAK,EAAE,EAAE;MAC1B,IAAM2B,OAAO,GAAG2B,UAAU,CAAChD,GAAG,EAAG;MAEjC,IACE,IAAI,CAACzG,kBAAkB,CAACuC,GAAG,CAAC,IAAI,CAACzC,eAAe,CAACyC,GAAG,CAACuF,OAAO,CAAC/I,KAAK,CAAC,CAAC,IACpE,IAAI,EACJ;QACAgK,cAAc,CAAC5D,IAAI,CAAC2C,OAAO,CAAC;QAC5BkB,cAAc,CAAC7D,IAAI,CAAC2C,OAAO,CAAC;;;IAGhC,IAAI,CAACxH,YAAY,GAAGyI,cAAc;IAClC,IAAI,CAACtI,YAAY,GAAGuI,cAAc;GACnC;EAAAxH,MAAA,CAED8G,UAAU,GAAV,SAAAA,WAAWoB,IAAoB;IAC7B,OACE,CAACA,IAAI,CAACvD,KAAK,EAAE,IACb,IAAI,CAACnG,kBAAkB,CAACuC,GAAG,CACzB,IAAI,CAACzC,eAAe,CAACyC,GAAG,CAACmH,IAAI,CAAC1F,IAAI,EAAG,CAACjF,KAAK,CAAC,CAC7C,IAAI,IAAI,EACT;MACA2K,IAAI,CAACjD,GAAG,EAAE;;GAEb;EAAAjF,MAAA,CAEDhB,kBAAkB,GAAlB,SAAAA,mBAAmBmJ,GAAa,EAAEC,GAAa;IAC7C,OAAOD,GAAG,CAAC5K,KAAK,GAAG6K,GAAG,CAAC7K,KAAK;GAC7B;EAAAyC,MAAA,CAEDd,kBAAkB,GAAlB,SAAAA,mBAAmBiJ,GAAa,EAAEC,GAAa;IAC7C,OAAOD,GAAG,CAAC5K,KAAK,GAAG6K,GAAG,CAAC7K,KAAK;GAC7B;EAAA8K,YAAA,CAAA5K,gBAAA;IAAAqK,GAAA;IAAA/G,GAAA,EAzrBD,SAAAA;MACE,OAAO,IAAI,CAAClC,WAAW;;;IACxBiJ,GAAA;IAAA/G,GAAA,EASD,SAAAA;MACE,OAAO,IAAI,CAACtC,mBAAmB,CAAC8B,MAAM,IAAI,IAAI,CAAC1B,WAAW;;;EAC3D,OAAApB,gBAAA;AAAA;;;;;"}
|
|
1
|
+
{"version":3,"file":"integer-buffer-set.esm.js","sources":["../src/index.ts"],"sourcesContent":["import Heap from '@x-oasis/heap';\nimport isClamped from '@x-oasis/is-clamped';\nimport invariant from '@x-oasis/invariant';\nimport returnHook, { ReturnHook } from '@x-oasis/return-hook';\nimport {\n HeapItem,\n SafeRange,\n MetaExtractor,\n IndexExtractor,\n IntegerBufferSetProps,\n MetaToIndexMap,\n MetaToPositionMap,\n IndexToMetaMap,\n} from './types';\n\nconst defaultMetaExtractor = (value) => value;\nexport const defaultBufferSize = 10;\n\n// !!!!! should do meta validation...meta should has an index...\n// value: original data `index` value\n// value(index) => meta => position\n// `index to getIndices, meta to find index`\n\n// Data structure that allows to store values and assign positions to them\n// in a way to minimize changing positions of stored values when new ones are\n// added or when some values are replaced. Stored elements are alwasy assigned\n// a consecutive set of positoins startin from 0 up to count of elements less 1\n// Following actions can be executed\n// * get position assigned to given value (null if value is not stored)\n// * create new entry for new value and get assigned position back\n// * replace value that is furthest from specified value range with new value\n// and get it's position back\n// All operations take amortized log(n) time where n is number of elements in\n// the set.\n// feature: add / delete / update item will also in consider..\nclass IntegerBufferSet<Meta = any> {\n private _name: string;\n private _bufferSize: number;\n\n private _indexToMetaMap: IndexToMetaMap<Meta>;\n private _metaToPositionMap: MetaToPositionMap<Meta>;\n private _positionToMetaList: Array<Meta>;\n private _metaToIndexMap: MetaToIndexMap<Meta>;\n\n private _smallValues: Heap<HeapItem>;\n private _largeValues: Heap<HeapItem>;\n private _metaExtractor: MetaExtractor<Meta>;\n private _indexExtractor: IndexExtractor<Meta>;\n\n private _onTheFlyIndices: Array<Meta>;\n\n private _isOnTheFlyFull: boolean;\n private _isOnTheFlyFullReturnHook: ReturnHook;\n\n private _loopMS: number;\n private _lastUpdatedMS: number;\n\n constructor(props: IntegerBufferSetProps<Meta> = {}) {\n const {\n name = 'default_buffer',\n indexExtractor,\n bufferSize = defaultBufferSize,\n metaExtractor = defaultMetaExtractor,\n } = props;\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n\n this._name = name;\n\n /**\n * this._indexToMetaMap is used to find the prev meta when finding a position for index.\n */\n this._indexToMetaMap = new Map();\n this._metaToPositionMap = new Map();\n this._positionToMetaList = [];\n this._metaToIndexMap = new Map();\n this._onTheFlyIndices = [];\n\n this._bufferSize = bufferSize;\n\n this._smallValues = new Heap([], this._smallerComparator);\n this._largeValues = new Heap([], this._greaterComparator);\n\n this.getNewPositionForIndex = this.getNewPositionForIndex.bind(this);\n this.getIndexPosition = this.getIndexPosition.bind(this);\n this.replacePositionInFliedIndices =\n this.replacePositionInFliedIndices.bind(this);\n this.replaceFurthestIndexPosition =\n this.replaceFurthestIndexPosition.bind(this);\n this._isOnTheFlyFullReturnHook = returnHook(\n this.setIsOnTheFlyFull.bind(this)\n );\n\n this._loopMS = Date.now();\n this._lastUpdatedMS = this._loopMS;\n }\n\n get bufferSize() {\n return this._bufferSize;\n }\n\n setIsOnTheFlyFull(val: any) {\n if (val != null) {\n const data = this._onTheFlyIndices.filter((v) => v);\n this._isOnTheFlyFull = data.length === this._bufferSize;\n }\n }\n\n get isBufferFull() {\n return this._positionToMetaList.length >= this._bufferSize;\n }\n\n getOnTheFlyUncriticalPosition(safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n for (let idx = 0; idx < this._onTheFlyIndices.length; idx++) {\n const meta = this._onTheFlyIndices[idx];\n const metaIndex = this._metaToIndexMap.get(meta);\n if (!isClamped(startIndex, metaIndex, endIndex)) {\n return idx;\n }\n }\n return null;\n }\n\n initialize() {\n return {\n smallValues: new Heap([], this._smallerComparator),\n largeValues: new Heap([], this._greaterComparator),\n valueToPositionObject: {},\n };\n }\n\n getIndexMeta(index: number) {\n return this._metaExtractor(index);\n }\n\n getMetaIndex(meta: Meta) {\n if (this._indexExtractor) return this._indexExtractor(meta);\n return this._metaToIndexMap.get(meta);\n }\n\n setMetaIndex(meta: Meta, index: number) {\n if (!this._indexExtractor) {\n return this._metaToIndexMap.set(meta, index);\n }\n return false;\n }\n\n deleteMetaIndex(meta: Meta) {\n return this._metaToIndexMap.delete(meta);\n }\n\n replaceMetaToIndexMap(newMetaToIndexMap: MetaToIndexMap<Meta>) {\n if (!this._indexExtractor) {\n return (this._metaToIndexMap = newMetaToIndexMap);\n }\n return false;\n }\n\n getIndexPosition(index: number): undefined | number {\n return this.getMetaIndex(this.getIndexMeta(index));\n }\n\n getNewPositionForIndex(index: number) {\n const meta = this.getIndexMeta(index);\n invariant(\n this._metaToPositionMap.get(meta) === undefined,\n \"Shouldn't try to find new position for value already stored in BufferSet\"\n );\n const newPosition = this._positionToMetaList.length;\n\n this._pushToHeaps(newPosition, index);\n this._setMetaIndex(meta, index);\n this._setMetaPosition(meta, newPosition);\n\n return newPosition;\n }\n\n getMinValue() {\n return this._smallValues.peek()?.value;\n }\n\n getMaxValue() {\n return this._largeValues.peek()?.value;\n }\n\n replacePositionInFliedIndices(newIndex: number, safeRange: SafeRange) {\n const { startIndex, endIndex } = safeRange;\n\n if (this._isOnTheFlyFull) {\n // newIndex is not critical index, do nothing\n if (!isClamped(startIndex, newIndex, endIndex)) {\n return null;\n }\n // if `newIndex` is critical index, replace an un-committed\n // index value from _onTheFlyIndices.\n const pos = this.getOnTheFlyUncriticalPosition(safeRange);\n if (pos != null) return pos;\n }\n return null;\n }\n\n getFliedPosition(newIndex: number, safeRange: SafeRange) {\n const pos = this.replacePositionInFliedIndices(newIndex, safeRange);\n if (pos != null) {\n const meta = this.getIndexMeta(newIndex);\n this._onTheFlyIndices[pos] = meta;\n this._setMetaIndex(meta, newIndex);\n return this._isOnTheFlyFullReturnHook(pos);\n }\n return null;\n }\n\n /**\n *\n * @param newIndex\n * @param safeRange\n * @returns\n *\n *\n * _positionToMetaList maybe undefined on next loop\n */\n getPosition(newIndex: number, safeRange?: SafeRange) {\n this.prepare();\n const meta = this.getIndexMeta(newIndex);\n const prevMetaPosition = this._metaToPositionMap.get(meta);\n\n if (prevMetaPosition !== undefined) {\n const onTheFlyPositionMeta = this._onTheFlyIndices[prevMetaPosition];\n // the occupied meta should change position\n if (onTheFlyPositionMeta) {\n // such as place item 11 twice...\n if (onTheFlyPositionMeta === meta) {\n return prevMetaPosition;\n }\n let positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n if (this._isOnTheFlyFull)\n return this.getFliedPosition(newIndex, safeRange);\n\n while (this._onTheFlyIndices[positionToReplace]) {\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n }\n\n if (positionToReplace != null) {\n this._setMetaIndex(meta, newIndex);\n this._onTheFlyIndices[positionToReplace] = onTheFlyPositionMeta;\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n }\n this._onTheFlyIndices[prevMetaPosition] = meta;\n return this._isOnTheFlyFullReturnHook(prevMetaPosition);\n }\n\n // placed on new buffered position\n if (!this.isBufferFull)\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n\n if (this._isOnTheFlyFull) return this.getFliedPosition(newIndex, safeRange);\n\n let positionToReplace;\n const prevIndexMeta = this._indexToMetaMap.get(newIndex);\n\n // Index has already been stored, but we cant use its old position directly...\n // 1:index -> meta, meta may be reused later\n\n // 2: temp use index -> meta -> position, this issue should exist for follows...\n if (!prevIndexMeta) {\n this._cleanHeaps();\n positionToReplace = this._replaceFurthestIndexPosition(\n newIndex,\n safeRange\n );\n } else {\n positionToReplace = this._metaToPositionMap.get(prevIndexMeta);\n }\n\n this._onTheFlyIndices[positionToReplace] = meta;\n this._setMetaIndex(meta, newIndex);\n this._setMetaPosition(meta, positionToReplace);\n // should not push to heap, pop only\n // this._pushToHeaps(positionToReplace, newIndex)\n\n return this._isOnTheFlyFullReturnHook(positionToReplace);\n }\n\n replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (!this.isBufferFull) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n return this._replaceFurthestIndexPosition(newIndex, safeRange);\n }\n\n _replaceFurthestIndexPosition(\n newIndex: number,\n safeRange?: {\n startIndex: number;\n endIndex: number;\n }\n ) {\n if (this._largeValues.empty() || this._smallValues.empty()) {\n return this._isOnTheFlyFullReturnHook(\n this.getNewPositionForIndex(newIndex)\n );\n }\n\n const minValue = this._smallValues.peek()!.value;\n const maxValue = this._largeValues.peek()!.value;\n\n let indexToReplace;\n\n if (!safeRange) {\n // far from min\n if (Math.abs(newIndex - minValue) > Math.abs(newIndex - maxValue)) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n const { startIndex: lowValue, endIndex: highValue } = safeRange;\n\n // All values currently stored are necessary, we can't reuse any of them.\n if (\n isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n return null;\n } else if (\n isClamped(lowValue, minValue, highValue) &&\n !isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = maxValue;\n this._largeValues.pop();\n } else if (\n !isClamped(lowValue, minValue, highValue) &&\n isClamped(lowValue, maxValue, highValue)\n ) {\n indexToReplace = minValue;\n this._smallValues.pop();\n } else if (lowValue - minValue > maxValue - highValue) {\n // minValue is further from provided range. We will reuse it's position.\n indexToReplace = minValue;\n this._smallValues.pop();\n } else {\n indexToReplace = maxValue;\n this._largeValues.pop();\n }\n\n const replacedMeta = this._indexToMetaMap.get(indexToReplace);\n const position = this._metaToPositionMap.get(replacedMeta);\n\n return position;\n }\n\n shuffle() {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta = this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n indices[idx] = targetIndex;\n }\n\n const _arr = new Array(indices.length);\n const _available = [];\n const indexToMetaMap = new Map();\n const metaToIndexMap = new Map();\n const metaToPositionMap = new Map();\n for (let idx = 0; idx < indices.length; idx++) {\n const currentIndex = indices[idx];\n const currentMeta = this._metaExtractor(currentIndex);\n if (currentMeta == null) continue;\n\n indexToMetaMap.set(currentIndex, currentMeta);\n metaToIndexMap.set(currentMeta, currentIndex);\n\n if (currentMeta === this._positionToMetaList[idx]) {\n _arr[idx] = currentMeta;\n continue;\n }\n const _i = this._positionToMetaList.findIndex((v) => v === currentMeta);\n if (_i !== -1) {\n _arr[_i] = currentMeta;\n continue;\n }\n\n _available.push(currentMeta);\n }\n\n const { smallValues, largeValues } = this.initialize();\n const positionToMetaList = [];\n\n for (let position = 0; position < indices.length; position++) {\n const value = indices[position];\n if (_arr[position] != null) {\n positionToMetaList[position] = _arr[position];\n metaToPositionMap.set(_arr[position], position);\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n continue;\n }\n const meta = _available.shift();\n if (meta != null) {\n positionToMetaList[position] = meta;\n metaToPositionMap.set(meta, position);\n\n const element = { position, value };\n smallValues.push(element);\n largeValues.push(element);\n }\n }\n\n this._positionToMetaList = positionToMetaList;\n this._smallValues = smallValues;\n this._largeValues = largeValues;\n this._indexToMetaMap = indexToMetaMap;\n this.replaceMetaToIndexMap(metaToIndexMap);\n this._metaToPositionMap = metaToPositionMap;\n this._onTheFlyIndices = [];\n\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n // key point: `meta` should be preserved..\n getIndices() {\n try {\n const indices = new Array(this.bufferSize);\n for (let idx = 0; idx < indices.length; idx++) {\n const meta =\n this._onTheFlyIndices[idx] || this._positionToMetaList[idx];\n const targetIndex = this.getMetaIndex(meta);\n // which means source data has changed. such as one element has been deleted\n if (meta !== this.getIndexMeta(targetIndex)) {\n return this.shuffle();\n }\n if (meta != null) {\n indices[idx] = {\n meta,\n targetIndex,\n recyclerKey: `${this._name}_${idx}`,\n };\n }\n }\n // clear on the fly indices after return indices.\n this._onTheFlyIndices = [];\n\n return indices;\n } catch (err) {\n this.readyToStartNextLoop();\n return this._positionToMetaList;\n }\n }\n\n _pushToHeaps(position: number, value: number) {\n const element = { position, value };\n // We can reuse the same object in both heaps, because we don't mutate them\n this._smallValues.push(element);\n this._largeValues.push(element);\n }\n\n _setMetaPosition(meta: Meta, position: number) {\n const prevMetaOnPosition = this._positionToMetaList[position];\n if (prevMetaOnPosition) this._metaToPositionMap.delete(prevMetaOnPosition);\n this._positionToMetaList[position] = meta;\n this._metaToPositionMap.set(meta, position);\n }\n\n /**\n *\n * @param meta\n * @param index\n * @returns true means index not changed\n */\n _setMetaIndex(meta: Meta, index: number) {\n const prevMetaIndex = this.getMetaIndex(meta);\n if (prevMetaIndex !== undefined) {\n // no need to set\n // if (prevMetaIndex === index) return true;\n this._indexToMetaMap.delete(prevMetaIndex);\n }\n this.setMetaIndex(meta, index);\n this._indexToMetaMap.set(index, meta);\n return false;\n }\n\n readyToStartNextLoop() {\n this._lastUpdatedMS = Date.now();\n }\n\n prepare() {\n if (this._loopMS === this._lastUpdatedMS) return;\n this._loopMS = this._lastUpdatedMS;\n\n this._onTheFlyIndices = [];\n this._isOnTheFlyFull = false;\n }\n\n _cleanHeaps() {\n // We not usually only remove object from one heap while moving value.\n // Here we make sure that there is no stale data on top of heaps.\n this._cleanHeap(this._smallValues);\n this._cleanHeap(this._largeValues);\n const minHeapSize = Math.min(\n this._smallValues.size(),\n this._largeValues.size()\n );\n const maxHeapSize = Math.max(\n this._smallValues.size(),\n this._largeValues.size()\n );\n if (maxHeapSize > 10 * minHeapSize) {\n // There are many old values in one of heaps. We need to get rid of them\n // to not use too avoid memory leaks\n this._recreateHeaps();\n }\n }\n _recreateHeaps() {\n const sourceHeap =\n this._smallValues.size() < this._largeValues.size()\n ? this._smallValues\n : this._largeValues;\n const newSmallValues = new Heap<HeapItem>(\n [], // Initial data in the heap\n this._smallerComparator\n );\n const newLargeValues = new Heap<HeapItem>(\n [], // Initial datat in the heap\n this._greaterComparator\n );\n while (!sourceHeap.empty()) {\n const element = sourceHeap.pop()!;\n // Push all still valid elements to new heaps\n if (\n this._metaToPositionMap.get(this._indexToMetaMap.get(element.value)) !=\n null\n ) {\n newSmallValues.push(element);\n newLargeValues.push(element);\n }\n }\n this._smallValues = newSmallValues;\n this._largeValues = newLargeValues;\n }\n\n _cleanHeap(heap: Heap<HeapItem>) {\n while (\n !heap.empty() &&\n this._metaToPositionMap.get(\n this._indexToMetaMap.get(heap.peek()!.value)\n ) == null\n ) {\n heap.pop();\n }\n }\n\n _smallerComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value < rhs.value;\n }\n\n _greaterComparator(lhs: HeapItem, rhs: HeapItem) {\n return lhs.value > rhs.value;\n }\n}\n\nexport default IntegerBufferSet;\n"],"names":["defaultMetaExtractor","value","defaultBufferSize","IntegerBufferSet","props","_props","_props$name","name","indexExtractor","_props$bufferSize","bufferSize","_props$metaExtractor","metaExtractor","_metaExtractor","_indexExtractor","_name","_indexToMetaMap","Map","_metaToPositionMap","_positionToMetaList","_metaToIndexMap","_onTheFlyIndices","_bufferSize","_smallValues","Heap","_smallerComparator","_largeValues","_greaterComparator","getNewPositionForIndex","bind","getIndexPosition","replacePositionInFliedIndices","replaceFurthestIndexPosition","_isOnTheFlyFullReturnHook","returnHook","setIsOnTheFlyFull","_loopMS","Date","now","_lastUpdatedMS","_proto","prototype","val","data","filter","v","_isOnTheFlyFull","length","getOnTheFlyUncriticalPosition","safeRange","startIndex","endIndex","idx","meta","metaIndex","get","isClamped","initialize","smallValues","largeValues","valueToPositionObject","getIndexMeta","index","getMetaIndex","setMetaIndex","set","deleteMetaIndex","replaceMetaToIndexMap","newMetaToIndexMap","undefined","process","env","NODE_ENV","invariant","newPosition","_pushToHeaps","_setMetaIndex","_setMetaPosition","getMinValue","_this$_smallValues$pe","peek","getMaxValue","_this$_largeValues$pe","newIndex","pos","getFliedPosition","getPosition","prepare","prevMetaPosition","onTheFlyPositionMeta","positionToReplace","_replaceFurthestIndexPosition","isBufferFull","prevIndexMeta","_cleanHeaps","empty","minValue","maxValue","indexToReplace","Math","abs","pop","replacedMeta","position","lowValue","highValue","shuffle","indices","Array","targetIndex","_arr","_available","indexToMetaMap","metaToIndexMap","metaToPositionMap","_loop","currentIndex","currentMeta","_this","_i","findIndex","push","_ret","_this$initialize","positionToMetaList","element","shift","recyclerKey","err","readyToStartNextLoop","getIndices","prevMetaOnPosition","prevMetaIndex","_cleanHeap","minHeapSize","min","size","maxHeapSize","max","_recreateHeaps","sourceHeap","newSmallValues","newLargeValues","heap","lhs","rhs","_createClass","key"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x-oasis/integer-buffer-set",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"description": "IntegerBufferSet function",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"tsdx": "^0.14.1"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@x-oasis/heap": "0.1.
|
|
19
|
+
"@x-oasis/heap": "0.1.23",
|
|
20
20
|
"@x-oasis/invariant": "^0.1.19",
|
|
21
21
|
"@x-oasis/is-clamped": "^0.1.19",
|
|
22
22
|
"@x-oasis/return-hook": "^0.1.19"
|