@x-oasis/recycler 0.1.31 → 0.1.32

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 CHANGED
@@ -1,5 +1,6 @@
1
1
  import IntegerBufferSet from '@x-oasis/integer-buffer-set';
2
- import { OnProcess, RecyclerProps } from './types';
2
+ import { OnRecyclerProcess, RecyclerProps, SafeRange } from './types';
3
+ export { OnRecyclerProcess, RecyclerProps };
3
4
  declare class Recycler {
4
5
  private _queue;
5
6
  private _thresholdIndexValue;
@@ -17,14 +18,11 @@ declare class Recycler {
17
18
  ensureBuffer(type: string): IntegerBufferSet<any>;
18
19
  reset(): void;
19
20
  updateIndices(props: {
20
- safeRange: {
21
- startIndex: number;
22
- endIndex: number;
23
- };
21
+ safeRange: SafeRange;
24
22
  startIndex: number;
25
23
  maxCount: number;
26
24
  step?: number;
27
- onProcess?: OnProcess;
25
+ onProcess?: OnRecyclerProcess;
28
26
  }): void;
29
27
  getMinValue(): number;
30
28
  getMaxValue(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"recycler.cjs.development.js","sources":["../src/common.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 { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","Recycler","props","_ref","getType","metaExtractor","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","startIndex","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","_createClass","key","get"],"mappings":"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"}
1
+ {"version":3,"file":"recycler.cjs.development.js","sources":["../src/common.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 { OnRecyclerProcess, RecyclerProps, SafeRange } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\nexport { OnRecyclerProcess, RecyclerProps };\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: SafeRange;\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnRecyclerProcess;\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","Recycler","props","_ref","getType","metaExtractor","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","startIndex","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","_createClass","key","get"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAMA,qBAAqB,GAAG,6BAA6B;AAC3D,IAAMC,8BAA8B,GAAG,CAAC;AACxC,IAAMC,kCAAkC,GAAG,CAAC;AAC5C,IAAMC,oBAAoB,GAAG,EAAE;;ACIpB,IAGZC,QAAQ;EAgBZ,SAAAA,SAAYC,KAAqB;;IAfzB,WAAM,GAA4B,EAAE;IAKpC,yBAAoB,GAAG,CAAC;IAW9B,IAAAC,IAAA,GAQID,KAAK,IAAI,EAAE;MAPbE,OAAO,GAAAD,IAAA,CAAPC,OAAO;MACPC,aAAa,GAAAF,IAAA,CAAbE,aAAa;MACbC,cAAc,GAAAH,IAAA,CAAdG,cAAc;MAAAC,kBAAA,GAAAJ,IAAA,CACdK,aAAa;MAAbA,aAAa,GAAAD,kBAAA,cAAG,EAAE,GAAAA,kBAAA;MAAAE,qBAAA,GAAAN,IAAA,CAClBO,kBAAkB;MAAlBA,kBAAkB,GAAAD,qBAAA,cAAGT,oBAAoB,GAAAS,qBAAA;MAAAE,qBAAA,GAAAR,IAAA,CACzCS,mBAAmB;MAAnBA,mBAAmB,GAAAD,qBAAA,cAAGb,8BAA8B,GAAAa,qBAAA;MAAAE,qBAAA,GAAAV,IAAA,CACpDW,8BAA8B;MAA9BA,8BAA8B,GAAAD,qBAAA,cAAGd,kCAAkC,GAAAc,qBAAA;IAGrE,IAAI,CAACE,cAAc,GAAGV,aAAa;IACnC,IAAI,CAACW,eAAe,GAAGV,cAAc;IACrC,IAAI,CAACW,QAAQ,GAAGb,OAAO;IACvB,IAAI,CAACc,mBAAmB,GAAGR,kBAAkB;IAC7C,IAAI,CAACS,oBAAoB,GAAGP,mBAAmB;IAC/C,IAAI,CAACQ,+BAA+B,GAAGN,8BAA8B;IACrEN,aAAa,CAACa,OAAO,CAAC,UAACC,IAAI;MAAA,OAAKC,KAAI,CAACC,SAAS,CAACF,IAAI,CAAC;MAAC;;EACtD,IAAAG,MAAA,GAAAxB,QAAA,CAAAyB,SAAA;EAAAD,MAAA,CAcDE,UAAU,GAAV,SAAAA;IACE,OAAO,IAAI,CAACC,MAAM,CAACC,MAAM,CAAC,UAACC,GAAG,EAAEC,GAAG;MAAA,OAAKD,GAAG,CAACE,MAAM,CAACD,GAAG,CAACJ,UAAU,EAAE,CAAC;OAAE,EAAE,CAAC;GAC1E;EAAAF,MAAA,CAEDD,SAAS,GAAT,SAAAA,UAAUF,IAAY;IACpB,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;IACtB,IAAMW,KAAK,GAAG,IAAI,CAACL,MAAM,CAACM,SAAS,CAAC,UAACC,MAAM;MAAA,OAAKA,MAAM,CAAC/B,OAAO,EAAE,KAAKkB,IAAI;MAAC;IAC1E,IAAIW,KAAK,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAACL,MAAM,CAACK,KAAK,CAAC;IAC3C,IAAME,MAAM,GAAG,IAAIC,gBAAgB,CAAC;MAClCd,IAAI,EAAJA,IAAI;MACJjB,aAAa,EAAE,IAAI,CAACU,cAAc;MAClCT,cAAc,EAAE,IAAI,CAACU,eAAe;MACpCqB,UAAU,EAAE,IAAI,CAACnB;KAClB,CAAC;IACF,IAAI,CAACU,MAAM,CAACU,IAAI,CAACH,MAAM,CAAC;IACxB,OAAOA,MAAM;GACd;EAAAV,MAAA,CAEDc,YAAY,GAAZ,SAAAA,aAAajB,IAAY;IACvB,OAAO,IAAI,CAACE,SAAS,CAACF,IAAI,IAAIzB,qBAAqB,CAAC;GACrD;EAAA4B,MAAA,CAEDe,KAAK,GAAL,SAAAA;IACE,IAAI,CAACC,KAAK,CAACpB,OAAO,CAAC,UAACc,MAAM;MAAA,OAAKA,MAAM,CAACK,KAAK,EAAE;MAAC;GAC/C;EAAAf,MAAA,CAEDiB,aAAa,GAAb,SAAAA,cAAcxC,KASb;IACC,IAAQyC,UAAU,GAA+CzC,KAAK,CAA9DyC,UAAU;MAAEC,SAAS,GAAoC1C,KAAK,CAAlD0C,SAAS;MAAAC,WAAA,GAAoC3C,KAAK,CAAvC4C,IAAI;MAAJA,IAAI,GAAAD,WAAA,cAAG,CAAC,GAAAA,WAAA;MAAEE,QAAQ,GAAgB7C,KAAK,CAA7B6C,QAAQ;MAAEC,SAAS,GAAK9C,KAAK,CAAnB8C,SAAS;IAC5D,IAAIC,KAAK,GAAG,CAAC;IACb,IAAIC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACT,UAAU,EAAE,CAAC,CAAC;IACpC,OAAOM,KAAK,GAAGF,QAAQ,IAAI,IAAI,CAAChC,cAAc,CAACmC,MAAM,CAAC,EAAE;MACtD,IAAIA,MAAM,IAAI,IAAI,CAAC/B,oBAAoB,EAAE;QACvC,IAAMkC,YAAY,GAAG,IAAI,CAACpC,QAAQ,CAACiC,MAAM,CAAC;QAC1C,IAAMf,MAAM,GAAG,IAAI,CAACI,YAAY,CAACc,YAAY,CAAC;QAC9ClB,MAAM,CAACmB,WAAW,CAACJ,MAAM,EAAEN,SAAS,CAAC;QAErC,IACE,OAAOI,SAAS,KAAK,UAAU,IAC/BA,SAAS,CAACK,YAAY,EAAEH,MAAM,CAAC,EAC/B;UACAD,KAAK,IAAI,CAAC;;;MAGdC,MAAM,IAAIJ,IAAI;;GAEjB;EAAArB,MAAA,CAED8B,WAAW,GAAX,SAAAA;IACE,IAAIC,QAAQ,GAAGC,MAAM,CAACC,gBAAgB;IACtC,IAAI,CAAC9B,MAAM,CAACP,OAAO,CAAC,UAACc,MAAM;MACzB,IAAMwB,CAAC,GAAGxB,MAAM,CAACoB,WAAW,EAAE;MAC9B,IAAI,OAAOI,CAAC,KAAK,QAAQ,EAAEH,QAAQ,GAAGL,IAAI,CAACS,GAAG,CAACD,CAAC,EAAEH,QAAQ,CAAC;KAC5D,CAAC;IACF,OAAOA,QAAQ;GAChB;EAAA/B,MAAA,CAEDoC,WAAW,GAAX,SAAAA;IACE,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAI,CAAClC,MAAM,CAACP,OAAO,CAAC,UAACc,MAAM;MACzB,IAAMwB,CAAC,GAAGxB,MAAM,CAAC0B,WAAW,EAAE;MAC9B,IAAI,OAAOF,CAAC,KAAK,QAAQ,EAAEG,QAAQ,GAAGX,IAAI,CAACC,GAAG,CAACO,CAAC,EAAEG,QAAQ,CAAC;KAC5D,CAAC;IACF,OAAOA,QAAQ;GAChB;EAAAC,YAAA,CAAA9D,QAAA;IAAA+D,GAAA;IAAAC,GAAA,EApFD,SAAAA;MACE,OAAO,IAAI,CAACrC,MAAM;;;IACnBoC,GAAA;IAAAC,GAAA,EAED,SAAAA;MACE,OAAO,IAAI,CAAC9C,oBAAoB;;;IACjC6C,GAAA;IAAAC,GAAA,EAED,SAAAA;MACE,OAAO,IAAI,CAAC7C,+BAA+B;;;EAC5C,OAAAnB,QAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"recycler.cjs.production.min.js","sources":["../src/index.ts","../src/common.ts"],"sourcesContent":["import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","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"],"names":["Recycler","props","this","_ref","getType","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","startIndex","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","key","get"],"mappings":"iMAyBE,SAAAA,EAAYC,cAfJC,YAAkC,GAKlCA,0BAAuB,EAW7B,IAAAC,EAQIF,GAAS,GAPXG,EAAOD,EAAPC,QAEAC,EAAcF,EAAdE,eAAcC,EAAAH,EACdI,cAAAA,WAAaD,EAAG,GAAEA,EAAAE,EAAAL,EAClBM,mBAAAA,WAAkBD,EC5BY,GD4BWA,EAAAE,EAAAP,EACzCQ,oBAAAA,WAAmBD,EC/BqB,ED+BYA,EAAAE,EAAAT,EACpDU,+BAAAA,WAA8BD,EC/Bc,ED+BuBA,EAGrEV,KAAKY,eARUX,EAAbY,cASFb,KAAKc,gBAAkBX,EACvBH,KAAKe,SAAWb,EAChBF,KAAKgB,oBAAsBT,EAC3BP,KAAKiB,qBAAuBR,EAC5BT,KAAKkB,gCAAkCP,EACvCN,EAAcc,SAAQ,SAACC,GAAI,OAAKC,EAAKC,UAAUF,MAChD,QAAAG,EAAAzB,EAAA0B,UAYA,OAZAD,EAcDE,WAAA,WACE,OAAOzB,KAAK0B,OAAOC,QAAO,SAACC,EAAKC,GAAG,OAAKD,EAAIE,OAAOD,EAAIJ,gBAAe,KACvEF,EAEDD,UAAA,SAAUF,GACR,IAAKA,EAAM,OAAO,KAClB,IAAMW,EAAQ/B,KAAK0B,OAAOM,WAAU,SAACC,GAAM,OAAKA,EAAO/B,YAAckB,KACrE,IAAe,IAAXW,EAAc,OAAO/B,KAAK0B,OAAOK,GACrC,IAAME,EAAS,IAAIC,EAAiB,CAClCd,KAAAA,EACAP,cAAeb,KAAKY,eACpBT,eAAgBH,KAAKc,gBACrBqB,WAAYnC,KAAKgB,sBAGnB,OADAhB,KAAK0B,OAAOU,KAAKH,GACVA,GACRV,EAEDc,aAAA,SAAajB,GACX,OAAOpB,KAAKsB,UAAUF,GC5EW,gCD6ElCG,EAEDe,MAAA,WACEtC,KAAKuC,MAAMpB,SAAQ,SAACc,GAAM,OAAKA,EAAOK,YACvCf,EAEDiB,cAAA,SAAczC,GAgBZ,IAHA,IAAoB0C,EAA6C1C,EAA7C0C,UAASC,EAAoC3C,EAAlC4C,KAAAA,WAAID,EAAG,EAACA,EAAEE,EAAwB7C,EAAxB6C,SAAUC,EAAc9C,EAAd8C,UAC/CC,EAAQ,EACRC,EAASC,KAAKC,IAF+ClD,EAAzDmD,WAE0B,GAC3BJ,EAAQF,GAAY5C,KAAKY,eAAemC,IAAS,CACtD,GAAIA,GAAU/C,KAAKiB,qBAAsB,CACvC,IAAMkC,EAAenD,KAAKe,SAASgC,GACpB/C,KAAKqC,aAAac,GAC1BC,YAAYL,EAAQN,IAGJ,mBAAdI,GACPA,EAAUM,EAAcJ,MAExBD,GAAS,GAGbC,GAAUJ,IAEbpB,EAED8B,YAAA,WACE,IAAIC,EAAWC,OAAOC,iBAKtB,OAJAxD,KAAK0B,OAAOP,SAAQ,SAACc,GACnB,IAAMwB,EAAIxB,EAAOoB,cACA,iBAANI,IAAgBH,EAAWN,KAAKU,IAAID,EAAGH,OAE7CA,GACR/B,EAEDoC,YAAA,WACE,IAAIC,EAAW,EAKf,OAJA5D,KAAK0B,OAAOP,SAAQ,SAACc,GACnB,IAAMwB,EAAIxB,EAAO0B,cACA,iBAANF,IAAgBG,EAAWZ,KAAKC,IAAIQ,EAAGG,OAE7CA,KACR9D,OAAA+D,YAAAC,IAvFD,WACE,OAAO9D,KAAK0B,UACbmC,0BAAAC,IAED,WACE,OAAO9D,KAAKiB,wBACb4C,qCAAAC,IAED,WACE,OAAO9D,KAAKkB,kiBACbpB"}
1
+ {"version":3,"file":"recycler.cjs.production.min.js","sources":["../src/index.ts","../src/common.ts"],"sourcesContent":["import IntegerBufferSet from '@x-oasis/integer-buffer-set';\nimport { OnRecyclerProcess, RecyclerProps, SafeRange } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\nexport { OnRecyclerProcess, RecyclerProps };\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: SafeRange;\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnRecyclerProcess;\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","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"],"names":["Recycler","props","this","_ref","getType","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","startIndex","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","key","get"],"mappings":"iMA0BE,SAAAA,EAAYC,cAfJC,YAAkC,GAKlCA,0BAAuB,EAW7B,IAAAC,EAQIF,GAAS,GAPXG,EAAOD,EAAPC,QAEAC,EAAcF,EAAdE,eAAcC,EAAAH,EACdI,cAAAA,WAAaD,EAAG,GAAEA,EAAAE,EAAAL,EAClBM,mBAAAA,WAAkBD,EC7BY,GD6BWA,EAAAE,EAAAP,EACzCQ,oBAAAA,WAAmBD,EChCqB,EDgCYA,EAAAE,EAAAT,EACpDU,+BAAAA,WAA8BD,EChCc,EDgCuBA,EAGrEV,KAAKY,eARUX,EAAbY,cASFb,KAAKc,gBAAkBX,EACvBH,KAAKe,SAAWb,EAChBF,KAAKgB,oBAAsBT,EAC3BP,KAAKiB,qBAAuBR,EAC5BT,KAAKkB,gCAAkCP,EACvCN,EAAcc,SAAQ,SAACC,GAAI,OAAKC,EAAKC,UAAUF,MAChD,QAAAG,EAAAzB,EAAA0B,UAYA,OAZAD,EAcDE,WAAA,WACE,OAAOzB,KAAK0B,OAAOC,QAAO,SAACC,EAAKC,GAAG,OAAKD,EAAIE,OAAOD,EAAIJ,gBAAe,KACvEF,EAEDD,UAAA,SAAUF,GACR,IAAKA,EAAM,OAAO,KAClB,IAAMW,EAAQ/B,KAAK0B,OAAOM,WAAU,SAACC,GAAM,OAAKA,EAAO/B,YAAckB,KACrE,IAAe,IAAXW,EAAc,OAAO/B,KAAK0B,OAAOK,GACrC,IAAME,EAAS,IAAIC,EAAiB,CAClCd,KAAAA,EACAP,cAAeb,KAAKY,eACpBT,eAAgBH,KAAKc,gBACrBqB,WAAYnC,KAAKgB,sBAGnB,OADAhB,KAAK0B,OAAOU,KAAKH,GACVA,GACRV,EAEDc,aAAA,SAAajB,GACX,OAAOpB,KAAKsB,UAAUF,GC7EW,gCD8ElCG,EAEDe,MAAA,WACEtC,KAAKuC,MAAMpB,SAAQ,SAACc,GAAM,OAAKA,EAAOK,YACvCf,EAEDiB,cAAA,SAAczC,GAaZ,IAHA,IAAoB0C,EAA6C1C,EAA7C0C,UAASC,EAAoC3C,EAAlC4C,KAAAA,WAAID,EAAG,EAACA,EAAEE,EAAwB7C,EAAxB6C,SAAUC,EAAc9C,EAAd8C,UAC/CC,EAAQ,EACRC,EAASC,KAAKC,IAF+ClD,EAAzDmD,WAE0B,GAC3BJ,EAAQF,GAAY5C,KAAKY,eAAemC,IAAS,CACtD,GAAIA,GAAU/C,KAAKiB,qBAAsB,CACvC,IAAMkC,EAAenD,KAAKe,SAASgC,GACpB/C,KAAKqC,aAAac,GAC1BC,YAAYL,EAAQN,IAGJ,mBAAdI,GACPA,EAAUM,EAAcJ,MAExBD,GAAS,GAGbC,GAAUJ,IAEbpB,EAED8B,YAAA,WACE,IAAIC,EAAWC,OAAOC,iBAKtB,OAJAxD,KAAK0B,OAAOP,SAAQ,SAACc,GACnB,IAAMwB,EAAIxB,EAAOoB,cACA,iBAANI,IAAgBH,EAAWN,KAAKU,IAAID,EAAGH,OAE7CA,GACR/B,EAEDoC,YAAA,WACE,IAAIC,EAAW,EAKf,OAJA5D,KAAK0B,OAAOP,SAAQ,SAACc,GACnB,IAAMwB,EAAIxB,EAAO0B,cACA,iBAANF,IAAgBG,EAAWZ,KAAKC,IAAIQ,EAAGG,OAE7CA,KACR9D,OAAA+D,YAAAC,IApFD,WACE,OAAO9D,KAAK0B,UACbmC,0BAAAC,IAED,WACE,OAAO9D,KAAKiB,wBACb4C,qCAAAC,IAED,WACE,OAAO9D,KAAKkB,kiBACbpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"recycler.esm.js","sources":["../src/common.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 { OnProcess, RecyclerProps } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","Recycler","props","_ref","getType","metaExtractor","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","startIndex","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","_createClass","key","get"],"mappings":"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"}
1
+ {"version":3,"file":"recycler.esm.js","sources":["../src/common.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 { OnRecyclerProcess, RecyclerProps, SafeRange } from './types';\nimport {\n DEFAULT_RECYCLER_TYPE,\n RECYCLER_BUFFER_SIZE,\n RECYCLER_RESERVED_BUFFER_PER_BATCH,\n RECYCLER_THRESHOLD_INDEX_VALUE,\n} from './common';\nexport { OnRecyclerProcess, RecyclerProps };\n\nclass Recycler {\n private _queue: Array<IntegerBufferSet> = [];\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((buffer) => buffer.getType() === type);\n if (index !== -1) return this._queue[index];\n const buffer = new IntegerBufferSet({\n type,\n metaExtractor: this._metaExtractor,\n indexExtractor: this._indexExtractor,\n bufferSize: this._recyclerBufferSize,\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 reset() {\n this.queue.forEach((buffer) => buffer.reset());\n }\n\n updateIndices(props: {\n /**\n * index in range should not be recycled\n */\n safeRange: SafeRange;\n startIndex: number;\n maxCount: number;\n step?: number;\n onProcess?: OnRecyclerProcess;\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 && this._metaExtractor(_index)) {\n if (_index >= this._thresholdIndexValue) {\n const recyclerType = this._getType(_index);\n const buffer = this.ensureBuffer(recyclerType);\n buffer.getPosition(_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","Recycler","props","_ref","getType","metaExtractor","indexExtractor","_ref$recyclerTypes","recyclerTypes","_ref$recyclerBufferSi","recyclerBufferSize","_ref$thresholdIndexVa","thresholdIndexValue","_ref$recyclerReserved","recyclerReservedBufferPerBatch","_metaExtractor","_indexExtractor","_getType","_recyclerBufferSize","_thresholdIndexValue","_recyclerReservedBufferPerBatch","forEach","type","_this","addBuffer","_proto","prototype","getIndices","_queue","reduce","acc","cur","concat","index","findIndex","buffer","IntegerBufferSet","bufferSize","push","ensureBuffer","reset","queue","updateIndices","startIndex","safeRange","_props$step","step","maxCount","onProcess","count","_index","Math","max","recyclerType","getPosition","getMinValue","minValue","Number","MAX_SAFE_INTEGER","v","min","getMaxValue","maxValue","_createClass","key","get"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -3,7 +3,7 @@ export declare type RecyclerProps = {
3
3
  recyclerBufferSize?: number;
4
4
  thresholdIndexValue?: number;
5
5
  recyclerReservedBufferPerBatch?: number;
6
- metaExtractor?: (index: number) => any;
6
+ metaExtractor?: (index: number) => ItemMeta;
7
7
  indexExtractor?: (meta: any) => number;
8
8
  getType?: (index: number) => string;
9
9
  };
@@ -11,18 +11,5 @@ export declare type SafeRange = {
11
11
  startIndex: number;
12
12
  endIndex: number;
13
13
  };
14
- export declare type FixedBufferProps = {
15
- thresholdIndexValue?: number;
16
- bufferSize?: number;
17
- recyclerType?: string;
18
- metaExtractor?: (index: number) => any;
19
- indexExtractor?: (meta: any) => number;
20
- };
21
14
  export declare type ItemMeta = any;
22
- export declare type FixedBufferStateItem = {
23
- targetIndex: number;
24
- recyclerKey: string;
25
- itemMeta: any;
26
- };
27
- export declare type FixedBufferState = Array<FixedBufferStateItem>;
28
- export declare type OnProcess = (type?: string, index?: number) => boolean;
15
+ export declare type OnRecyclerProcess = (type?: string, index?: number) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-oasis/recycler",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
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.31"
19
+ "@x-oasis/integer-buffer-set": "0.1.32"
20
20
  },
21
21
  "scripts": {
22
22
  "build": "tsdx build --tsconfig tsconfig.build.json",
package/src/index.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import IntegerBufferSet from '@x-oasis/integer-buffer-set';
2
- import { OnProcess, RecyclerProps } from './types';
2
+ import { OnRecyclerProcess, RecyclerProps, SafeRange } from './types';
3
3
  import {
4
4
  DEFAULT_RECYCLER_TYPE,
5
5
  RECYCLER_BUFFER_SIZE,
6
6
  RECYCLER_RESERVED_BUFFER_PER_BATCH,
7
7
  RECYCLER_THRESHOLD_INDEX_VALUE,
8
8
  } from './common';
9
+ export { OnRecyclerProcess, RecyclerProps };
9
10
 
10
11
  class Recycler {
11
12
  private _queue: Array<IntegerBufferSet> = [];
@@ -85,14 +86,11 @@ class Recycler {
85
86
  /**
86
87
  * index in range should not be recycled
87
88
  */
88
- safeRange: {
89
- startIndex: number;
90
- endIndex: number;
91
- };
89
+ safeRange: SafeRange;
92
90
  startIndex: number;
93
91
  maxCount: number;
94
92
  step?: number;
95
- onProcess?: OnProcess;
93
+ onProcess?: OnRecyclerProcess;
96
94
  }) {
97
95
  const { startIndex, safeRange, step = 1, maxCount, onProcess } = props;
98
96
  let count = 0;
package/src/types.ts CHANGED
@@ -3,7 +3,7 @@ export type RecyclerProps = {
3
3
  recyclerBufferSize?: number;
4
4
  thresholdIndexValue?: number;
5
5
  recyclerReservedBufferPerBatch?: number;
6
- metaExtractor?: (index: number) => any;
6
+ metaExtractor?: (index: number) => ItemMeta;
7
7
  indexExtractor?: (meta: any) => number;
8
8
  getType?: (index: number) => string;
9
9
  };
@@ -13,30 +13,6 @@ export type SafeRange = {
13
13
  endIndex: number;
14
14
  };
15
15
 
16
- export type FixedBufferProps = {
17
- /**
18
- * index which start to replace
19
- */
20
- thresholdIndexValue?: number;
21
- /**
22
- * max size
23
- */
24
- bufferSize?: number;
25
-
26
- recyclerType?: string;
27
-
28
- metaExtractor?: (index: number) => any;
29
- indexExtractor?: (meta: any) => number;
30
- };
31
-
32
16
  export type ItemMeta = any;
33
17
 
34
- export type FixedBufferStateItem = {
35
- targetIndex: number;
36
- recyclerKey: string;
37
- itemMeta: any;
38
- };
39
-
40
- export type FixedBufferState = Array<FixedBufferStateItem>;
41
-
42
- export type OnProcess = (type?: string, index?: number) => boolean;
18
+ export type OnRecyclerProcess = (type?: string, index?: number) => boolean;