4 export const defaultBufferSize
= 2048
9 * @typeParam T - Type of buffer data.
12 export class CircularBuffer
<T
> {
13 private readonly readIdx
: number
14 private writeIdx
: number
15 private items
: Array<T
| undefined>
16 private readonly maxArrayIdx
: number
19 * @param size - Buffer size. @defaultValue defaultBufferSize
20 * @returns CircularBuffer.
22 constructor (size
: number = defaultBufferSize
) {
26 this.maxArrayIdx
= size
- 1
27 this.items
= new Array<T
| undefined>(size
)
31 * Puts data into buffer.
33 * @param data - Data to put into buffer.
35 public put (data
: T
): void {
36 this.items
[this.writeIdx
] = data
37 this.writeIdx
= this.writeIdx
=== this.maxArrayIdx
? 0 : this.writeIdx
+ 1
41 * Returns buffer as array.
43 * @returns Array of buffer data.
45 public toArray (): T
[] {
46 return this.items
.filter(item
=> item
!= null) as T
[]
49 private checkSize (size
: number): void {
50 if (!Number.isSafeInteger(size
)) {
52 `Invalid circular buffer size: ${size} is not an integer`
56 throw new RangeError(`Invalid circular buffer size: ${size} < 0`)