@x-oasis/recycler 0.1.20 → 0.1.21
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/README.md +25 -1
- package/dist/common.d.ts +0 -1
- package/dist/index.d.ts +4 -5
- package/dist/recycler.cjs.development.js +13 -15
- package/dist/recycler.cjs.development.js.map +1 -1
- package/dist/recycler.cjs.production.min.js +1 -1
- package/dist/recycler.cjs.production.min.js.map +1 -1
- package/dist/recycler.esm.js +13 -15
- package/dist/recycler.esm.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +2 -2
- package/src/common.ts +1 -1
- package/src/index.ts +18 -46
- package/src/types.ts +2 -0
package/README.md
CHANGED
|
@@ -22,4 +22,28 @@ $ pnpm test
|
|
|
22
22
|
|
|
23
23
|
Basically, give an List index then get a placed position(recycler list index); In order to reuse more elements, object ref should be considered..
|
|
24
24
|
|
|
25
|
-
For Example, remove / delete / add an element, they all cause index change of original source data. but
|
|
25
|
+
For Example, remove / delete / add an element, they all cause index change of original source data. but
|
|
26
|
+
|
|
27
|
+
## API
|
|
28
|
+
|
|
29
|
+
### updateIndices
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
updateIndices(props: {
|
|
33
|
+
/**
|
|
34
|
+
* index in range should not be recycled
|
|
35
|
+
*/
|
|
36
|
+
safeRange: {
|
|
37
|
+
startIndex: number;
|
|
38
|
+
endIndex: number;
|
|
39
|
+
};
|
|
40
|
+
startIndex: number;
|
|
41
|
+
maxCount: number;
|
|
42
|
+
step?: number;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* return boolean value, true means the current processing index should be counted in.
|
|
46
|
+
*/
|
|
47
|
+
onProcess?: (type?: string, index?: number) => boolean
|
|
48
|
+
})
|
|
49
|
+
```
|
package/dist/common.d.ts
CHANGED
|
@@ -2,5 +2,4 @@ export declare const DEFAULT_RECYCLER_TYPE = "__default_recycler_buffer__";
|
|
|
2
2
|
export declare const RECYCLER_THRESHOLD_INDEX_VALUE = 0;
|
|
3
3
|
export declare const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
|
|
4
4
|
export declare const RECYCLER_BUFFER_SIZE = 10;
|
|
5
|
-
export declare const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;
|
|
6
5
|
export declare const defaultGetType: () => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import FixedBuffer from './FixedBuffer';
|
|
2
|
-
import { RecyclerProps } from './types';
|
|
2
|
+
import { OnProcess, RecyclerProps } from './types';
|
|
3
3
|
declare class Recycler {
|
|
4
4
|
private _queue;
|
|
5
5
|
private _thresholdIndexValue;
|
|
6
6
|
private _recyclerReservedBufferPerBatch;
|
|
7
7
|
private _recyclerBufferSize;
|
|
8
|
-
private _recyclerReservedBufferSize;
|
|
9
8
|
private _metaExtractor;
|
|
10
9
|
private _indexExtractor;
|
|
11
10
|
private _getType;
|
|
@@ -23,9 +22,9 @@ declare class Recycler {
|
|
|
23
22
|
};
|
|
24
23
|
startIndex: number;
|
|
25
24
|
maxCount: number;
|
|
26
|
-
step
|
|
27
|
-
|
|
28
|
-
}):
|
|
25
|
+
step?: number;
|
|
26
|
+
onProcess?: OnProcess;
|
|
27
|
+
}): void;
|
|
29
28
|
getMinValue(): number;
|
|
30
29
|
getMaxValue(): number;
|
|
31
30
|
}
|
|
@@ -42,7 +42,6 @@ var DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';
|
|
|
42
42
|
var RECYCLER_THRESHOLD_INDEX_VALUE = 0;
|
|
43
43
|
var RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
|
|
44
44
|
var RECYCLER_BUFFER_SIZE = 10;
|
|
45
|
-
var RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;
|
|
46
45
|
|
|
47
46
|
var FixedBuffer = /*#__PURE__*/function () {
|
|
48
47
|
function FixedBuffer(props) {
|
|
@@ -113,7 +112,6 @@ var Recycler = /*#__PURE__*/function () {
|
|
|
113
112
|
this._getType = getType;
|
|
114
113
|
this._recyclerBufferSize = recyclerBufferSize;
|
|
115
114
|
this._thresholdIndexValue = thresholdIndexValue;
|
|
116
|
-
this._recyclerReservedBufferSize = Math.floor(recyclerBufferSize * RECYCLER_RESERVED_BUFFER_SIZE_RATIO);
|
|
117
115
|
this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;
|
|
118
116
|
recyclerTypes.forEach(function (type) {
|
|
119
117
|
return _this.addBuffer(type);
|
|
@@ -145,24 +143,24 @@ var Recycler = /*#__PURE__*/function () {
|
|
|
145
143
|
return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);
|
|
146
144
|
};
|
|
147
145
|
_proto.updateIndices = function updateIndices(props) {
|
|
148
|
-
var
|
|
146
|
+
var startIndex = props.startIndex,
|
|
149
147
|
safeRange = props.safeRange,
|
|
150
|
-
step = props.step,
|
|
148
|
+
_props$step = props.step,
|
|
149
|
+
step = _props$step === void 0 ? 1 : _props$step,
|
|
151
150
|
maxCount = props.maxCount,
|
|
152
|
-
|
|
153
|
-
var startIndex = Math.max(_startIndex, 0);
|
|
151
|
+
onProcess = props.onProcess;
|
|
154
152
|
var count = 0;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
159
|
-
if (count < maxCount) {
|
|
153
|
+
var _index = Math.max(startIndex, 0);
|
|
154
|
+
while (count < maxCount) {
|
|
155
|
+
if (_index >= this._thresholdIndexValue) {
|
|
156
|
+
var recyclerType = this._getType(_index);
|
|
160
157
|
var buffer = this.ensureBuffer(recyclerType);
|
|
161
|
-
buffer.place(
|
|
162
|
-
|
|
163
|
-
|
|
158
|
+
buffer.place(_index, safeRange);
|
|
159
|
+
if (typeof onProcess !== 'function' || onProcess(recyclerType, _index)) {
|
|
160
|
+
count += 1;
|
|
161
|
+
}
|
|
164
162
|
}
|
|
165
|
-
|
|
163
|
+
_index += step;
|
|
166
164
|
}
|
|
167
165
|
};
|
|
168
166
|
_proto.getMinValue = function getMinValue() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recycler.cjs.development.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\nexport const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;\n\nexport const defaultGetType = () => DEFAULT_RECYCLER_TYPE;\n","import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { SafeRange, FixedBufferProps } from './types';\nimport { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';\n\nclass FixedBuffer {\n private _bufferSet: IntegerBufferSet;\n private _thresholdIndexValue = 0;\n\n private _recyclerType: string;\n\n constructor(props: FixedBufferProps) {\n const {\n thresholdIndexValue = 0,\n bufferSize = RECYCLER_BUFFER_SIZE,\n recyclerType = DEFAULT_RECYCLER_TYPE,\n metaExtractor,\n indexExtractor,\n } = props;\n this._bufferSet = new IntegerBufferSet({\n bufferSize,\n metaExtractor,\n indexExtractor,\n name: recyclerType,\n });\n this._recyclerType = recyclerType;\n this._thresholdIndexValue = thresholdIndexValue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerType() {\n return this._recyclerType;\n }\n\n place(index: number, safeRange: SafeRange) {\n this._bufferSet.getPosition(index, safeRange);\n }\n\n getMaxValue() {\n return this._bufferSet.getMaxValue();\n }\n\n getMinValue() {\n return this._bufferSet.getMinValue();\n }\n\n getIndices() {\n return this._bufferSet.getIndices();\n }\n}\n\nexport default FixedBuffer;\n","import FixedBuffer from './FixedBuffer';\nimport { RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_RESERVED_BUFFER_SIZE_RATIO,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<FixedBuffer> = [];\n\n /**\n * start index\n */\n private _thresholdIndexValue = 0;\n private _recyclerReservedBufferPerBatch: number;\n /**\n * buffer size, the oversize node will run into recycle strategy\n */\n private _recyclerBufferSize: number;\n private _recyclerReservedBufferSize: number;\n private _metaExtractor: (index: number) => any;\n private _indexExtractor: (meta: any) => number;\n private _getType: (index: number) => string;\n\n constructor(props?: RecyclerProps) {\n const {\n getType,\n metaExtractor,\n indexExtractor,\n recyclerTypes = [],\n recyclerBufferSize = RECYCLER_BUFFER_SIZE,\n thresholdIndexValue = RECYCLER_THRESHOLD_INDEX_VALUE,\n recyclerReservedBufferPerBatch = RECYCLER_RESERVED_BUFFER_PER_BATCH,\n } = props || {};\n\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n this._getType = getType;\n this._recyclerBufferSize = recyclerBufferSize;\n this._thresholdIndexValue = thresholdIndexValue;\n this._recyclerReservedBufferSize = Math.floor(\n recyclerBufferSize * RECYCLER_RESERVED_BUFFER_SIZE_RATIO\n );\n this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;\n recyclerTypes.forEach((type) => this.addBuffer(type));\n }\n\n get queue() {\n return this._queue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerReservedBufferPerBatch() {\n return this._recyclerReservedBufferPerBatch;\n }\n\n getIndices() {\n return this._queue.reduce((acc, cur) => acc.concat(cur.getIndices()), []);\n }\n\n addBuffer(type: string) {\n if (!type) return null;\n const index = this._queue.findIndex(\n (buffer) => buffer.recyclerType === type\n );\n if (index !== -1) return this._queue[index];\n const buffer = new FixedBuffer({\n recyclerType: type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\n thresholdIndexValue: this._thresholdIndexValue,\n });\n this._queue.push(buffer);\n return buffer;\n }\n\n ensureBuffer(type: string) {\n return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: {\n startIndex: number;\n endIndex: number;\n };\n startIndex: number;\n maxCount: number;\n step: number;\n\n // /** the max index value, always be the length of data */\n maxIndex: number;\n }) {\n // this._queue.forEach((buffer) => buffer.start());\n const {\n startIndex: _startIndex,\n safeRange,\n step,\n maxCount,\n maxIndex,\n } = props;\n const startIndex = Math.max(_startIndex, 0);\n let count = 0;\n if (maxCount < 0) return null;\n for (\n let index = startIndex;\n step > 0 ? index <= maxIndex : index >= 0;\n index += step\n ) {\n if (index < this._thresholdIndexValue) continue;\n const recyclerType = this._getType(index);\n\n // itemLayout should not be a condition, may cause too many unLayout item\n if (count < maxCount) {\n const buffer = this.ensureBuffer(recyclerType);\n buffer.place(index, safeRange);\n } else {\n break;\n }\n\n if (index >= this._thresholdIndexValue) count++;\n }\n }\n\n getMinValue() {\n let minValue = Number.MAX_SAFE_INTEGER;\n this._queue.forEach((buffer) => {\n const v = buffer.getMinValue();\n if (typeof v === 'number') minValue = Math.min(v, minValue);\n });\n return minValue;\n }\n\n getMaxValue() {\n let maxValue = 0;\n this._queue.forEach((buffer) => {\n const v = buffer.getMaxValue();\n if (typeof v === 'number') maxValue = Math.max(v, maxValue);\n });\n return maxValue;\n }\n}\n\nexport default Recycler;\n\n// const origin = [163, 168, 142, 147, 152, 173, 178, 137, 157, 162]\n\n// const target = [163, 163, 142, 147, 152, 168, 173, 137, 157]\n\n// const next = [168, 168, 142, 147, 152, 173, 178, 137, 157, 162]\n\n// Next Sample\n// const origin = [35, 36, 37, 38, 39, 40, 41, 32, 33, 34]\n// const target = [35, 36, 37, 36, 37, 40, 41, 32, 33, 34]\n// const target = [35, 38, 39, 38, 39, 40, 41, 32, 33, 34]\n"],"names":["DEFAULT_RECYCLER_TYPE","RECYCLER_THRESHOLD_INDEX_VALUE","RECYCLER_RESERVED_BUFFER_PER_BATCH","RECYCLER_BUFFER_SIZE","RECYCLER_RESERVED_BUFFER_SIZE_RATIO","FixedBuffer","props","_props$thresholdIndex","thresholdIndexValue","_props$bufferSize","bufferSize","_props$recyclerType","recyclerType","metaExtractor","indexExtractor","_bufferSet","IntegerBufferSet","name","_recyclerType","_thresholdIndexValue","_proto","prototype","place","index","safeRange","getPosition","getMaxValue","getMinValue","getIndices","_createClass","key","get","Recycler","_ref","getType","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_recyclerReservedBufferSize","Math","floor","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_queue","reduce","acc","cur","concat","findIndex","buffer","push","ensureBuffer","updateIndices","_startIndex","startIndex","step","maxCount","maxIndex","max","count","minValue","Number","MAX_SAFE_INTEGER","v","min","maxValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recycler.cjs.development.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\n// export const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;\n\nexport const defaultGetType = () => DEFAULT_RECYCLER_TYPE;\n","import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { SafeRange, FixedBufferProps } from './types';\nimport { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';\n\nclass FixedBuffer {\n private _bufferSet: IntegerBufferSet;\n private _thresholdIndexValue = 0;\n\n private _recyclerType: string;\n\n constructor(props: FixedBufferProps) {\n const {\n thresholdIndexValue = 0,\n bufferSize = RECYCLER_BUFFER_SIZE,\n recyclerType = DEFAULT_RECYCLER_TYPE,\n metaExtractor,\n indexExtractor,\n } = props;\n this._bufferSet = new IntegerBufferSet({\n bufferSize,\n metaExtractor,\n indexExtractor,\n name: recyclerType,\n });\n this._recyclerType = recyclerType;\n this._thresholdIndexValue = thresholdIndexValue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerType() {\n return this._recyclerType;\n }\n\n place(index: number, safeRange: SafeRange) {\n this._bufferSet.getPosition(index, safeRange);\n }\n\n getMaxValue() {\n return this._bufferSet.getMaxValue();\n }\n\n getMinValue() {\n return this._bufferSet.getMinValue();\n }\n\n getIndices() {\n return this._bufferSet.getIndices();\n }\n}\n\nexport default FixedBuffer;\n","import FixedBuffer from './FixedBuffer';\nimport { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n // RECYCLER_RESERVED_BUFFER_SIZE_RATIO,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<FixedBuffer> = [];\n\n /**\n * start index\n */\n private _thresholdIndexValue = 0;\n private _recyclerReservedBufferPerBatch: number;\n /**\n * buffer size, the oversize node will run into recycle strategy\n */\n private _recyclerBufferSize: number;\n private _metaExtractor: (index: number) => any;\n private _indexExtractor: (meta: any) => number;\n private _getType: (index: number) => string;\n\n constructor(props?: RecyclerProps) {\n const {\n getType,\n metaExtractor,\n indexExtractor,\n recyclerTypes = [],\n recyclerBufferSize = RECYCLER_BUFFER_SIZE,\n thresholdIndexValue = RECYCLER_THRESHOLD_INDEX_VALUE,\n recyclerReservedBufferPerBatch = RECYCLER_RESERVED_BUFFER_PER_BATCH,\n } = props || {};\n\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n this._getType = getType;\n this._recyclerBufferSize = recyclerBufferSize;\n this._thresholdIndexValue = thresholdIndexValue;\n this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;\n recyclerTypes.forEach((type) => this.addBuffer(type));\n }\n\n get queue() {\n return this._queue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerReservedBufferPerBatch() {\n return this._recyclerReservedBufferPerBatch;\n }\n\n getIndices() {\n return this._queue.reduce((acc, cur) => acc.concat(cur.getIndices()), []);\n }\n\n addBuffer(type: string) {\n if (!type) return null;\n const index = this._queue.findIndex(\n (buffer) => buffer.recyclerType === type\n );\n if (index !== -1) return this._queue[index];\n const buffer = new FixedBuffer({\n recyclerType: type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\n thresholdIndexValue: this._thresholdIndexValue,\n });\n this._queue.push(buffer);\n return buffer;\n }\n\n ensureBuffer(type: string) {\n return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: {\n startIndex: number;\n endIndex: number;\n };\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnProcess;\n }) {\n const { startIndex, safeRange, step = 1, maxCount, onProcess } = props;\n let count = 0;\n let _index = Math.max(startIndex, 0);\n while (count < maxCount) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.place(_index, safeRange);\n\n if (\n typeof onProcess !== 'function' ||\n onProcess(recyclerType, _index)\n ) {\n count += 1;\n }\n }\n _index += step;\n }\n }\n\n getMinValue() {\n let minValue = Number.MAX_SAFE_INTEGER;\n this._queue.forEach((buffer) => {\n const v = buffer.getMinValue();\n if (typeof v === 'number') minValue = Math.min(v, minValue);\n });\n return minValue;\n }\n\n getMaxValue() {\n let maxValue = 0;\n this._queue.forEach((buffer) => {\n const v = buffer.getMaxValue();\n if (typeof v === 'number') maxValue = Math.max(v, maxValue);\n });\n return maxValue;\n }\n}\n\nexport default Recycler;\n"],"names":["DEFAULT_RECYCLER_TYPE","RECYCLER_THRESHOLD_INDEX_VALUE","RECYCLER_RESERVED_BUFFER_PER_BATCH","RECYCLER_BUFFER_SIZE","FixedBuffer","props","_props$thresholdIndex","thresholdIndexValue","_props$bufferSize","bufferSize","_props$recyclerType","recyclerType","metaExtractor","indexExtractor","_bufferSet","IntegerBufferSet","name","_recyclerType","_thresholdIndexValue","_proto","prototype","place","index","safeRange","getPosition","getMaxValue","getMinValue","getIndices","_createClass","key","get","Recycler","_ref","getType","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_queue","reduce","acc","cur","concat","findIndex","buffer","push","ensureBuffer","updateIndices","startIndex","_props$step","step","maxCount","onProcess","count","_index","Math","max","minValue","Number","MAX_SAFE_INTEGER","v","min","maxValue"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=(e=require("@x-oasis/integer-buffer-set"))&&"object"==typeof e&&"default"in e?e.default:e;function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,"symbol"==typeof(u=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(n.key))?u:String(u),n)}var u}function n(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var u=function(){function e(e){this._thresholdIndexValue=0;var r=e.thresholdIndexValue,n=void 0===r?0:r,u=e.bufferSize,i=e.recyclerType,o=void 0===i?"__default_recycler_buffer__":i;this._bufferSet=new t({bufferSize:void 0===u?10:u,metaExtractor:e.metaExtractor,indexExtractor:e.indexExtractor,name:o}),this._recyclerType=o,this._thresholdIndexValue=n}var r=e.prototype;return r.place=function(e,t){this._bufferSet.getPosition(e,t)},r.getMaxValue=function(){return this._bufferSet.getMaxValue()},r.getMinValue=function(){return this._bufferSet.getMinValue()},r.getIndices=function(){return this._bufferSet.getIndices()},n(e,[{key:"thresholdIndexValue",get:function(){return this._thresholdIndexValue}},{key:"recyclerType",get:function(){return this._recyclerType}}]),e}();exports.default=function(){function e(e){var t=this;this._queue=[],this._thresholdIndexValue=0;var r=e||{},n=r.getType,u=r.indexExtractor,i=r.recyclerTypes,o=void 0===i?[]:i,a=r.recyclerBufferSize,f=void 0===a?10:a,c=r.thresholdIndexValue,s=void 0===c?0:c,h=r.recyclerReservedBufferPerBatch,l=void 0===h?4:h;this._metaExtractor=r.metaExtractor,this._indexExtractor=u,this._getType=n,this._recyclerBufferSize=f,this._thresholdIndexValue=s,this._recyclerReservedBufferPerBatch=l,o.forEach((function(e){return t.addBuffer(e)}))}var t=e.prototype;return t.getIndices=function(){return this._queue.reduce((function(e,t){return e.concat(t.getIndices())}),[])},t.addBuffer=function(e){if(!e)return null;var t=this._queue.findIndex((function(t){return t.recyclerType===e}));if(-1!==t)return this._queue[t];var r=new u({recyclerType:e,metaExtractor:this._metaExtractor,indexExtractor:this._indexExtractor,bufferSize:this._recyclerBufferSize,thresholdIndexValue:this._thresholdIndexValue});return this._queue.push(r),r},t.ensureBuffer=function(e){return this.addBuffer(e||"__default_recycler_buffer__")},t.updateIndices=function(e){for(var t=e.safeRange,r=e.step,n=void 0===r?1:r,u=e.maxCount,i=e.onProcess,o=0,a=Math.max(e.startIndex,0);o<u;){if(a>=this._thresholdIndexValue){var f=this._getType(a);this.ensureBuffer(f).place(a,t),("function"!=typeof i||i(f,a))&&(o+=1)}a+=n}},t.getMinValue=function(){var e=Number.MAX_SAFE_INTEGER;return this._queue.forEach((function(t){var r=t.getMinValue();"number"==typeof r&&(e=Math.min(r,e))})),e},t.getMaxValue=function(){var e=0;return this._queue.forEach((function(t){var r=t.getMaxValue();"number"==typeof r&&(e=Math.max(r,e))})),e},n(e,[{key:"queue",get:function(){return this._queue}},{key:"thresholdIndexValue",get:function(){return this._thresholdIndexValue}},{key:"recyclerReservedBufferPerBatch",get:function(){return this._recyclerReservedBufferPerBatch}}]),e}();
|
|
2
2
|
//# sourceMappingURL=recycler.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recycler.cjs.production.min.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\
|
|
1
|
+
{"version":3,"file":"recycler.cjs.production.min.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\n// export const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;\n\nexport const defaultGetType = () => DEFAULT_RECYCLER_TYPE;\n","import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { SafeRange, FixedBufferProps } from './types';\nimport { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';\n\nclass FixedBuffer {\n private _bufferSet: IntegerBufferSet;\n private _thresholdIndexValue = 0;\n\n private _recyclerType: string;\n\n constructor(props: FixedBufferProps) {\n const {\n thresholdIndexValue = 0,\n bufferSize = RECYCLER_BUFFER_SIZE,\n recyclerType = DEFAULT_RECYCLER_TYPE,\n metaExtractor,\n indexExtractor,\n } = props;\n this._bufferSet = new IntegerBufferSet({\n bufferSize,\n metaExtractor,\n indexExtractor,\n name: recyclerType,\n });\n this._recyclerType = recyclerType;\n this._thresholdIndexValue = thresholdIndexValue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerType() {\n return this._recyclerType;\n }\n\n place(index: number, safeRange: SafeRange) {\n this._bufferSet.getPosition(index, safeRange);\n }\n\n getMaxValue() {\n return this._bufferSet.getMaxValue();\n }\n\n getMinValue() {\n return this._bufferSet.getMinValue();\n }\n\n getIndices() {\n return this._bufferSet.getIndices();\n }\n}\n\nexport default FixedBuffer;\n","import FixedBuffer from './FixedBuffer';\nimport { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n // RECYCLER_RESERVED_BUFFER_SIZE_RATIO,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<FixedBuffer> = [];\n\n /**\n * start index\n */\n private _thresholdIndexValue = 0;\n private _recyclerReservedBufferPerBatch: number;\n /**\n * buffer size, the oversize node will run into recycle strategy\n */\n private _recyclerBufferSize: number;\n private _metaExtractor: (index: number) => any;\n private _indexExtractor: (meta: any) => number;\n private _getType: (index: number) => string;\n\n constructor(props?: RecyclerProps) {\n const {\n getType,\n metaExtractor,\n indexExtractor,\n recyclerTypes = [],\n recyclerBufferSize = RECYCLER_BUFFER_SIZE,\n thresholdIndexValue = RECYCLER_THRESHOLD_INDEX_VALUE,\n recyclerReservedBufferPerBatch = RECYCLER_RESERVED_BUFFER_PER_BATCH,\n } = props || {};\n\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n this._getType = getType;\n this._recyclerBufferSize = recyclerBufferSize;\n this._thresholdIndexValue = thresholdIndexValue;\n this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;\n recyclerTypes.forEach((type) => this.addBuffer(type));\n }\n\n get queue() {\n return this._queue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerReservedBufferPerBatch() {\n return this._recyclerReservedBufferPerBatch;\n }\n\n getIndices() {\n return this._queue.reduce((acc, cur) => acc.concat(cur.getIndices()), []);\n }\n\n addBuffer(type: string) {\n if (!type) return null;\n const index = this._queue.findIndex(\n (buffer) => buffer.recyclerType === type\n );\n if (index !== -1) return this._queue[index];\n const buffer = new FixedBuffer({\n recyclerType: type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\n thresholdIndexValue: this._thresholdIndexValue,\n });\n this._queue.push(buffer);\n return buffer;\n }\n\n ensureBuffer(type: string) {\n return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: {\n startIndex: number;\n endIndex: number;\n };\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnProcess;\n }) {\n const { startIndex, safeRange, step = 1, maxCount, onProcess } = props;\n let count = 0;\n let _index = Math.max(startIndex, 0);\n while (count < maxCount) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.place(_index, safeRange);\n\n if (\n typeof onProcess !== 'function' ||\n onProcess(recyclerType, _index)\n ) {\n count += 1;\n }\n }\n _index += step;\n }\n }\n\n getMinValue() {\n let minValue = Number.MAX_SAFE_INTEGER;\n this._queue.forEach((buffer) => {\n const v = buffer.getMinValue();\n if (typeof v === 'number') minValue = Math.min(v, minValue);\n });\n return minValue;\n }\n\n getMaxValue() {\n let maxValue = 0;\n this._queue.forEach((buffer) => {\n const v = buffer.getMaxValue();\n if (typeof v === 'number') maxValue = Math.max(v, maxValue);\n });\n return maxValue;\n }\n}\n\nexport default Recycler;\n"],"names":["FixedBuffer","props","this","_props$thresholdIndex","thresholdIndexValue","_props$bufferSize","bufferSize","_props$recyclerType","recyclerType","_bufferSet","IntegerBufferSet","metaExtractor","indexExtractor","name","_recyclerType","_thresholdIndexValue","_proto","prototype","place","index","safeRange","getPosition","getMaxValue","getMinValue","getIndices","_createClass","key","get","Recycler","_ref","getType","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_queue","reduce","acc","cur","concat","findIndex","buffer","push","ensureBuffer","updateIndices","_props$step","step","maxCount","onProcess","count","_index","Math","max","startIndex","minValue","Number","MAX_SAFE_INTEGER","v","min","maxValue"],"mappings":"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"}
|
package/dist/recycler.esm.js
CHANGED
|
@@ -36,7 +36,6 @@ var DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';
|
|
|
36
36
|
var RECYCLER_THRESHOLD_INDEX_VALUE = 0;
|
|
37
37
|
var RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
|
|
38
38
|
var RECYCLER_BUFFER_SIZE = 10;
|
|
39
|
-
var RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;
|
|
40
39
|
|
|
41
40
|
var FixedBuffer = /*#__PURE__*/function () {
|
|
42
41
|
function FixedBuffer(props) {
|
|
@@ -107,7 +106,6 @@ var Recycler = /*#__PURE__*/function () {
|
|
|
107
106
|
this._getType = getType;
|
|
108
107
|
this._recyclerBufferSize = recyclerBufferSize;
|
|
109
108
|
this._thresholdIndexValue = thresholdIndexValue;
|
|
110
|
-
this._recyclerReservedBufferSize = Math.floor(recyclerBufferSize * RECYCLER_RESERVED_BUFFER_SIZE_RATIO);
|
|
111
109
|
this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;
|
|
112
110
|
recyclerTypes.forEach(function (type) {
|
|
113
111
|
return _this.addBuffer(type);
|
|
@@ -139,24 +137,24 @@ var Recycler = /*#__PURE__*/function () {
|
|
|
139
137
|
return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);
|
|
140
138
|
};
|
|
141
139
|
_proto.updateIndices = function updateIndices(props) {
|
|
142
|
-
var
|
|
140
|
+
var startIndex = props.startIndex,
|
|
143
141
|
safeRange = props.safeRange,
|
|
144
|
-
step = props.step,
|
|
142
|
+
_props$step = props.step,
|
|
143
|
+
step = _props$step === void 0 ? 1 : _props$step,
|
|
145
144
|
maxCount = props.maxCount,
|
|
146
|
-
|
|
147
|
-
var startIndex = Math.max(_startIndex, 0);
|
|
145
|
+
onProcess = props.onProcess;
|
|
148
146
|
var count = 0;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
if (count < maxCount) {
|
|
147
|
+
var _index = Math.max(startIndex, 0);
|
|
148
|
+
while (count < maxCount) {
|
|
149
|
+
if (_index >= this._thresholdIndexValue) {
|
|
150
|
+
var recyclerType = this._getType(_index);
|
|
154
151
|
var buffer = this.ensureBuffer(recyclerType);
|
|
155
|
-
buffer.place(
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
buffer.place(_index, safeRange);
|
|
153
|
+
if (typeof onProcess !== 'function' || onProcess(recyclerType, _index)) {
|
|
154
|
+
count += 1;
|
|
155
|
+
}
|
|
158
156
|
}
|
|
159
|
-
|
|
157
|
+
_index += step;
|
|
160
158
|
}
|
|
161
159
|
};
|
|
162
160
|
_proto.getMinValue = function getMinValue() {
|
package/dist/recycler.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recycler.esm.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\nexport const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;\n\nexport const defaultGetType = () => DEFAULT_RECYCLER_TYPE;\n","import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { SafeRange, FixedBufferProps } from './types';\nimport { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';\n\nclass FixedBuffer {\n private _bufferSet: IntegerBufferSet;\n private _thresholdIndexValue = 0;\n\n private _recyclerType: string;\n\n constructor(props: FixedBufferProps) {\n const {\n thresholdIndexValue = 0,\n bufferSize = RECYCLER_BUFFER_SIZE,\n recyclerType = DEFAULT_RECYCLER_TYPE,\n metaExtractor,\n indexExtractor,\n } = props;\n this._bufferSet = new IntegerBufferSet({\n bufferSize,\n metaExtractor,\n indexExtractor,\n name: recyclerType,\n });\n this._recyclerType = recyclerType;\n this._thresholdIndexValue = thresholdIndexValue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerType() {\n return this._recyclerType;\n }\n\n place(index: number, safeRange: SafeRange) {\n this._bufferSet.getPosition(index, safeRange);\n }\n\n getMaxValue() {\n return this._bufferSet.getMaxValue();\n }\n\n getMinValue() {\n return this._bufferSet.getMinValue();\n }\n\n getIndices() {\n return this._bufferSet.getIndices();\n }\n}\n\nexport default FixedBuffer;\n","import FixedBuffer from './FixedBuffer';\nimport { RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_RESERVED_BUFFER_SIZE_RATIO,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<FixedBuffer> = [];\n\n /**\n * start index\n */\n private _thresholdIndexValue = 0;\n private _recyclerReservedBufferPerBatch: number;\n /**\n * buffer size, the oversize node will run into recycle strategy\n */\n private _recyclerBufferSize: number;\n private _recyclerReservedBufferSize: number;\n private _metaExtractor: (index: number) => any;\n private _indexExtractor: (meta: any) => number;\n private _getType: (index: number) => string;\n\n constructor(props?: RecyclerProps) {\n const {\n getType,\n metaExtractor,\n indexExtractor,\n recyclerTypes = [],\n recyclerBufferSize = RECYCLER_BUFFER_SIZE,\n thresholdIndexValue = RECYCLER_THRESHOLD_INDEX_VALUE,\n recyclerReservedBufferPerBatch = RECYCLER_RESERVED_BUFFER_PER_BATCH,\n } = props || {};\n\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n this._getType = getType;\n this._recyclerBufferSize = recyclerBufferSize;\n this._thresholdIndexValue = thresholdIndexValue;\n this._recyclerReservedBufferSize = Math.floor(\n recyclerBufferSize * RECYCLER_RESERVED_BUFFER_SIZE_RATIO\n );\n this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;\n recyclerTypes.forEach((type) => this.addBuffer(type));\n }\n\n get queue() {\n return this._queue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerReservedBufferPerBatch() {\n return this._recyclerReservedBufferPerBatch;\n }\n\n getIndices() {\n return this._queue.reduce((acc, cur) => acc.concat(cur.getIndices()), []);\n }\n\n addBuffer(type: string) {\n if (!type) return null;\n const index = this._queue.findIndex(\n (buffer) => buffer.recyclerType === type\n );\n if (index !== -1) return this._queue[index];\n const buffer = new FixedBuffer({\n recyclerType: type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\n thresholdIndexValue: this._thresholdIndexValue,\n });\n this._queue.push(buffer);\n return buffer;\n }\n\n ensureBuffer(type: string) {\n return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: {\n startIndex: number;\n endIndex: number;\n };\n startIndex: number;\n maxCount: number;\n step: number;\n\n // /** the max index value, always be the length of data */\n maxIndex: number;\n }) {\n // this._queue.forEach((buffer) => buffer.start());\n const {\n startIndex: _startIndex,\n safeRange,\n step,\n maxCount,\n maxIndex,\n } = props;\n const startIndex = Math.max(_startIndex, 0);\n let count = 0;\n if (maxCount < 0) return null;\n for (\n let index = startIndex;\n step > 0 ? index <= maxIndex : index >= 0;\n index += step\n ) {\n if (index < this._thresholdIndexValue) continue;\n const recyclerType = this._getType(index);\n\n // itemLayout should not be a condition, may cause too many unLayout item\n if (count < maxCount) {\n const buffer = this.ensureBuffer(recyclerType);\n buffer.place(index, safeRange);\n } else {\n break;\n }\n\n if (index >= this._thresholdIndexValue) count++;\n }\n }\n\n getMinValue() {\n let minValue = Number.MAX_SAFE_INTEGER;\n this._queue.forEach((buffer) => {\n const v = buffer.getMinValue();\n if (typeof v === 'number') minValue = Math.min(v, minValue);\n });\n return minValue;\n }\n\n getMaxValue() {\n let maxValue = 0;\n this._queue.forEach((buffer) => {\n const v = buffer.getMaxValue();\n if (typeof v === 'number') maxValue = Math.max(v, maxValue);\n });\n return maxValue;\n }\n}\n\nexport default Recycler;\n\n// const origin = [163, 168, 142, 147, 152, 173, 178, 137, 157, 162]\n\n// const target = [163, 163, 142, 147, 152, 168, 173, 137, 157]\n\n// const next = [168, 168, 142, 147, 152, 173, 178, 137, 157, 162]\n\n// Next Sample\n// const origin = [35, 36, 37, 38, 39, 40, 41, 32, 33, 34]\n// const target = [35, 36, 37, 36, 37, 40, 41, 32, 33, 34]\n// const target = [35, 38, 39, 38, 39, 40, 41, 32, 33, 34]\n"],"names":["DEFAULT_RECYCLER_TYPE","RECYCLER_THRESHOLD_INDEX_VALUE","RECYCLER_RESERVED_BUFFER_PER_BATCH","RECYCLER_BUFFER_SIZE","RECYCLER_RESERVED_BUFFER_SIZE_RATIO","FixedBuffer","props","_props$thresholdIndex","thresholdIndexValue","_props$bufferSize","bufferSize","_props$recyclerType","recyclerType","metaExtractor","indexExtractor","_bufferSet","IntegerBufferSet","name","_recyclerType","_thresholdIndexValue","_proto","prototype","place","index","safeRange","getPosition","getMaxValue","getMinValue","getIndices","_createClass","key","get","Recycler","_ref","getType","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_recyclerReservedBufferSize","Math","floor","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_queue","reduce","acc","cur","concat","findIndex","buffer","push","ensureBuffer","updateIndices","_startIndex","startIndex","step","maxCount","maxIndex","max","count","minValue","Number","MAX_SAFE_INTEGER","v","min","maxValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recycler.esm.js","sources":["../src/common.ts","../src/FixedBuffer.ts","../src/index.ts"],"sourcesContent":["export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';\nexport const RECYCLER_THRESHOLD_INDEX_VALUE = 0;\nexport const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;\nexport const RECYCLER_BUFFER_SIZE = 10;\n// export const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;\n\nexport const defaultGetType = () => DEFAULT_RECYCLER_TYPE;\n","import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { SafeRange, FixedBufferProps } from './types';\nimport { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';\n\nclass FixedBuffer {\n private _bufferSet: IntegerBufferSet;\n private _thresholdIndexValue = 0;\n\n private _recyclerType: string;\n\n constructor(props: FixedBufferProps) {\n const {\n thresholdIndexValue = 0,\n bufferSize = RECYCLER_BUFFER_SIZE,\n recyclerType = DEFAULT_RECYCLER_TYPE,\n metaExtractor,\n indexExtractor,\n } = props;\n this._bufferSet = new IntegerBufferSet({\n bufferSize,\n metaExtractor,\n indexExtractor,\n name: recyclerType,\n });\n this._recyclerType = recyclerType;\n this._thresholdIndexValue = thresholdIndexValue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerType() {\n return this._recyclerType;\n }\n\n place(index: number, safeRange: SafeRange) {\n this._bufferSet.getPosition(index, safeRange);\n }\n\n getMaxValue() {\n return this._bufferSet.getMaxValue();\n }\n\n getMinValue() {\n return this._bufferSet.getMinValue();\n }\n\n getIndices() {\n return this._bufferSet.getIndices();\n }\n}\n\nexport default FixedBuffer;\n","import FixedBuffer from './FixedBuffer';\nimport { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n // RECYCLER_RESERVED_BUFFER_SIZE_RATIO,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<FixedBuffer> = [];\n\n /**\n * start index\n */\n private _thresholdIndexValue = 0;\n private _recyclerReservedBufferPerBatch: number;\n /**\n * buffer size, the oversize node will run into recycle strategy\n */\n private _recyclerBufferSize: number;\n private _metaExtractor: (index: number) => any;\n private _indexExtractor: (meta: any) => number;\n private _getType: (index: number) => string;\n\n constructor(props?: RecyclerProps) {\n const {\n getType,\n metaExtractor,\n indexExtractor,\n recyclerTypes = [],\n recyclerBufferSize = RECYCLER_BUFFER_SIZE,\n thresholdIndexValue = RECYCLER_THRESHOLD_INDEX_VALUE,\n recyclerReservedBufferPerBatch = RECYCLER_RESERVED_BUFFER_PER_BATCH,\n } = props || {};\n\n this._metaExtractor = metaExtractor;\n this._indexExtractor = indexExtractor;\n this._getType = getType;\n this._recyclerBufferSize = recyclerBufferSize;\n this._thresholdIndexValue = thresholdIndexValue;\n this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;\n recyclerTypes.forEach((type) => this.addBuffer(type));\n }\n\n get queue() {\n return this._queue;\n }\n\n get thresholdIndexValue() {\n return this._thresholdIndexValue;\n }\n\n get recyclerReservedBufferPerBatch() {\n return this._recyclerReservedBufferPerBatch;\n }\n\n getIndices() {\n return this._queue.reduce((acc, cur) => acc.concat(cur.getIndices()), []);\n }\n\n addBuffer(type: string) {\n if (!type) return null;\n const index = this._queue.findIndex(\n (buffer) => buffer.recyclerType === type\n );\n if (index !== -1) return this._queue[index];\n const buffer = new FixedBuffer({\n recyclerType: type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\n thresholdIndexValue: this._thresholdIndexValue,\n });\n this._queue.push(buffer);\n return buffer;\n }\n\n ensureBuffer(type: string) {\n return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: {\n startIndex: number;\n endIndex: number;\n };\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnProcess;\n }) {\n const { startIndex, safeRange, step = 1, maxCount, onProcess } = props;\n let count = 0;\n let _index = Math.max(startIndex, 0);\n while (count < maxCount) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.place(_index, safeRange);\n\n if (\n typeof onProcess !== 'function' ||\n onProcess(recyclerType, _index)\n ) {\n count += 1;\n }\n }\n _index += step;\n }\n }\n\n getMinValue() {\n let minValue = Number.MAX_SAFE_INTEGER;\n this._queue.forEach((buffer) => {\n const v = buffer.getMinValue();\n if (typeof v === 'number') minValue = Math.min(v, minValue);\n });\n return minValue;\n }\n\n getMaxValue() {\n let maxValue = 0;\n this._queue.forEach((buffer) => {\n const v = buffer.getMaxValue();\n if (typeof v === 'number') maxValue = Math.max(v, maxValue);\n });\n return maxValue;\n }\n}\n\nexport default Recycler;\n"],"names":["DEFAULT_RECYCLER_TYPE","RECYCLER_THRESHOLD_INDEX_VALUE","RECYCLER_RESERVED_BUFFER_PER_BATCH","RECYCLER_BUFFER_SIZE","FixedBuffer","props","_props$thresholdIndex","thresholdIndexValue","_props$bufferSize","bufferSize","_props$recyclerType","recyclerType","metaExtractor","indexExtractor","_bufferSet","IntegerBufferSet","name","_recyclerType","_thresholdIndexValue","_proto","prototype","place","index","safeRange","getPosition","getMaxValue","getMinValue","getIndices","_createClass","key","get","Recycler","_ref","getType","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_queue","reduce","acc","cur","concat","findIndex","buffer","push","ensureBuffer","updateIndices","startIndex","_props$step","step","maxCount","onProcess","count","_index","Math","max","minValue","Number","MAX_SAFE_INTEGER","v","min","maxValue"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x-oasis/recycler",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
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/integer-buffer-set": "0.1.
|
|
19
|
+
"@x-oasis/integer-buffer-set": "0.1.21"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsdx build --tsconfig tsconfig.build.json",
|
package/src/common.ts
CHANGED
|
@@ -2,6 +2,6 @@ export const DEFAULT_RECYCLER_TYPE = '__default_recycler_buffer__';
|
|
|
2
2
|
export const RECYCLER_THRESHOLD_INDEX_VALUE = 0;
|
|
3
3
|
export const RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
|
|
4
4
|
export const RECYCLER_BUFFER_SIZE = 10;
|
|
5
|
-
export const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;
|
|
5
|
+
// export const RECYCLER_RESERVED_BUFFER_SIZE_RATIO = 1.5;
|
|
6
6
|
|
|
7
7
|
export const defaultGetType = () => DEFAULT_RECYCLER_TYPE;
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import FixedBuffer from './FixedBuffer';
|
|
2
|
-
import { RecyclerProps } from './types';
|
|
2
|
+
import { OnProcess, RecyclerProps } from './types';
|
|
3
3
|
import {
|
|
4
4
|
DEFAULT_RECYCLER_TYPE,
|
|
5
5
|
RECYCLER_BUFFER_SIZE,
|
|
6
6
|
RECYCLER_RESERVED_BUFFER_PER_BATCH,
|
|
7
|
-
RECYCLER_RESERVED_BUFFER_SIZE_RATIO,
|
|
7
|
+
// RECYCLER_RESERVED_BUFFER_SIZE_RATIO,
|
|
8
8
|
RECYCLER_THRESHOLD_INDEX_VALUE,
|
|
9
9
|
} from './common';
|
|
10
10
|
|
|
@@ -20,7 +20,6 @@ class Recycler {
|
|
|
20
20
|
* buffer size, the oversize node will run into recycle strategy
|
|
21
21
|
*/
|
|
22
22
|
private _recyclerBufferSize: number;
|
|
23
|
-
private _recyclerReservedBufferSize: number;
|
|
24
23
|
private _metaExtractor: (index: number) => any;
|
|
25
24
|
private _indexExtractor: (meta: any) => number;
|
|
26
25
|
private _getType: (index: number) => string;
|
|
@@ -41,9 +40,6 @@ class Recycler {
|
|
|
41
40
|
this._getType = getType;
|
|
42
41
|
this._recyclerBufferSize = recyclerBufferSize;
|
|
43
42
|
this._thresholdIndexValue = thresholdIndexValue;
|
|
44
|
-
this._recyclerReservedBufferSize = Math.floor(
|
|
45
|
-
recyclerBufferSize * RECYCLER_RESERVED_BUFFER_SIZE_RATIO
|
|
46
|
-
);
|
|
47
43
|
this._recyclerReservedBufferPerBatch = recyclerReservedBufferPerBatch;
|
|
48
44
|
recyclerTypes.forEach((type) => this.addBuffer(type));
|
|
49
45
|
}
|
|
@@ -95,39 +91,26 @@ class Recycler {
|
|
|
95
91
|
};
|
|
96
92
|
startIndex: number;
|
|
97
93
|
maxCount: number;
|
|
98
|
-
step
|
|
99
|
-
|
|
100
|
-
// /** the max index value, always be the length of data */
|
|
101
|
-
maxIndex: number;
|
|
94
|
+
step?: number;
|
|
95
|
+
onProcess?: OnProcess;
|
|
102
96
|
}) {
|
|
103
|
-
|
|
104
|
-
const {
|
|
105
|
-
startIndex: _startIndex,
|
|
106
|
-
safeRange,
|
|
107
|
-
step,
|
|
108
|
-
maxCount,
|
|
109
|
-
maxIndex,
|
|
110
|
-
} = props;
|
|
111
|
-
const startIndex = Math.max(_startIndex, 0);
|
|
97
|
+
const { startIndex, safeRange, step = 1, maxCount, onProcess } = props;
|
|
112
98
|
let count = 0;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
index += step
|
|
118
|
-
) {
|
|
119
|
-
if (index < this._thresholdIndexValue) continue;
|
|
120
|
-
const recyclerType = this._getType(index);
|
|
121
|
-
|
|
122
|
-
// itemLayout should not be a condition, may cause too many unLayout item
|
|
123
|
-
if (count < maxCount) {
|
|
99
|
+
let _index = Math.max(startIndex, 0);
|
|
100
|
+
while (count < maxCount) {
|
|
101
|
+
if (_index >= this._thresholdIndexValue) {
|
|
102
|
+
const recyclerType = this._getType(_index);
|
|
124
103
|
const buffer = this.ensureBuffer(recyclerType);
|
|
125
|
-
buffer.place(
|
|
126
|
-
|
|
127
|
-
|
|
104
|
+
buffer.place(_index, safeRange);
|
|
105
|
+
|
|
106
|
+
if (
|
|
107
|
+
typeof onProcess !== 'function' ||
|
|
108
|
+
onProcess(recyclerType, _index)
|
|
109
|
+
) {
|
|
110
|
+
count += 1;
|
|
111
|
+
}
|
|
128
112
|
}
|
|
129
|
-
|
|
130
|
-
if (index >= this._thresholdIndexValue) count++;
|
|
113
|
+
_index += step;
|
|
131
114
|
}
|
|
132
115
|
}
|
|
133
116
|
|
|
@@ -151,14 +134,3 @@ class Recycler {
|
|
|
151
134
|
}
|
|
152
135
|
|
|
153
136
|
export default Recycler;
|
|
154
|
-
|
|
155
|
-
// const origin = [163, 168, 142, 147, 152, 173, 178, 137, 157, 162]
|
|
156
|
-
|
|
157
|
-
// const target = [163, 163, 142, 147, 152, 168, 173, 137, 157]
|
|
158
|
-
|
|
159
|
-
// const next = [168, 168, 142, 147, 152, 173, 178, 137, 157, 162]
|
|
160
|
-
|
|
161
|
-
// Next Sample
|
|
162
|
-
// const origin = [35, 36, 37, 38, 39, 40, 41, 32, 33, 34]
|
|
163
|
-
// const target = [35, 36, 37, 36, 37, 40, 41, 32, 33, 34]
|
|
164
|
-
// const target = [35, 38, 39, 38, 39, 40, 41, 32, 33, 34]
|