@x-oasis/recycler 0.1.29 → 0.1.31

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,4 +1,4 @@
1
- import FixedBuffer from './FixedBuffer';
1
+ import IntegerBufferSet from '@x-oasis/integer-buffer-set';
2
2
  import { OnProcess, RecyclerProps } from './types';
3
3
  declare class Recycler {
4
4
  private _queue;
@@ -9,12 +9,13 @@ declare class Recycler {
9
9
  private _indexExtractor;
10
10
  private _getType;
11
11
  constructor(props?: RecyclerProps);
12
- get queue(): FixedBuffer[];
12
+ get queue(): IntegerBufferSet<any>[];
13
13
  get thresholdIndexValue(): number;
14
14
  get recyclerReservedBufferPerBatch(): number;
15
15
  getIndices(): any[];
16
- addBuffer(type: string): FixedBuffer;
17
- ensureBuffer(type: string): FixedBuffer;
16
+ addBuffer(type: string): IntegerBufferSet<any>;
17
+ ensureBuffer(type: string): IntegerBufferSet<any>;
18
+ reset(): void;
18
19
  updateIndices(props: {
19
20
  safeRange: {
20
21
  startIndex: number;
@@ -43,53 +43,6 @@ var RECYCLER_THRESHOLD_INDEX_VALUE = 0;
43
43
  var RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
44
44
  var RECYCLER_BUFFER_SIZE = 10;
45
45
 
46
- var FixedBuffer = /*#__PURE__*/function () {
47
- function FixedBuffer(props) {
48
- this._thresholdIndexValue = 0;
49
- var _props$thresholdIndex = props.thresholdIndexValue,
50
- thresholdIndexValue = _props$thresholdIndex === void 0 ? 0 : _props$thresholdIndex,
51
- _props$bufferSize = props.bufferSize,
52
- bufferSize = _props$bufferSize === void 0 ? RECYCLER_BUFFER_SIZE : _props$bufferSize,
53
- _props$recyclerType = props.recyclerType,
54
- recyclerType = _props$recyclerType === void 0 ? DEFAULT_RECYCLER_TYPE : _props$recyclerType,
55
- metaExtractor = props.metaExtractor,
56
- indexExtractor = props.indexExtractor;
57
- this._bufferSet = new IntegerBufferSet({
58
- bufferSize: bufferSize,
59
- metaExtractor: metaExtractor,
60
- indexExtractor: indexExtractor,
61
- name: recyclerType
62
- });
63
- this._recyclerType = recyclerType;
64
- this._thresholdIndexValue = thresholdIndexValue;
65
- }
66
- var _proto = FixedBuffer.prototype;
67
- _proto.place = function place(index, safeRange) {
68
- this._bufferSet.getPosition(index, safeRange);
69
- };
70
- _proto.getMaxValue = function getMaxValue() {
71
- return this._bufferSet.getMaxValue();
72
- };
73
- _proto.getMinValue = function getMinValue() {
74
- return this._bufferSet.getMinValue();
75
- };
76
- _proto.getIndices = function getIndices() {
77
- return this._bufferSet.getIndices();
78
- };
79
- _createClass(FixedBuffer, [{
80
- key: "thresholdIndexValue",
81
- get: function get() {
82
- return this._thresholdIndexValue;
83
- }
84
- }, {
85
- key: "recyclerType",
86
- get: function get() {
87
- return this._recyclerType;
88
- }
89
- }]);
90
- return FixedBuffer;
91
- }();
92
-
93
46
  var Recycler = /*#__PURE__*/function () {
94
47
  function Recycler(props) {
95
48
  var _this = this;
@@ -126,15 +79,14 @@ var Recycler = /*#__PURE__*/function () {
126
79
  _proto.addBuffer = function addBuffer(type) {
127
80
  if (!type) return null;
128
81
  var index = this._queue.findIndex(function (buffer) {
129
- return buffer.recyclerType === type;
82
+ return buffer.getType() === type;
130
83
  });
131
84
  if (index !== -1) return this._queue[index];
132
- var buffer = new FixedBuffer({
133
- recyclerType: type,
85
+ var buffer = new IntegerBufferSet({
86
+ type: type,
134
87
  metaExtractor: this._metaExtractor,
135
88
  indexExtractor: this._indexExtractor,
136
- bufferSize: this._recyclerBufferSize,
137
- thresholdIndexValue: this._thresholdIndexValue
89
+ bufferSize: this._recyclerBufferSize
138
90
  });
139
91
  this._queue.push(buffer);
140
92
  return buffer;
@@ -142,6 +94,11 @@ var Recycler = /*#__PURE__*/function () {
142
94
  _proto.ensureBuffer = function ensureBuffer(type) {
143
95
  return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);
144
96
  };
97
+ _proto.reset = function reset() {
98
+ this.queue.forEach(function (buffer) {
99
+ return buffer.reset();
100
+ });
101
+ };
145
102
  _proto.updateIndices = function updateIndices(props) {
146
103
  var startIndex = props.startIndex,
147
104
  safeRange = props.safeRange,
@@ -155,7 +112,7 @@ var Recycler = /*#__PURE__*/function () {
155
112
  if (_index >= this._thresholdIndexValue) {
156
113
  var recyclerType = this._getType(_index);
157
114
  var buffer = this.ensureBuffer(recyclerType);
158
- buffer.place(_index, safeRange);
115
+ buffer.getPosition(_index, safeRange);
159
116
  if (typeof onProcess !== 'function' || onProcess(recyclerType, _index)) {
160
117
  count += 1;
161
118
  }
@@ -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;\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 && this._metaExtractor(_index)) {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAMA,qBAAqB,GAAG,6BAA6B;AAC3D,IAAMC,8BAA8B,GAAG,CAAC;AACxC,IAAMC,kCAAkC,GAAG,CAAC;AAC5C,IAAMC,oBAAoB,GAAG,EAAE;;ACDiC,IAEjEC,WAAW;EAMf,SAAAA,YAAYC,KAAuB;IAJ3B,yBAAoB,GAAG,CAAC;IAK9B,IAAAC,qBAAA,GAMID,KAAK,CALPE,mBAAmB;MAAnBA,mBAAmB,GAAAD,qBAAA,cAAG,CAAC,GAAAA,qBAAA;MAAAE,iBAAA,GAKrBH,KAAK,CAJPI,UAAU;MAAVA,UAAU,GAAAD,iBAAA,cAAGL,oBAAoB,GAAAK,iBAAA;MAAAE,mBAAA,GAI/BL,KAAK,CAHPM,YAAY;MAAZA,YAAY,GAAAD,mBAAA,cAAGV,qBAAqB,GAAAU,mBAAA;MACpCE,aAAa,GAEXP,KAAK,CAFPO,aAAa;MACbC,cAAc,GACZR,KAAK,CADPQ,cAAc;IAEhB,IAAI,CAACC,UAAU,GAAG,IAAIC,gBAAgB,CAAC;MACrCN,UAAU,EAAVA,UAAU;MACVG,aAAa,EAAbA,aAAa;MACbC,cAAc,EAAdA,cAAc;MACdG,IAAI,EAAEL;KACP,CAAC;IACF,IAAI,CAACM,aAAa,GAAGN,YAAY;IACjC,IAAI,CAACO,oBAAoB,GAAGX,mBAAmB;;EAChD,IAAAY,MAAA,GAAAf,WAAA,CAAAgB,SAAA;EAAAD,MAAA,CAUDE,KAAK,GAAL,SAAAA,MAAMC,KAAa,EAAEC,SAAoB;IACvC,IAAI,CAACT,UAAU,CAACU,WAAW,CAACF,KAAK,EAAEC,SAAS,CAAC;GAC9C;EAAAJ,MAAA,CAEDM,WAAW,GAAX,SAAAA;IACE,OAAO,IAAI,CAACX,UAAU,CAACW,WAAW,EAAE;GACrC;EAAAN,MAAA,CAEDO,WAAW,GAAX,SAAAA;IACE,OAAO,IAAI,CAACZ,UAAU,CAACY,WAAW,EAAE;GACrC;EAAAP,MAAA,CAEDQ,UAAU,GAAV,SAAAA;IACE,OAAO,IAAI,CAACb,UAAU,CAACa,UAAU,EAAE;GACpC;EAAAC,YAAA,CAAAxB,WAAA;IAAAyB,GAAA;IAAAC,GAAA,EAtBD,SAAAA;MACE,OAAO,IAAI,CAACZ,oBAAoB;;;IACjCW,GAAA;IAAAC,GAAA,EAED,SAAAA;MACE,OAAO,IAAI,CAACb,aAAa;;;EAC1B,OAAAb,WAAA;AAAA;;AC1Be,IAEZ2B,QAAQ;EAgBZ,SAAAA,SAAY1B,KAAqB;;IAfzB,WAAM,GAAuB,EAAE;IAK/B,yBAAoB,GAAG,CAAC;IAW9B,IAAA2B,IAAA,GAQI3B,KAAK,IAAI,EAAE;MAPb4B,OAAO,GAAAD,IAAA,CAAPC,OAAO;MACPrB,aAAa,GAAAoB,IAAA,CAAbpB,aAAa;MACbC,cAAc,GAAAmB,IAAA,CAAdnB,cAAc;MAAAqB,kBAAA,GAAAF,IAAA,CACdG,aAAa;MAAbA,aAAa,GAAAD,kBAAA,cAAG,EAAE,GAAAA,kBAAA;MAAAE,qBAAA,GAAAJ,IAAA,CAClBK,kBAAkB;MAAlBA,kBAAkB,GAAAD,qBAAA,cAAGjC,oBAAoB,GAAAiC,qBAAA;MAAAE,qBAAA,GAAAN,IAAA,CACzCzB,mBAAmB;MAAnBA,mBAAmB,GAAA+B,qBAAA,cAAGrC,8BAA8B,GAAAqC,qBAAA;MAAAC,qBAAA,GAAAP,IAAA,CACpDQ,8BAA8B;MAA9BA,8BAA8B,GAAAD,qBAAA,cAAGrC,kCAAkC,GAAAqC,qBAAA;IAGrE,IAAI,CAACE,cAAc,GAAG7B,aAAa;IACnC,IAAI,CAAC8B,eAAe,GAAG7B,cAAc;IACrC,IAAI,CAAC8B,QAAQ,GAAGV,OAAO;IACvB,IAAI,CAACW,mBAAmB,GAAGP,kBAAkB;IAC7C,IAAI,CAACnB,oBAAoB,GAAGX,mBAAmB;IAC/C,IAAI,CAACsC,+BAA+B,GAAGL,8BAA8B;IACrEL,aAAa,CAACW,OAAO,CAAC,UAACC,IAAI;MAAA,OAAKC,KAAI,CAACC,SAAS,CAACF,IAAI,CAAC;MAAC;;EACtD,IAAA5B,MAAA,GAAAY,QAAA,CAAAX,SAAA;EAAAD,MAAA,CAcDQ,UAAU,GAAV,SAAAA;IACE,OAAO,IAAI,CAACuB,MAAM,CAACC,MAAM,CAAC,UAACC,GAAG,EAAEC,GAAG;MAAA,OAAKD,GAAG,CAACE,MAAM,CAACD,GAAG,CAAC1B,UAAU,EAAE,CAAC;OAAE,EAAE,CAAC;GAC1E;EAAAR,MAAA,CAED8B,SAAS,GAAT,SAAAA,UAAUF,IAAY;IACpB,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;IACtB,IAAMzB,KAAK,GAAG,IAAI,CAAC4B,MAAM,CAACK,SAAS,CACjC,UAACC,MAAM;MAAA,OAAKA,MAAM,CAAC7C,YAAY,KAAKoC,IAAI;MACzC;IACD,IAAIzB,KAAK,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC4B,MAAM,CAAC5B,KAAK,CAAC;IAC3C,IAAMkC,MAAM,GAAG,IAAIpD,WAAW,CAAC;MAC7BO,YAAY,EAAEoC,IAAI;MAClBnC,aAAa,EAAE,IAAI,CAAC6B,cAAc;MAClC5B,cAAc,EAAE,IAAI,CAAC6B,eAAe;MACpCjC,UAAU,EAAE,IAAI,CAACmC,mBAAmB;MACpCrC,mBAAmB,EAAE,IAAI,CAACW;KAC3B,CAAC;IACF,IAAI,CAACgC,MAAM,CAACO,IAAI,CAACD,MAAM,CAAC;IACxB,OAAOA,MAAM;GACd;EAAArC,MAAA,CAEDuC,YAAY,GAAZ,SAAAA,aAAaX,IAAY;IACvB,OAAO,IAAI,CAACE,SAAS,CAACF,IAAI,IAAI/C,qBAAqB,CAAC;GACrD;EAAAmB,MAAA,CAEDwC,aAAa,GAAb,SAAAA,cAActD,KAYb;IACC,IAAQuD,UAAU,GAA+CvD,KAAK,CAA9DuD,UAAU;MAAErC,SAAS,GAAoClB,KAAK,CAAlDkB,SAAS;MAAAsC,WAAA,GAAoCxD,KAAK,CAAvCyD,IAAI;MAAJA,IAAI,GAAAD,WAAA,cAAG,CAAC,GAAAA,WAAA;MAAEE,QAAQ,GAAgB1D,KAAK,CAA7B0D,QAAQ;MAAEC,SAAS,GAAK3D,KAAK,CAAnB2D,SAAS;IAC5D,IAAIC,KAAK,GAAG,CAAC;IACb,IAAIC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACR,UAAU,EAAE,CAAC,CAAC;IACpC,OAAOK,KAAK,GAAGF,QAAQ,IAAI,IAAI,CAACtB,cAAc,CAACyB,MAAM,CAAC,EAAE;MACtD,IAAIA,MAAM,IAAI,IAAI,CAAChD,oBAAoB,EAAE;QACvC,IAAMP,YAAY,GAAG,IAAI,CAACgC,QAAQ,CAACuB,MAAM,CAAC;QAC1C,IAAMV,MAAM,GAAG,IAAI,CAACE,YAAY,CAAC/C,YAAY,CAAC;QAC9C6C,MAAM,CAACnC,KAAK,CAAC6C,MAAM,EAAE3C,SAAS,CAAC;QAE/B,IACE,OAAOyC,SAAS,KAAK,UAAU,IAC/BA,SAAS,CAACrD,YAAY,EAAEuD,MAAM,CAAC,EAC/B;UACAD,KAAK,IAAI,CAAC;;;MAGdC,MAAM,IAAIJ,IAAI;;GAEjB;EAAA3C,MAAA,CAEDO,WAAW,GAAX,SAAAA;IACE,IAAI2C,QAAQ,GAAGC,MAAM,CAACC,gBAAgB;IACtC,IAAI,CAACrB,MAAM,CAACJ,OAAO,CAAC,UAACU,MAAM;MACzB,IAAMgB,CAAC,GAAGhB,MAAM,CAAC9B,WAAW,EAAE;MAC9B,IAAI,OAAO8C,CAAC,KAAK,QAAQ,EAAEH,QAAQ,GAAGF,IAAI,CAACM,GAAG,CAACD,CAAC,EAAEH,QAAQ,CAAC;KAC5D,CAAC;IACF,OAAOA,QAAQ;GAChB;EAAAlD,MAAA,CAEDM,WAAW,GAAX,SAAAA;IACE,IAAIiD,QAAQ,GAAG,CAAC;IAChB,IAAI,CAACxB,MAAM,CAACJ,OAAO,CAAC,UAACU,MAAM;MACzB,IAAMgB,CAAC,GAAGhB,MAAM,CAAC/B,WAAW,EAAE;MAC9B,IAAI,OAAO+C,CAAC,KAAK,QAAQ,EAAEE,QAAQ,GAAGP,IAAI,CAACC,GAAG,CAACI,CAAC,EAAEE,QAAQ,CAAC;KAC5D,CAAC;IACF,OAAOA,QAAQ;GAChB;EAAA9C,YAAA,CAAAG,QAAA;IAAAF,GAAA;IAAAC,GAAA,EAtFD,SAAAA;MACE,OAAO,IAAI,CAACoB,MAAM;;;IACnBrB,GAAA;IAAAC,GAAA,EAED,SAAAA;MACE,OAAO,IAAI,CAACZ,oBAAoB;;;IACjCW,GAAA;IAAAC,GAAA,EAED,SAAAA;MACE,OAAO,IAAI,CAACe,+BAA+B;;;EAC5C,OAAAd,QAAA;AAAA;;;;"}
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,2 +1,2 @@
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&&this._metaExtractor(a);){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}();
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;exports.default=function(){function e(e){var t=this;this._queue=[],this._thresholdIndexValue=0;var r=e||{},u=r.getType,n=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,d=void 0===h?4:h;this._metaExtractor=r.metaExtractor,this._indexExtractor=n,this._getType=u,this._recyclerBufferSize=f,this._thresholdIndexValue=s,this._recyclerReservedBufferPerBatch=d,o.forEach((function(e){return t.addBuffer(e)}))}var r,u,n=e.prototype;return n.getIndices=function(){return this._queue.reduce((function(e,t){return e.concat(t.getIndices())}),[])},n.addBuffer=function(e){if(!e)return null;var r=this._queue.findIndex((function(t){return t.getType()===e}));if(-1!==r)return this._queue[r];var u=new t({type:e,metaExtractor:this._metaExtractor,indexExtractor:this._indexExtractor,bufferSize:this._recyclerBufferSize});return this._queue.push(u),u},n.ensureBuffer=function(e){return this.addBuffer(e||"__default_recycler_buffer__")},n.reset=function(){this.queue.forEach((function(e){return e.reset()}))},n.updateIndices=function(e){for(var t=e.safeRange,r=e.step,u=void 0===r?1:r,n=e.maxCount,i=e.onProcess,o=0,a=Math.max(e.startIndex,0);o<n&&this._metaExtractor(a);){if(a>=this._thresholdIndexValue){var f=this._getType(a);this.ensureBuffer(f).getPosition(a,t),("function"!=typeof i||i(f,a))&&(o+=1)}a+=u}},n.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},n.getMaxValue=function(){var e=0;return this._queue.forEach((function(t){var r=t.getMaxValue();"number"==typeof r&&(e=Math.max(r,e))})),e},r=e,(u=[{key:"queue",get:function(){return this._queue}},{key:"thresholdIndexValue",get:function(){return this._thresholdIndexValue}},{key:"recyclerReservedBufferPerBatch",get:function(){return this._recyclerReservedBufferPerBatch}}])&&function(e,t){for(var r=0;r<t.length;r++){var u=t[r];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(e,"symbol"==typeof(n=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var u=r.call(e,"string");if("object"!=typeof u)return u;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(u.key))?n:String(n),u)}var n}(r.prototype,u),Object.defineProperty(r,"prototype",{writable:!1}),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;\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 && this._metaExtractor(_index)) {\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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"}
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"}
@@ -37,53 +37,6 @@ var RECYCLER_THRESHOLD_INDEX_VALUE = 0;
37
37
  var RECYCLER_RESERVED_BUFFER_PER_BATCH = 4;
38
38
  var RECYCLER_BUFFER_SIZE = 10;
39
39
 
40
- var FixedBuffer = /*#__PURE__*/function () {
41
- function FixedBuffer(props) {
42
- this._thresholdIndexValue = 0;
43
- var _props$thresholdIndex = props.thresholdIndexValue,
44
- thresholdIndexValue = _props$thresholdIndex === void 0 ? 0 : _props$thresholdIndex,
45
- _props$bufferSize = props.bufferSize,
46
- bufferSize = _props$bufferSize === void 0 ? RECYCLER_BUFFER_SIZE : _props$bufferSize,
47
- _props$recyclerType = props.recyclerType,
48
- recyclerType = _props$recyclerType === void 0 ? DEFAULT_RECYCLER_TYPE : _props$recyclerType,
49
- metaExtractor = props.metaExtractor,
50
- indexExtractor = props.indexExtractor;
51
- this._bufferSet = new IntegerBufferSet({
52
- bufferSize: bufferSize,
53
- metaExtractor: metaExtractor,
54
- indexExtractor: indexExtractor,
55
- name: recyclerType
56
- });
57
- this._recyclerType = recyclerType;
58
- this._thresholdIndexValue = thresholdIndexValue;
59
- }
60
- var _proto = FixedBuffer.prototype;
61
- _proto.place = function place(index, safeRange) {
62
- this._bufferSet.getPosition(index, safeRange);
63
- };
64
- _proto.getMaxValue = function getMaxValue() {
65
- return this._bufferSet.getMaxValue();
66
- };
67
- _proto.getMinValue = function getMinValue() {
68
- return this._bufferSet.getMinValue();
69
- };
70
- _proto.getIndices = function getIndices() {
71
- return this._bufferSet.getIndices();
72
- };
73
- _createClass(FixedBuffer, [{
74
- key: "thresholdIndexValue",
75
- get: function get() {
76
- return this._thresholdIndexValue;
77
- }
78
- }, {
79
- key: "recyclerType",
80
- get: function get() {
81
- return this._recyclerType;
82
- }
83
- }]);
84
- return FixedBuffer;
85
- }();
86
-
87
40
  var Recycler = /*#__PURE__*/function () {
88
41
  function Recycler(props) {
89
42
  var _this = this;
@@ -120,15 +73,14 @@ var Recycler = /*#__PURE__*/function () {
120
73
  _proto.addBuffer = function addBuffer(type) {
121
74
  if (!type) return null;
122
75
  var index = this._queue.findIndex(function (buffer) {
123
- return buffer.recyclerType === type;
76
+ return buffer.getType() === type;
124
77
  });
125
78
  if (index !== -1) return this._queue[index];
126
- var buffer = new FixedBuffer({
127
- recyclerType: type,
79
+ var buffer = new IntegerBufferSet({
80
+ type: type,
128
81
  metaExtractor: this._metaExtractor,
129
82
  indexExtractor: this._indexExtractor,
130
- bufferSize: this._recyclerBufferSize,
131
- thresholdIndexValue: this._thresholdIndexValue
83
+ bufferSize: this._recyclerBufferSize
132
84
  });
133
85
  this._queue.push(buffer);
134
86
  return buffer;
@@ -136,6 +88,11 @@ var Recycler = /*#__PURE__*/function () {
136
88
  _proto.ensureBuffer = function ensureBuffer(type) {
137
89
  return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);
138
90
  };
91
+ _proto.reset = function reset() {
92
+ this.queue.forEach(function (buffer) {
93
+ return buffer.reset();
94
+ });
95
+ };
139
96
  _proto.updateIndices = function updateIndices(props) {
140
97
  var startIndex = props.startIndex,
141
98
  safeRange = props.safeRange,
@@ -149,7 +106,7 @@ var Recycler = /*#__PURE__*/function () {
149
106
  if (_index >= this._thresholdIndexValue) {
150
107
  var recyclerType = this._getType(_index);
151
108
  var buffer = this.ensureBuffer(recyclerType);
152
- buffer.place(_index, safeRange);
109
+ buffer.getPosition(_index, safeRange);
153
110
  if (typeof onProcess !== 'function' || onProcess(recyclerType, _index)) {
154
111
  count += 1;
155
112
  }
@@ -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;\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 && this._metaExtractor(_index)) {\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
+ {"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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-oasis/recycler",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
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.29"
19
+ "@x-oasis/integer-buffer-set": "0.1.31"
20
20
  },
21
21
  "scripts": {
22
22
  "build": "tsdx build --tsconfig tsconfig.build.json",
package/src/index.ts CHANGED
@@ -1,15 +1,14 @@
1
- import FixedBuffer from './FixedBuffer';
1
+ import IntegerBufferSet from '@x-oasis/integer-buffer-set';
2
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,
8
7
  RECYCLER_THRESHOLD_INDEX_VALUE,
9
8
  } from './common';
10
9
 
11
10
  class Recycler {
12
- private _queue: Array<FixedBuffer> = [];
11
+ private _queue: Array<IntegerBufferSet> = [];
13
12
 
14
13
  /**
15
14
  * start index
@@ -62,16 +61,13 @@ class Recycler {
62
61
 
63
62
  addBuffer(type: string) {
64
63
  if (!type) return null;
65
- const index = this._queue.findIndex(
66
- (buffer) => buffer.recyclerType === type
67
- );
64
+ const index = this._queue.findIndex((buffer) => buffer.getType() === type);
68
65
  if (index !== -1) return this._queue[index];
69
- const buffer = new FixedBuffer({
70
- recyclerType: type,
66
+ const buffer = new IntegerBufferSet({
67
+ type,
71
68
  metaExtractor: this._metaExtractor,
72
69
  indexExtractor: this._indexExtractor,
73
70
  bufferSize: this._recyclerBufferSize,
74
- thresholdIndexValue: this._thresholdIndexValue,
75
71
  });
76
72
  this._queue.push(buffer);
77
73
  return buffer;
@@ -81,6 +77,10 @@ class Recycler {
81
77
  return this.addBuffer(type || DEFAULT_RECYCLER_TYPE);
82
78
  }
83
79
 
80
+ reset() {
81
+ this.queue.forEach((buffer) => buffer.reset());
82
+ }
83
+
84
84
  updateIndices(props: {
85
85
  /**
86
86
  * index in range should not be recycled
@@ -101,7 +101,7 @@ class Recycler {
101
101
  if (_index >= this._thresholdIndexValue) {
102
102
  const recyclerType = this._getType(_index);
103
103
  const buffer = this.ensureBuffer(recyclerType);
104
- buffer.place(_index, safeRange);
104
+ buffer.getPosition(_index, safeRange);
105
105
 
106
106
  if (
107
107
  typeof onProcess !== 'function' ||
@@ -1,14 +0,0 @@
1
- import { SafeRange, FixedBufferProps } from './types';
2
- declare class FixedBuffer {
3
- private _bufferSet;
4
- private _thresholdIndexValue;
5
- private _recyclerType;
6
- constructor(props: FixedBufferProps);
7
- get thresholdIndexValue(): number;
8
- get recyclerType(): string;
9
- place(index: number, safeRange: SafeRange): void;
10
- getMaxValue(): number;
11
- getMinValue(): number;
12
- getIndices(): any;
13
- }
14
- export default FixedBuffer;
@@ -1,54 +0,0 @@
1
- import IntegerBufferSet from '@x-oasis/integer-buffer-set';
2
- import { SafeRange, FixedBufferProps } from './types';
3
- import { DEFAULT_RECYCLER_TYPE, RECYCLER_BUFFER_SIZE } from './common';
4
-
5
- class FixedBuffer {
6
- private _bufferSet: IntegerBufferSet;
7
- private _thresholdIndexValue = 0;
8
-
9
- private _recyclerType: string;
10
-
11
- constructor(props: FixedBufferProps) {
12
- const {
13
- thresholdIndexValue = 0,
14
- bufferSize = RECYCLER_BUFFER_SIZE,
15
- recyclerType = DEFAULT_RECYCLER_TYPE,
16
- metaExtractor,
17
- indexExtractor,
18
- } = props;
19
- this._bufferSet = new IntegerBufferSet({
20
- bufferSize,
21
- metaExtractor,
22
- indexExtractor,
23
- name: recyclerType,
24
- });
25
- this._recyclerType = recyclerType;
26
- this._thresholdIndexValue = thresholdIndexValue;
27
- }
28
-
29
- get thresholdIndexValue() {
30
- return this._thresholdIndexValue;
31
- }
32
-
33
- get recyclerType() {
34
- return this._recyclerType;
35
- }
36
-
37
- place(index: number, safeRange: SafeRange) {
38
- this._bufferSet.getPosition(index, safeRange);
39
- }
40
-
41
- getMaxValue() {
42
- return this._bufferSet.getMaxValue();
43
- }
44
-
45
- getMinValue() {
46
- return this._bufferSet.getMinValue();
47
- }
48
-
49
- getIndices() {
50
- return this._bufferSet.getIndices();
51
- }
52
- }
53
-
54
- export default FixedBuffer;