X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FCircularArray.ts;h=bd768673605021a31aaf498278f0d50db6a8fa41;hb=769d3b106c5e4744487bc633da4e4ee93f8f1bf4;hp=f87ddd458bf5e67e82ee90d88932a349769f224b;hpb=5edd8ba0f8978cfb3ca9d80f299d9748c6c5970e;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/CircularArray.ts b/src/utils/CircularArray.ts index f87ddd45..bd768673 100644 --- a/src/utils/CircularArray.ts +++ b/src/utils/CircularArray.ts @@ -45,18 +45,24 @@ export class CircularArray extends Array { return concatenatedCircularArray; } - public splice(start: number, deleteCount?: number, ...items: T[]): T[] { - let itemsRemoved: T[]; + public splice(start: number, deleteCount?: number, ...items: T[]): CircularArray { + let itemsRemoved: T[] = []; if (arguments.length >= 3 && deleteCount !== undefined) { - itemsRemoved = super.splice(start, deleteCount); - // FIXME: that makes the items insert not in place - this.push(...items); + 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; + return itemsRemoved as CircularArray; } public resize(size: number): void {