fastds 0.0.1-rc.0 → 0.0.1-rc.1
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/build/__bench__/index.d.ts +1 -0
- package/build/binary-search.cjs +13 -7
- package/build/binary-search.cjs.map +1 -1
- package/build/binary-search.js +13 -7
- package/build/binary-search.js.map +1 -1
- package/build/index.cjs.map +1 -1
- package/build/index.js.map +1 -1
- package/build/ring-buffer.cjs +131 -75
- package/build/ring-buffer.cjs.map +1 -1
- package/build/ring-buffer.d.ts +7 -6
- package/build/ring-buffer.js +131 -75
- package/build/ring-buffer.js.map +1 -1
- package/package.json +12 -13
- package/src/index.ts +0 -1
- package/src/ring-buffer.ts +151 -94
package/build/ring-buffer.js
CHANGED
@@ -7,7 +7,7 @@ export class RingBuffer {
|
|
7
7
|
#length = 0;
|
8
8
|
static from(values) {
|
9
9
|
const n = values.length;
|
10
|
-
const ring = new RingBuffer(n);
|
10
|
+
const ring = new RingBuffer(n + 1);
|
11
11
|
for(let i = 0; i < n; i++){
|
12
12
|
ring.#buffer[i] = values[i];
|
13
13
|
}
|
@@ -18,7 +18,7 @@ export class RingBuffer {
|
|
18
18
|
}
|
19
19
|
[Symbol.toStringTag] = 'RingBuffer';
|
20
20
|
constructor(capacity = DEFAULT_CAPACITY){
|
21
|
-
const size = Math.max(1 << 32 - Math.clz32(capacity), DEFAULT_CAPACITY);
|
21
|
+
const size = Math.max(1 << 32 - Math.clz32(capacity - 1), DEFAULT_CAPACITY);
|
22
22
|
this.#buffer = new Array(size);
|
23
23
|
this.#mask = size - 1;
|
24
24
|
}
|
@@ -40,6 +40,36 @@ export class RingBuffer {
|
|
40
40
|
getTailOffset(index) {
|
41
41
|
return this.#tail + index & this.#mask;
|
42
42
|
}
|
43
|
+
resize(capacity) {
|
44
|
+
const buffer = this.#buffer;
|
45
|
+
const bufferLength = buffer.length;
|
46
|
+
if (bufferLength > capacity && bufferLength >> 1 < capacity) {
|
47
|
+
return false;
|
48
|
+
}
|
49
|
+
const size = Math.max(1 << 32 - Math.clz32(capacity - 1), DEFAULT_CAPACITY);
|
50
|
+
const length = this.#length;
|
51
|
+
if (size < length) {
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
const head = this.#head;
|
55
|
+
const prevMask = this.#mask;
|
56
|
+
const prevTail = this.#tail;
|
57
|
+
const nextMask = size - 1;
|
58
|
+
const nextTail = head + length & nextMask;
|
59
|
+
const wrapIndex = size > bufferLength ? prevTail < head ? bufferLength - head : length : nextTail < head ? size - head : length;
|
60
|
+
for(let i = length - 1; i >= wrapIndex; i--){
|
61
|
+
const read = head + i & prevMask;
|
62
|
+
const write = head + i & nextMask;
|
63
|
+
buffer[write] = buffer[read];
|
64
|
+
if (read !== write) {
|
65
|
+
buffer[read] = undefined;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
this.#buffer.length = size;
|
69
|
+
this.#tail = nextTail;
|
70
|
+
this.#mask = nextMask;
|
71
|
+
return true;
|
72
|
+
}
|
43
73
|
grow(capacity = this.#mask + 1) {
|
44
74
|
const buffer = this.#buffer;
|
45
75
|
const bufferLength = buffer.length;
|
@@ -50,7 +80,6 @@ export class RingBuffer {
|
|
50
80
|
this.#buffer.length = size;
|
51
81
|
const oldTail = this.#tail;
|
52
82
|
if (oldTail < this.#head) {
|
53
|
-
const buffer = this.#buffer;
|
54
83
|
for(let i = 0; i < oldTail; i++){
|
55
84
|
buffer[bufferLength + i] = buffer[i];
|
56
85
|
}
|
@@ -60,9 +89,10 @@ export class RingBuffer {
|
|
60
89
|
}
|
61
90
|
allocate(index, count) {
|
62
91
|
const prevLength = this.#length;
|
63
|
-
if (index < 0 ||
|
92
|
+
if (index < 0 || count <= 0) {
|
64
93
|
return false;
|
65
94
|
}
|
95
|
+
index = Math.min(index, prevLength);
|
66
96
|
const buffer = this.#buffer;
|
67
97
|
const head = this.#head;
|
68
98
|
const tail = this.#tail;
|
@@ -270,6 +300,103 @@ export class RingBuffer {
|
|
270
300
|
this.#length = write;
|
271
301
|
return true;
|
272
302
|
}
|
303
|
+
set(index, values, insert = false) {
|
304
|
+
const length = this.#length;
|
305
|
+
if (index < 0 || index > length) {
|
306
|
+
return false;
|
307
|
+
}
|
308
|
+
const count = values.length;
|
309
|
+
if (insert) {
|
310
|
+
this.allocate(index, count);
|
311
|
+
} else {
|
312
|
+
const extra = Math.max(index + values.length - length, 0);
|
313
|
+
if (extra > 0) {
|
314
|
+
this.allocate(length, extra);
|
315
|
+
}
|
316
|
+
}
|
317
|
+
const buffer = this.#buffer;
|
318
|
+
const mask = this.#mask;
|
319
|
+
const baseWrite = this.#head + index;
|
320
|
+
for(let i = 0; i < count; i++){
|
321
|
+
buffer[baseWrite + i & mask] = values[i];
|
322
|
+
}
|
323
|
+
return true;
|
324
|
+
}
|
325
|
+
setOne(index, value, insert = false) {
|
326
|
+
const length = this.#length;
|
327
|
+
if (index < 0 || index > length) {
|
328
|
+
return false;
|
329
|
+
}
|
330
|
+
if (insert) {
|
331
|
+
this.allocate(index, 1);
|
332
|
+
} else {
|
333
|
+
const extra = Math.max(index + 1 - length, 0);
|
334
|
+
if (extra > 0) {
|
335
|
+
this.allocate(length, extra);
|
336
|
+
}
|
337
|
+
}
|
338
|
+
const buffer = this.#buffer;
|
339
|
+
const mask = this.#mask;
|
340
|
+
buffer[this.#head + index & mask] = value;
|
341
|
+
return true;
|
342
|
+
}
|
343
|
+
slice(start = 0, end = this.#length) {
|
344
|
+
const length = this.#length;
|
345
|
+
const buffer = this.#buffer;
|
346
|
+
const head = this.#head;
|
347
|
+
const tail = this.#tail;
|
348
|
+
const mask = this.#mask;
|
349
|
+
const actualStart = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
|
350
|
+
const actualEnd = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
|
351
|
+
if (head <= tail) {
|
352
|
+
return this.#buffer.slice(head + actualStart & mask, head + actualEnd & mask);
|
353
|
+
}
|
354
|
+
const size = Math.max(actualEnd - actualStart, 0);
|
355
|
+
const result = new Array(size);
|
356
|
+
for(let i = 0; i < size; i++){
|
357
|
+
result[i] = buffer[head + actualStart + i & mask];
|
358
|
+
}
|
359
|
+
return result;
|
360
|
+
}
|
361
|
+
removeOne(index) {
|
362
|
+
const length = this.#length;
|
363
|
+
if (index < 0 || index >= length) {
|
364
|
+
return -1;
|
365
|
+
}
|
366
|
+
const buffer = this.#buffer;
|
367
|
+
const mask = this.#mask;
|
368
|
+
const head = this.#head;
|
369
|
+
const leftMoveCount = index;
|
370
|
+
const rightMoveCount = length - index;
|
371
|
+
if (leftMoveCount < rightMoveCount) {
|
372
|
+
for(let i = index; i > 0; i--){
|
373
|
+
buffer[head + i & mask] = buffer[head + i - 1 & mask];
|
374
|
+
}
|
375
|
+
buffer[head] = undefined;
|
376
|
+
this.#head = head + 1 & mask;
|
377
|
+
} else {
|
378
|
+
for(let i = index; i < length - 1; i++){
|
379
|
+
buffer[head + i & mask] = buffer[head + i + 1 & mask];
|
380
|
+
}
|
381
|
+
const tail = head + length - 1 & mask;
|
382
|
+
buffer[tail] = undefined;
|
383
|
+
this.#tail = tail;
|
384
|
+
}
|
385
|
+
this.#length = length - 1;
|
386
|
+
return index;
|
387
|
+
}
|
388
|
+
removeFirst(value, index = 0) {
|
389
|
+
const foundIndex = this.indexOf(value, index);
|
390
|
+
if (foundIndex === -1) {
|
391
|
+
return -1;
|
392
|
+
}
|
393
|
+
return this.removeOne(foundIndex);
|
394
|
+
}
|
395
|
+
remove(index, count) {
|
396
|
+
const result = this.slice(index, index + count);
|
397
|
+
this.deallocate(index, count);
|
398
|
+
return result;
|
399
|
+
}
|
273
400
|
push(value) {
|
274
401
|
const tail = this.getTailOffset(1);
|
275
402
|
if (tail === this.#head) {
|
@@ -327,59 +454,6 @@ export class RingBuffer {
|
|
327
454
|
has(value) {
|
328
455
|
return this.indexOf(value) !== -1;
|
329
456
|
}
|
330
|
-
insertOne(index, value) {
|
331
|
-
this.allocate(index, 1);
|
332
|
-
this.#buffer[this.#head + index & this.#mask] = value;
|
333
|
-
return index;
|
334
|
-
}
|
335
|
-
insert(index, values) {
|
336
|
-
const length = values.length;
|
337
|
-
const writeBase = this.#head + index;
|
338
|
-
this.allocate(index, length);
|
339
|
-
for(let i = 0; i < length; i++){
|
340
|
-
this.#buffer[writeBase + i & this.#mask] = values[i];
|
341
|
-
}
|
342
|
-
return index;
|
343
|
-
}
|
344
|
-
removeOne(index) {
|
345
|
-
const length = this.#length;
|
346
|
-
if (index < 0 || index >= length) {
|
347
|
-
return -1;
|
348
|
-
}
|
349
|
-
const buffer = this.#buffer;
|
350
|
-
const mask = this.#mask;
|
351
|
-
const head = this.#head;
|
352
|
-
const leftMoveCount = index;
|
353
|
-
const rightMoveCount = length - index;
|
354
|
-
if (leftMoveCount < rightMoveCount) {
|
355
|
-
for(let i = index; i > 0; i--){
|
356
|
-
buffer[head + i & mask] = buffer[head + i - 1 & mask];
|
357
|
-
}
|
358
|
-
buffer[head] = undefined;
|
359
|
-
this.#head = head + 1 & mask;
|
360
|
-
} else {
|
361
|
-
for(let i = index; i < length - 1; i++){
|
362
|
-
buffer[head + i & mask] = buffer[head + i + 1 & mask];
|
363
|
-
}
|
364
|
-
const tail = head + length - 1 & mask;
|
365
|
-
buffer[tail] = undefined;
|
366
|
-
this.#tail = tail;
|
367
|
-
}
|
368
|
-
this.#length = length - 1;
|
369
|
-
return index;
|
370
|
-
}
|
371
|
-
removeFirst(value, index = 0) {
|
372
|
-
const foundIndex = this.indexOf(value, index);
|
373
|
-
if (foundIndex === -1) {
|
374
|
-
return -1;
|
375
|
-
}
|
376
|
-
return this.removeOne(foundIndex);
|
377
|
-
}
|
378
|
-
remove(index, count) {
|
379
|
-
const result = this.slice(index, count);
|
380
|
-
this.deallocate(index, count);
|
381
|
-
return result;
|
382
|
-
}
|
383
457
|
clear() {
|
384
458
|
this.#buffer.length = 0;
|
385
459
|
this.#buffer.length = DEFAULT_CAPACITY;
|
@@ -389,24 +463,6 @@ export class RingBuffer {
|
|
389
463
|
this.#mask = DEFAULT_CAPACITY - 1;
|
390
464
|
return this;
|
391
465
|
}
|
392
|
-
slice(start = 0, end = this.#length) {
|
393
|
-
const length = this.#length;
|
394
|
-
const buffer = this.#buffer;
|
395
|
-
const head = this.#head;
|
396
|
-
const tail = this.#tail;
|
397
|
-
const mask = this.#mask;
|
398
|
-
const actualStart = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
|
399
|
-
const actualEnd = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
|
400
|
-
if (head <= tail) {
|
401
|
-
return this.#buffer.slice(head + actualStart & mask, head + actualEnd & mask);
|
402
|
-
}
|
403
|
-
const size = Math.max(actualEnd - actualStart, 0);
|
404
|
-
const result = new Array(size);
|
405
|
-
for(let i = 0; i < size; i++){
|
406
|
-
result[i] = buffer[head + actualStart + i & mask];
|
407
|
-
}
|
408
|
-
return result;
|
409
|
-
}
|
410
466
|
toArray() {
|
411
467
|
return this.slice();
|
412
468
|
}
|
package/build/ring-buffer.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/ring-buffer.ts"],"sourcesContent":["const DEFAULT_CAPACITY = 8;\n\nexport interface FilterFunction<T> {\n (value: T, index: number): boolean;\n}\n\nexport class RingBuffer<T> {\n #buffer: Array<T | undefined>;\n #head = 0;\n #tail = 0;\n #mask: number;\n #length = 0;\n\n static from<T>(values: T[]): RingBuffer<T> {\n const n = values.length;\n const ring = new RingBuffer<T>(n);\n for (let i = 0; i < n; i++) {\n ring.#buffer[i] = values[i];\n }\n ring.#head = 0;\n ring.#tail = n;\n ring.#length = n;\n\n return ring;\n }\n\n readonly [Symbol.toStringTag] = 'RingBuffer';\n\n constructor(capacity: number = DEFAULT_CAPACITY) {\n const size = Math.max(1 << (32 - Math.clz32(capacity)), DEFAULT_CAPACITY);\n this.#buffer = new Array<T>(size);\n this.#mask = size - 1;\n }\n\n\n get capacity() {\n return this.#mask + 1;\n }\n\n get length() {\n return this.#length;\n }\n\n isEmpty(): boolean {\n return this.#tail === this.#head;\n }\n\n isWrapped(): boolean {\n return this.#head > this.#tail;\n }\n\n getHeadOffset(index: number): number {\n return (this.#head + index) & this.#mask;\n }\n\n getTailOffset(index: number): number {\n return (this.#tail + index) & this.#mask;\n }\n\n grow(capacity: number = this.#mask + 1): void {\n const buffer = this.#buffer;\n const bufferLength = buffer.length;\n if (bufferLength >= capacity + 1) {\n return;\n }\n const size = 1 << (32 - Math.clz32(capacity));\n this.#buffer.length = size;\n\n const oldTail = this.#tail;\n if (oldTail < this.#head) {\n const buffer = this.#buffer;\n for (let i = 0; i < oldTail; i++) {\n buffer[bufferLength + i] = buffer[i];\n }\n this.#tail = bufferLength + oldTail;\n }\n\n this.#mask = size - 1;\n }\n\n allocate(index: number, count: number): boolean {\n const prevLength = this.#length;\n if (index < 0 || index > prevLength || count <= 0) {\n return false;\n }\n\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const prevMask = this.#mask;\n\n const nextLength = count + prevLength;\n const wrapIndex = buffer.length - head;\n const isWrapped = head > tail;\n\n if (nextLength >= buffer.length) {\n const size = 1 << (32 - Math.clz32(nextLength));\n buffer.length = size;\n this.#mask = size - 1;\n }\n\n const mask = this.#mask;\n const isResized = prevMask !== mask;\n\n const leftMoveCount = index;\n const rightMoveCount = prevLength - index;\n\n if (leftMoveCount < rightMoveCount) {\n if (isResized && isWrapped) {\n for (let i = 0; i < tail; i++) {\n const read = i;\n const write = (head + wrapIndex + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n }\n const writeBase = (head - count) & mask;\n for (let i = 0; i < leftMoveCount; i++) {\n const read = (head + i) & mask;\n const write = (writeBase + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n this.#head = writeBase;\n } else {\n if (isResized && isWrapped) {\n for (let i = 0; i < tail; i++) {\n const read = i;\n const write = (head + wrapIndex + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n }\n\n for (let i = rightMoveCount - 1; i >= 0; i--) {\n const read = (head + index + i) & mask;\n const write = (head + index + count + i) & mask;\n\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n\n this.#tail = (head + nextLength) & mask;\n }\n\n this.#length = nextLength;\n return true;\n }\n\n deallocate(index: number, count: number): boolean {\n const prevLength = this.#length;\n if (index < 0 || index >= prevLength || count <= 0) {\n return false;\n }\n\n const actualCount = Math.min(count, prevLength - index);\n const nextLength = prevLength - actualCount;\n\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const mask = this.#mask;\n\n if (index === 0) {\n for (let i = 0; i < actualCount; i++) {\n buffer[(head + i) & mask] = undefined;\n }\n this.#head = (head + actualCount) & mask;\n this.#length = nextLength;\n return true;\n }\n\n if (index + actualCount === prevLength) {\n for (let i = 0; i < actualCount; i++) {\n buffer[(tail - i - 1) & mask] = undefined;\n }\n this.#tail = (tail - actualCount) & mask;\n this.#length = nextLength;\n return true;\n }\n\n const leftMoveCount = index;\n const rightMoveCount = prevLength - index - actualCount;\n\n if (leftMoveCount < rightMoveCount) {\n for (let i = leftMoveCount - 1; i >= 0; i--) {\n const read = (head + i) & mask;\n const write = (head + i + actualCount) & mask;\n buffer[write] = buffer[read];\n }\n for (let i = 0; i < actualCount; i++) {\n buffer[(head + i) & mask] = undefined;\n }\n this.#head = (head + actualCount) & mask;\n } else {\n for (let i = 0; i < rightMoveCount; i++) {\n const read = (head + index + actualCount + i) & mask;\n const write = (head + index + i) & mask;\n buffer[write] = buffer[read];\n }\n this.#tail = (tail - actualCount) & mask;\n for (let i = 0; i < actualCount; i++) {\n buffer[(tail + i) & mask] = undefined;\n }\n }\n\n this.#length = nextLength;\n return true;\n }\n\n indexOf(value: T, index: number = 0): number {\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n\n if (head < tail) {\n const offset = head + index;\n const result = buffer.indexOf(value, offset);\n if (result !== -1 && result < tail) {\n return result - head;\n }\n return -1;\n }\n const capacity = buffer.length;\n const firstSegmentLength = capacity - head;\n\n if (index < firstSegmentLength) {\n const startOffset = head + index;\n const result = buffer.indexOf(value, startOffset);\n if (result !== -1) {\n return result - head;\n }\n index = firstSegmentLength;\n }\n\n if (index < length) {\n if (tail > length / 2) {\n const result = buffer.indexOf(value);\n if (result !== -1 && result < tail) {\n return firstSegmentLength + result;\n }\n } else {\n for (let i = 0; i < tail; i++) {\n if (buffer[i] === value) {\n return firstSegmentLength + i;\n }\n }\n }\n }\n return -1;\n }\n\n unwrap(): boolean {\n if (this.isEmpty()) {\n return false;\n }\n const length = this.#length;\n const buffer = this.#buffer;\n const prevHead = this.#head;\n const prevTail = this.#tail;\n\n if (prevHead > prevTail) {\n const bufferLength = buffer.length;\n buffer.length = bufferLength + prevTail;\n for (let i = 0; i < prevTail; i++) {\n buffer[bufferLength + i] = buffer[i];\n buffer[i] = undefined;\n }\n }\n for (let i = 0; i < length; i++) {\n buffer[i] = buffer[prevHead + i];\n }\n\n buffer.length = this.#mask + 1;\n this.#head = 0;\n this.#tail = length;\n this.#length = length;\n\n return true;\n }\n\n compact(filter: FilterFunction<T>): boolean {\n if (this.isEmpty()) {\n return false;\n }\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const mask = this.#mask;\n\n let bufferLength = buffer.length;\n let write = 0;\n for (let read = 0; read < length; read++) {\n const readOffset = (head + read) & mask;\n const value = buffer[readOffset]!;\n if (filter(value, read)) {\n if (read !== write) {\n const writeOffset = (head + write) & mask;\n buffer[writeOffset] = value;\n }\n write++;\n }\n }\n if (write === length) {\n return false;\n }\n if (write < bufferLength / 2) {\n const size = 1 << (32 - Math.clz32(write - 1));\n buffer.length = size;\n bufferLength = size;\n }\n\n for (let i = write; i < bufferLength; i++) {\n buffer[i] = undefined;\n }\n\n this.#head = 0;\n this.#tail = write;\n this.#length = write;\n return true;\n }\n\n push(value: T) {\n const tail = this.getTailOffset(1);\n if (tail === this.#head) {\n this.grow(this.#mask + 2);\n }\n this.#buffer[this.#tail] = value;\n this.#tail = this.getTailOffset(1);\n this.#length++;\n return this;\n }\n\n unshift(value: T): this {\n const head = this.getHeadOffset(-1);\n if (head === this.#tail) {\n this.grow(this.#mask + 2);\n }\n this.#head = this.getHeadOffset(-1);\n this.#buffer[this.#head] = value;\n this.#length++;\n return this;\n }\n\n shift(): T | undefined {\n if (this.#head === this.#tail) {\n return undefined;\n }\n const value = this.#buffer[this.#head];\n this.#buffer[this.#head] = undefined;\n this.#head = this.getHeadOffset(1);\n this.#length--;\n return value;\n }\n\n pop(): T | undefined {\n if (this.#head === this.#tail) {\n return undefined;\n }\n this.#tail = this.getTailOffset(-1);\n const value = this.#buffer[this.#tail];\n this.#buffer[this.#tail] = undefined;\n this.#length--;\n return value;\n }\n\n peekAt(index: number): T | undefined {\n if (index < 0 || index >= this.#length) {\n return undefined;\n }\n const offset = this.getHeadOffset(index);\n return this.#buffer[offset];\n }\n\n peekFirst(): T | undefined {\n return this.#buffer[this.#head];\n }\n\n peekLast(): T | undefined {\n const offset = this.getTailOffset(-1);\n return this.#buffer[offset];\n }\n\n has(value: T): boolean {\n return this.indexOf(value) !== -1;\n }\n\n insertOne(index: number, value: T): number {\n this.allocate(index, 1);\n this.#buffer[(this.#head + index) & this.#mask] = value;\n return index;\n }\n\n insert(index: number, values: T[]): number {\n const length = values.length;\n const writeBase = this.#head + index;\n this.allocate(index, length);\n for (let i = 0; i < length; i++) {\n this.#buffer[(writeBase + i) & this.#mask] = values[i];\n }\n\n return index;\n }\n\n removeOne(index: number): number {\n const length = this.#length;\n if (index < 0 || index >= length) {\n return -1;\n }\n const buffer = this.#buffer;\n const mask = this.#mask;\n const head = this.#head;\n\n const leftMoveCount = index;\n const rightMoveCount = length - index;\n\n if (leftMoveCount < rightMoveCount) {\n for (let i = index; i > 0; i--) {\n buffer[(head + i) & mask] = buffer[(head + i - 1) & mask];\n }\n buffer[head] = undefined;\n this.#head = (head + 1) & mask;\n } else {\n for (let i = index; i < length - 1; i++) {\n buffer[(head + i) & mask] = buffer[(head + i + 1) & mask];\n }\n const tail = (head + length - 1) & mask;\n buffer[tail] = undefined;\n this.#tail = tail;\n }\n this.#length = length - 1;\n\n return index;\n }\n\n removeFirst(value: T, index: number = 0): number {\n const foundIndex = this.indexOf(value, index);\n if (foundIndex === -1) {\n return -1;\n }\n return this.removeOne(foundIndex);\n }\n\n remove(index: number, count: number): T[] {\n const result = this.slice(index, count);\n this.deallocate(index, count);\n return result;\n }\n\n clear(): this {\n this.#buffer.length = 0;\n this.#buffer.length = DEFAULT_CAPACITY;\n this.#head = 0;\n this.#tail = 0;\n this.#length = 0;\n this.#mask = DEFAULT_CAPACITY - 1;\n return this;\n }\n\n slice(start: number = 0, end: number = this.#length): T[] {\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const mask = this.#mask;\n\n const actualStart = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);\n const actualEnd = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);\n\n if (head <= tail) {\n return this.#buffer.slice(\n (head + actualStart) & mask,\n (head + actualEnd) & mask,\n ) as T[];\n }\n\n const size = Math.max(actualEnd - actualStart, 0);\n const result = new Array<T>(size);\n for (let i = 0; i < size; i++) {\n result[i] = buffer[(head + actualStart + i) & mask]!;\n }\n return result;\n }\n\n toArray(): T[] {\n return this.slice();\n }\n\n drain(): IteratorObject<T, void, unknown> {\n return Iterator.from({\n [Symbol.iterator]: () => {\n return {\n next: (): IteratorResult<T> => {\n if (this.#length === 0) {\n return { done: true, value: undefined };\n }\n const value = this.shift()!;\n return { done: false, value };\n },\n };\n },\n });\n }\n\n iter(): IteratorObject<T, void, unknown> {\n return Iterator.from(this[Symbol.iterator]());\n }\n\n [Symbol.iterator](): Iterator<T, void, unknown> {\n const buffer = this.#buffer;\n let idx = this.#head;\n return {\n next: (): IteratorResult<T> => {\n if (idx >= this.#head + this.#length) {\n return { done: true, value: undefined };\n }\n const offset = idx++ & this.#mask;\n const value = buffer[offset]!;\n return { done: false, value };\n },\n };\n }\n}\n\n\n"],"names":["DEFAULT_CAPACITY","RingBuffer","from","values","n","length","ring","i","Symbol","toStringTag","constructor","capacity","size","Math","max","clz32","Array","isEmpty","isWrapped","getHeadOffset","index","getTailOffset","grow","buffer","bufferLength","oldTail","allocate","count","prevLength","head","tail","prevMask","nextLength","wrapIndex","mask","isResized","leftMoveCount","rightMoveCount","read","write","undefined","writeBase","deallocate","actualCount","min","indexOf","value","offset","result","firstSegmentLength","startOffset","unwrap","prevHead","prevTail","compact","filter","readOffset","writeOffset","push","unshift","shift","pop","peekAt","peekFirst","peekLast","has","insertOne","insert","removeOne","removeFirst","foundIndex","remove","slice","clear","start","end","actualStart","actualEnd","toArray","drain","Iterator","iterator","next","done","iter","idx"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/ring-buffer.ts"],"sourcesContent":["const DEFAULT_CAPACITY = 8;\n\nexport interface FilterFunction<T> {\n (value: T, index: number): boolean;\n}\n\nexport class RingBuffer<T> {\n #buffer: Array<T | undefined>;\n #head = 0;\n #tail = 0;\n #mask: number;\n #length = 0;\n\n static from<T>(values: T[]): RingBuffer<T> {\n const n = values.length;\n const ring = new RingBuffer<T>(n + 1);\n for (let i = 0; i < n; i++) {\n ring.#buffer[i] = values[i];\n }\n ring.#head = 0;\n ring.#tail = n;\n ring.#length = n;\n\n return ring;\n }\n\n readonly [Symbol.toStringTag] = 'RingBuffer';\n\n constructor(capacity: number = DEFAULT_CAPACITY) {\n const size = Math.max(1 << (32 - Math.clz32(capacity - 1)), DEFAULT_CAPACITY);\n this.#buffer = new Array<T>(size);\n this.#mask = size - 1;\n }\n\n get capacity() {\n return this.#mask + 1;\n }\n\n get length() {\n return this.#length;\n }\n\n isEmpty(): boolean {\n return this.#tail === this.#head;\n }\n\n isWrapped(): boolean {\n return this.#head > this.#tail;\n }\n\n getHeadOffset(index: number): number {\n return (this.#head + index) & this.#mask;\n }\n\n getTailOffset(index: number): number {\n return (this.#tail + index) & this.#mask;\n }\n\n resize(capacity: number): boolean {\n const buffer = this.#buffer;\n const bufferLength = buffer.length;\n if (bufferLength > capacity && bufferLength >> 1 < capacity) {\n return false;\n }\n const size = Math.max(1 << (32 - Math.clz32(capacity - 1)), DEFAULT_CAPACITY);\n const length = this.#length;\n if (size < length) {\n return false;\n }\n const head = this.#head;\n const prevMask = this.#mask;\n const prevTail = this.#tail;\n\n const nextMask = size - 1;\n const nextTail = (head + length) & nextMask;\n\n const wrapIndex = size > bufferLength ? (prevTail < head ? bufferLength - head : length) : nextTail < head ? size - head : length;\n\n for (let i = length - 1; i >= wrapIndex; i--) {\n const read = (head + i) & prevMask;\n const write = (head + i) & nextMask;\n buffer[write] = buffer[read];\n if (read !== write) {\n buffer[read] = undefined;\n }\n }\n\n this.#buffer.length = size;\n this.#tail = nextTail;\n this.#mask = nextMask;\n return true;\n }\n\n grow(capacity: number = this.#mask + 1): void {\n const buffer = this.#buffer;\n const bufferLength = buffer.length;\n if (bufferLength >= capacity + 1) {\n return;\n }\n const size = 1 << (32 - Math.clz32(capacity));\n this.#buffer.length = size;\n\n const oldTail = this.#tail;\n if (oldTail < this.#head) {\n for (let i = 0; i < oldTail; i++) {\n buffer[bufferLength + i] = buffer[i];\n }\n this.#tail = bufferLength + oldTail;\n }\n\n this.#mask = size - 1;\n }\n\n allocate(index: number, count: number): boolean {\n const prevLength = this.#length;\n if (index < 0 || count <= 0) {\n return false;\n }\n\n // Clamp index to valid range, like Array.splice()\n index = Math.min(index, prevLength);\n\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const prevMask = this.#mask;\n\n const nextLength = count + prevLength;\n const wrapIndex = buffer.length - head;\n const isWrapped = head > tail;\n\n if (nextLength >= buffer.length) {\n const size = 1 << (32 - Math.clz32(nextLength));\n buffer.length = size;\n this.#mask = size - 1;\n }\n\n const mask = this.#mask;\n const isResized = prevMask !== mask;\n\n const leftMoveCount = index;\n const rightMoveCount = prevLength - index;\n\n if (leftMoveCount < rightMoveCount) {\n if (isResized && isWrapped) {\n for (let i = 0; i < tail; i++) {\n const read = i;\n const write = (head + wrapIndex + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n }\n const writeBase = (head - count) & mask;\n for (let i = 0; i < leftMoveCount; i++) {\n const read = (head + i) & mask;\n const write = (writeBase + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n this.#head = writeBase;\n } else {\n if (isResized && isWrapped) {\n for (let i = 0; i < tail; i++) {\n const read = i;\n const write = (head + wrapIndex + i) & mask;\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n }\n\n for (let i = rightMoveCount - 1; i >= 0; i--) {\n const read = (head + index + i) & mask;\n const write = (head + index + count + i) & mask;\n\n buffer[write] = buffer[read];\n buffer[read] = undefined;\n }\n\n this.#tail = (head + nextLength) & mask;\n }\n\n this.#length = nextLength;\n return true;\n }\n\n deallocate(index: number, count: number): boolean {\n const prevLength = this.#length;\n if (index < 0 || index >= prevLength || count <= 0) {\n return false;\n }\n\n const actualCount = Math.min(count, prevLength - index);\n const nextLength = prevLength - actualCount;\n\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const mask = this.#mask;\n\n if (index === 0) {\n for (let i = 0; i < actualCount; i++) {\n buffer[(head + i) & mask] = undefined;\n }\n this.#head = (head + actualCount) & mask;\n this.#length = nextLength;\n return true;\n }\n\n if (index + actualCount === prevLength) {\n for (let i = 0; i < actualCount; i++) {\n buffer[(tail - i - 1) & mask] = undefined;\n }\n this.#tail = (tail - actualCount) & mask;\n this.#length = nextLength;\n return true;\n }\n\n const leftMoveCount = index;\n const rightMoveCount = prevLength - index - actualCount;\n\n if (leftMoveCount < rightMoveCount) {\n for (let i = leftMoveCount - 1; i >= 0; i--) {\n const read = (head + i) & mask;\n const write = (head + i + actualCount) & mask;\n buffer[write] = buffer[read];\n }\n for (let i = 0; i < actualCount; i++) {\n buffer[(head + i) & mask] = undefined;\n }\n this.#head = (head + actualCount) & mask;\n } else {\n for (let i = 0; i < rightMoveCount; i++) {\n const read = (head + index + actualCount + i) & mask;\n const write = (head + index + i) & mask;\n buffer[write] = buffer[read];\n }\n this.#tail = (tail - actualCount) & mask;\n for (let i = 0; i < actualCount; i++) {\n buffer[(tail + i) & mask] = undefined;\n }\n }\n\n this.#length = nextLength;\n return true;\n }\n\n indexOf(value: T, index: number = 0): number {\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n\n if (head < tail) {\n const offset = head + index;\n const result = buffer.indexOf(value, offset);\n if (result !== -1 && result < tail) {\n return result - head;\n }\n return -1;\n }\n const capacity = buffer.length;\n const firstSegmentLength = capacity - head;\n\n if (index < firstSegmentLength) {\n const startOffset = head + index;\n const result = buffer.indexOf(value, startOffset);\n if (result !== -1) {\n return result - head;\n }\n index = firstSegmentLength;\n }\n\n if (index < length) {\n if (tail > length / 2) {\n const result = buffer.indexOf(value);\n if (result !== -1 && result < tail) {\n return firstSegmentLength + result;\n }\n } else {\n for (let i = 0; i < tail; i++) {\n if (buffer[i] === value) {\n return firstSegmentLength + i;\n }\n }\n }\n }\n return -1;\n }\n\n unwrap(): boolean {\n if (this.isEmpty()) {\n return false;\n }\n const length = this.#length;\n const buffer = this.#buffer;\n const prevHead = this.#head;\n const prevTail = this.#tail;\n\n if (prevHead > prevTail) {\n const bufferLength = buffer.length;\n buffer.length = bufferLength + prevTail;\n for (let i = 0; i < prevTail; i++) {\n buffer[bufferLength + i] = buffer[i];\n buffer[i] = undefined;\n }\n }\n for (let i = 0; i < length; i++) {\n buffer[i] = buffer[prevHead + i];\n }\n\n buffer.length = this.#mask + 1;\n this.#head = 0;\n this.#tail = length;\n this.#length = length;\n\n return true;\n }\n\n compact(filter: FilterFunction<T>): boolean {\n if (this.isEmpty()) {\n return false;\n }\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const mask = this.#mask;\n\n let bufferLength = buffer.length;\n let write = 0;\n for (let read = 0; read < length; read++) {\n const readOffset = (head + read) & mask;\n const value = buffer[readOffset]!;\n if (filter(value, read)) {\n if (read !== write) {\n const writeOffset = (head + write) & mask;\n buffer[writeOffset] = value;\n }\n write++;\n }\n }\n if (write === length) {\n return false;\n }\n if (write < bufferLength / 2) {\n const size = 1 << (32 - Math.clz32(write - 1));\n buffer.length = size;\n bufferLength = size;\n }\n\n for (let i = write; i < bufferLength; i++) {\n buffer[i] = undefined;\n }\n\n this.#head = 0;\n this.#tail = write;\n this.#length = write;\n return true;\n }\n\n set(index: number, values: T[], insert = false) {\n const length = this.#length;\n if (index < 0 || index > length) {\n return false;\n }\n const count = values.length;\n if (insert) {\n this.allocate(index, count);\n } else {\n const extra = Math.max(index + values.length - length, 0);\n if (extra > 0) {\n this.allocate(length, extra);\n }\n }\n const buffer = this.#buffer;\n const mask = this.#mask;\n const baseWrite = this.#head + index;\n for (let i = 0; i < count; i++) {\n buffer[(baseWrite + i) & mask] = values[i];\n }\n return true;\n }\n\n setOne(index: number, value: T, insert = false) {\n const length = this.#length;\n if (index < 0 || index > length) {\n return false;\n }\n if (insert) {\n this.allocate(index, 1);\n } else {\n const extra = Math.max(index + 1 - length, 0);\n if (extra > 0) {\n this.allocate(length, extra);\n }\n }\n const buffer = this.#buffer;\n const mask = this.#mask;\n buffer[(this.#head + index) & mask] = value;\n\n return true;\n }\n\n slice(start: number = 0, end: number = this.#length): T[] {\n const length = this.#length;\n const buffer = this.#buffer;\n const head = this.#head;\n const tail = this.#tail;\n const mask = this.#mask;\n\n const actualStart = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);\n const actualEnd = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);\n\n if (head <= tail) {\n return this.#buffer.slice((head + actualStart) & mask, (head + actualEnd) & mask) as T[];\n }\n\n const size = Math.max(actualEnd - actualStart, 0);\n const result = new Array<T>(size);\n for (let i = 0; i < size; i++) {\n result[i] = buffer[(head + actualStart + i) & mask]!;\n }\n return result;\n }\n\n removeOne(index: number): number {\n const length = this.#length;\n if (index < 0 || index >= length) {\n return -1;\n }\n const buffer = this.#buffer;\n const mask = this.#mask;\n const head = this.#head;\n\n const leftMoveCount = index;\n const rightMoveCount = length - index;\n\n if (leftMoveCount < rightMoveCount) {\n for (let i = index; i > 0; i--) {\n buffer[(head + i) & mask] = buffer[(head + i - 1) & mask];\n }\n buffer[head] = undefined;\n this.#head = (head + 1) & mask;\n } else {\n for (let i = index; i < length - 1; i++) {\n buffer[(head + i) & mask] = buffer[(head + i + 1) & mask];\n }\n const tail = (head + length - 1) & mask;\n buffer[tail] = undefined;\n this.#tail = tail;\n }\n this.#length = length - 1;\n\n return index;\n }\n\n removeFirst(value: T, index: number = 0): number {\n const foundIndex = this.indexOf(value, index);\n if (foundIndex === -1) {\n return -1;\n }\n return this.removeOne(foundIndex);\n }\n\n remove(index: number, count: number): T[] {\n const result = this.slice(index, index + count);\n this.deallocate(index, count);\n return result;\n }\n\n push(value: T) {\n const tail = this.getTailOffset(1);\n if (tail === this.#head) {\n this.grow(this.#mask + 2);\n }\n this.#buffer[this.#tail] = value;\n this.#tail = this.getTailOffset(1);\n this.#length++;\n return this;\n }\n\n unshift(value: T): this {\n const head = this.getHeadOffset(-1);\n if (head === this.#tail) {\n this.grow(this.#mask + 2);\n }\n this.#head = this.getHeadOffset(-1);\n this.#buffer[this.#head] = value;\n this.#length++;\n return this;\n }\n\n shift(): T | undefined {\n if (this.#head === this.#tail) {\n return undefined;\n }\n const value = this.#buffer[this.#head];\n this.#buffer[this.#head] = undefined;\n this.#head = this.getHeadOffset(1);\n this.#length--;\n return value;\n }\n\n pop(): T | undefined {\n if (this.#head === this.#tail) {\n return undefined;\n }\n this.#tail = this.getTailOffset(-1);\n const value = this.#buffer[this.#tail];\n this.#buffer[this.#tail] = undefined;\n this.#length--;\n return value;\n }\n\n peekAt(index: number): T | undefined {\n if (index < 0 || index >= this.#length) {\n return undefined;\n }\n const offset = this.getHeadOffset(index);\n return this.#buffer[offset];\n }\n\n peekFirst(): T | undefined {\n return this.#buffer[this.#head];\n }\n\n peekLast(): T | undefined {\n const offset = this.getTailOffset(-1);\n return this.#buffer[offset];\n }\n\n has(value: T): boolean {\n return this.indexOf(value) !== -1;\n }\n\n clear(): this {\n this.#buffer.length = 0;\n this.#buffer.length = DEFAULT_CAPACITY;\n this.#head = 0;\n this.#tail = 0;\n this.#length = 0;\n this.#mask = DEFAULT_CAPACITY - 1;\n return this;\n }\n\n toArray(): T[] {\n return this.slice();\n }\n\n drain(): IteratorObject<T, void, unknown> {\n return Iterator.from({\n [Symbol.iterator]: () => {\n return {\n next: (): IteratorResult<T> => {\n if (this.#length === 0) {\n return { done: true, value: undefined };\n }\n const value = this.shift()!;\n return { done: false, value };\n },\n };\n },\n });\n }\n\n iter(): IteratorObject<T, void, unknown> {\n return Iterator.from(this[Symbol.iterator]());\n }\n\n [Symbol.iterator](): Iterator<T, void, unknown> {\n const buffer = this.#buffer;\n let idx = this.#head;\n return {\n next: (): IteratorResult<T> => {\n if (idx >= this.#head + this.#length) {\n return { done: true, value: undefined };\n }\n const offset = idx++ & this.#mask;\n const value = buffer[offset]!;\n return { done: false, value };\n },\n };\n }\n}\n"],"names":["DEFAULT_CAPACITY","RingBuffer","from","values","n","length","ring","i","Symbol","toStringTag","constructor","capacity","size","Math","max","clz32","Array","isEmpty","isWrapped","getHeadOffset","index","getTailOffset","resize","buffer","bufferLength","head","prevMask","prevTail","nextMask","nextTail","wrapIndex","read","write","undefined","grow","oldTail","allocate","count","prevLength","min","tail","nextLength","mask","isResized","leftMoveCount","rightMoveCount","writeBase","deallocate","actualCount","indexOf","value","offset","result","firstSegmentLength","startOffset","unwrap","prevHead","compact","filter","readOffset","writeOffset","set","insert","extra","baseWrite","setOne","slice","start","end","actualStart","actualEnd","removeOne","removeFirst","foundIndex","remove","push","unshift","shift","pop","peekAt","peekFirst","peekLast","has","clear","toArray","drain","Iterator","iterator","next","done","iter","idx"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "fastds",
|
3
3
|
"description": "Fast, Zero-Dependency, TypeScript-based data structures for high-performance applications.",
|
4
|
-
"version": "0.0.1-rc.
|
4
|
+
"version": "0.0.1-rc.1",
|
5
5
|
"type": "module",
|
6
6
|
"types": "build/index.d.ts",
|
7
7
|
"main": "build/index.cjs",
|
@@ -15,12 +15,6 @@
|
|
15
15
|
"src/index.ts",
|
16
16
|
"src/ring-buffer.ts"
|
17
17
|
],
|
18
|
-
"scripts": {
|
19
|
-
"build": "rm -rf build && inop -p src build -i *.d.ts -i __bench__ -i __tests__ -i *.tmp.ts && tsc --declaration --emitDeclarationOnly",
|
20
|
-
"test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest",
|
21
|
-
"bench": "overtake src/__bench__/*",
|
22
|
-
"docs:build": "echo documentation"
|
23
|
-
},
|
24
18
|
"keywords": [
|
25
19
|
"fast",
|
26
20
|
"data",
|
@@ -36,15 +30,20 @@
|
|
36
30
|
"type": "git",
|
37
31
|
"url": "git+https://github.com/3axap4eHko/fastds.git"
|
38
32
|
},
|
39
|
-
"packageManager": "pnpm@10.10.0",
|
40
33
|
"devDependencies": {
|
41
|
-
"@swc/jest": "^0.2.38",
|
42
|
-
"@types/jest": "^29.5.14",
|
43
34
|
"@types/node": "^22.15.21",
|
35
|
+
"@vitest/coverage-v8": "^3.2.4",
|
44
36
|
"denque": "^2.1.0",
|
45
37
|
"inop": "^0.7.8",
|
46
|
-
"jest": "^29.7.0",
|
47
38
|
"overtake": "1.0.0-rc.2",
|
48
|
-
"typescript": "^5.8.3"
|
39
|
+
"typescript": "^5.8.3",
|
40
|
+
"vitest": "^3.2.4"
|
41
|
+
},
|
42
|
+
"scripts": {
|
43
|
+
"build": "rm -rf build && inop -p src build -i *.d.ts -i __bench__ -i __tests__ -i *.tmp.ts && tsc --declaration --emitDeclarationOnly",
|
44
|
+
"test": "vitest run",
|
45
|
+
"test:coverage": "vitest run --coverage",
|
46
|
+
"bench": "overtake src/__bench__/*",
|
47
|
+
"docs:build": "echo documentation"
|
49
48
|
}
|
50
|
-
}
|
49
|
+
}
|
package/src/index.ts
CHANGED