X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FCircularArray.ts;h=439f0827fbe1d8afe5bfbe02054396715a1b2c28;hb=2b490d73f321440ab8970263d29cd35c4d43997f;hp=bf9553109f53bf8f2f9a687ab6cf9fadf13be3cb;hpb=534434b0ac7e1b9803ffc0d23c6f4ebf88b2c32a;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/CircularArray.ts b/src/utils/CircularArray.ts index bf955310..439f0827 100644 --- a/src/utils/CircularArray.ts +++ b/src/utils/CircularArray.ts @@ -1,6 +1,11 @@ -const DEFAULT_CIRCULAR_ARRAY_SIZE = 2000; +// Copyright Jerome Benoit. 2021-2023. All Rights Reserved. -export default class CircularArray extends Array { +const DEFAULT_CIRCULAR_ARRAY_SIZE = 1024; + +/** + * Array with a maximum length shifting items when full. + */ +export class CircularArray extends Array { public size: number; constructor(size: number = DEFAULT_CIRCULAR_ARRAY_SIZE, ...items: T[]) { @@ -25,18 +30,16 @@ export default class CircularArray extends Array { if (length > this.size) { super.splice(this.size, items.length); } - return length; + return this.length; } public concat(...items: (T | ConcatArray)[]): CircularArray { - const concatenatedCircularArray = super.concat( - items as T[] - ) as CircularArray; + const concatenatedCircularArray = super.concat(items as T[]) as CircularArray; concatenatedCircularArray.size = this.size; if (concatenatedCircularArray.length > concatenatedCircularArray.size) { concatenatedCircularArray.splice( 0, - concatenatedCircularArray.length - this.size + concatenatedCircularArray.length - concatenatedCircularArray.size ); } return concatenatedCircularArray; @@ -44,7 +47,7 @@ export default class CircularArray extends Array { public splice(start: number, deleteCount?: number, ...items: T[]): T[] { let itemsRemoved: T[]; - if (arguments.length >= 3 && typeof deleteCount !== 'undefined') { + if (arguments.length >= 3 && deleteCount !== undefined) { itemsRemoved = super.splice(start, deleteCount); // FIXME: that makes the items insert not in place this.push(...items); @@ -77,8 +80,11 @@ export default class CircularArray extends Array { } private checkSize(size: number) { + 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'); + throw new RangeError(`Invalid circular array size: ${size} < 0`); } } }