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.
@@ -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 || index > prevLength || count <= 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
  }
@@ -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.0",
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
@@ -1,3 +1,2 @@
1
1
  export { BinarySearchArray } from './binary-search.js';
2
2
  export { RingBuffer } from './ring-buffer.js';
3
-