X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcircular-array.ts;h=2347327927d96f46063bb3f17d8e9060173a722c;hb=HEAD;hp=511b699c8827a2a214efe63e2fce9dfabfcee73a;hpb=bbc989112ae05d76a27e6a72a28ba979d941e1b2;p=poolifier.git diff --git a/src/circular-array.ts b/src/circular-array.ts deleted file mode 100644 index 511b699c..00000000 --- a/src/circular-array.ts +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright Jerome Benoit. 2021-2024. All Rights Reserved. - -export const DEFAULT_CIRCULAR_ARRAY_SIZE = 1024 - -/** - * Array with a maximum length and shifting items when full. - * - * @typeParam T - Type of items. - * @internal - */ -export class CircularArray extends Array { - public size: number - - constructor (size: number = DEFAULT_CIRCULAR_ARRAY_SIZE, ...items: T[]) { - super() - this.checkSize(size) - this.size = size - if (arguments.length > 1) { - this.push(...items) - } - } - - /** @inheritDoc */ - public push (...items: T[]): number { - const length = super.push(...items) - if (length > this.size) { - super.splice(0, length - this.size) - } - return this.length - } - - /** @inheritDoc */ - public unshift (...items: T[]): number { - const length = super.unshift(...items) - if (length > this.size) { - super.splice(this.size, items.length) - } - return this.length - } - - /** @inheritDoc */ - public concat (...items: Array>): CircularArray { - const concatenatedCircularArray = super.concat( - items as T[] - ) as CircularArray - concatenatedCircularArray.size = this.size - if (concatenatedCircularArray.length > concatenatedCircularArray.size) { - concatenatedCircularArray.splice( - 0, - concatenatedCircularArray.length - concatenatedCircularArray.size - ) - } - return concatenatedCircularArray - } - - /** @inheritDoc */ - public splice ( - start: number, - deleteCount?: number, - ...items: T[] - ): CircularArray { - let itemsRemoved: T[] = [] - if (arguments.length >= 3 && deleteCount != null) { - itemsRemoved = super.splice(start, deleteCount, ...items) - if (this.length > this.size) { - const itemsOverflowing = super.splice(0, this.length - this.size) - itemsRemoved = new CircularArray( - itemsRemoved.length + itemsOverflowing.length, - ...itemsRemoved, - ...itemsOverflowing - ) - } - } else if (arguments.length === 2) { - itemsRemoved = super.splice(start, deleteCount) - } else { - itemsRemoved = super.splice(start) - } - return itemsRemoved as CircularArray - } - - public resize (size: number): void { - this.checkSize(size) - if (size === 0) { - this.length = 0 - } else if (size < this.size) { - for (let i = size; i < this.size; i++) { - super.pop() - } - } - this.size = size - } - - public empty (): boolean { - return this.length === 0 - } - - public full (): boolean { - return this.length === this.size - } - - private checkSize (size: number): void { - if (!Number.isSafeInteger(size)) { - throw new TypeError( - `Invalid circular array size: ${size} is not a safe integer` - ) - } - if (size < 0) { - throw new RangeError(`Invalid circular array size: ${size} < 0`) - } - } -}