/**
* Circular buffer designed for positive numbers.
- *
* @internal
*/
export class CircularBuffer {
- private readIdx: number
- private writeIdx: number
private readonly items: Float32Array
private readonly maxArrayIdx: number
+ private readIdx: number
+ private writeIdx: number
public size: number
/**
this.items = new Float32Array(size).fill(-1)
}
+ /**
+ * Checks the buffer size.
+ * @param size - Buffer size.
+ */
+ private checkSize (size: number): void {
+ if (!Number.isSafeInteger(size)) {
+ throw new TypeError(
+ `Invalid circular buffer size: '${size.toString()}' is not an integer`
+ )
+ }
+ if (size < 0) {
+ throw new RangeError(
+ `Invalid circular buffer size: ${size.toString()} < 0`
+ )
+ }
+ }
+
/**
* Checks whether the buffer is empty.
- *
* @returns Whether the buffer is empty.
*/
public empty (): boolean {
/**
* Checks whether the buffer is full.
- *
* @returns Whether the buffer is full.
*/
public full (): boolean {
return this.size === this.items.length
}
- /**
- * Puts number into buffer.
- *
- * @param number - Number to put into buffer.
- */
- public put (number: number): void {
- this.items[this.writeIdx] = number
- this.writeIdx = this.writeIdx === this.maxArrayIdx ? 0 : this.writeIdx + 1
- if (this.size < this.items.length) {
- ++this.size
- }
- }
-
/**
* Gets number from buffer.
- *
* @returns Number from buffer.
*/
public get (): number | undefined {
}
/**
- * Returns buffer as numbers' array.
- *
- * @returns Numbers' array.
+ * Puts number into buffer.
+ * @param number - Number to put into buffer.
*/
- public toArray (): number[] {
- return Array.from(this.items.filter(item => item !== -1))
+ public put (number: number): void {
+ this.items[this.writeIdx] = number
+ this.writeIdx = this.writeIdx === this.maxArrayIdx ? 0 : this.writeIdx + 1
+ if (this.size < this.items.length) {
+ ++this.size
+ }
}
/**
- * Checks the buffer size.
- *
- * @param size - Buffer size.
+ * Returns buffer as numbers' array.
+ * @returns Numbers' array.
*/
- private checkSize (size: number): void {
- if (!Number.isSafeInteger(size)) {
- throw new TypeError(
- `Invalid circular buffer size: '${size}' is not an integer`
- )
- }
- if (size < 0) {
- throw new RangeError(`Invalid circular buffer size: ${size} < 0`)
- }
+ public toArray (): number[] {
+ return Array.from(this.items.filter(item => item !== -1))
}
}