cbe733d8f2d0841e27a0773a81a5d17d735c9adc
4 export const defaultBufferSize
= 2048
9 export class CircularBuffer
<T
> {
10 private readonly readIdx
: number
11 private writeIdx
: number
12 private items
: Array<T
| undefined>
13 private readonly maxArrayIdx
: number
16 * @param size - Buffer size
17 * @returns CircularBuffer
19 constructor (size
: number = defaultBufferSize
) {
23 this.maxArrayIdx
= size
- 1
24 this.items
= new Array<T
| undefined>(size
)
28 * Puts data into buffer
30 * @param data - Data to push
32 public put (data
: T
): void {
33 this.items
[this.writeIdx
] = data
34 this.writeIdx
= this.writeIdx
=== this.maxArrayIdx
? 0 : this.writeIdx
+ 1
38 * Returns buffer as array
42 public toArray (): T
[] {
43 return this.items
.filter(item
=> item
!= null) as T
[]
46 private checkSize (size
: number): void {
47 if (!Number.isSafeInteger(size
)) {
49 `Invalid circular buffer size: ${size} is not an integer`
53 throw new RangeError(`Invalid circular buffer size: ${size} < 0`)