Circular Buffer Fixed Capacity

Implement a fixed-capacity circular buffer with O(1) push and read for streaming window statistics.

TypescriptData Integrity

Code

snippet
export class CircularBuffer<T>{private buffer:(T|undefined)[];private head=0;private tail=0;private count=0;constructor(private capacity:number){this.buffer=new Array(capacity);}push(item:T):T|undefined{const evicted=this.isFull()?this.buffer[this.head]:undefined;this.buffer[this.tail]=item;this.tail=(this.tail+1)%this.capacity;if(this.isFull())this.head=(this.head+1)%this.capacity;else this.count++;return evicted;}read():T|undefined{if(this.isEmpty())return undefined;const item=this.buffer[this.head];this.buffer[this.head]=undefined;this.head=(this.head+1)%this.capacity;this.count--;return item;}isFull(){return this.count===this.capacity;}isEmpty(){return this.count===0;}size(){return this.count;}toArray():T[]{const result:T[]=[];for(let i=0;i<this.count;i++)result.push(this.buffer[(this.head+i)%this.capacity]as T);return result;}}