Files
ruvnet--RuView/ui/mobile/src/utils/ringBuffer.ts
T
ruv fdc7142dfa feat: Implement RSSI service for iOS and Web platforms
- Added IosRssiService to handle synthetic RSSI data for iOS.
- Created WebRssiService to simulate RSSI scanning on the web.
- Defined shared types for WifiNetwork and RssiService in rssi.service.ts.
- Introduced simulation service to generate synthetic sensing data.
- Implemented WebSocket service for real-time data handling with reconnection logic.
- Established Zustand stores for managing application state related to MAT and pose data.
- Developed theme context and utility functions for consistent styling and formatting.
- Added type definitions for various application entities including API responses and sensing data.
- Created utility functions for color mapping and URL validation.
- Configured TypeScript settings for the mobile application.
2026-03-02 10:30:33 -05:00

49 lines
1.2 KiB
TypeScript

export class RingBuffer<T> {
private readonly capacity: number;
private readonly compare?: (a: T, b: T) => number;
private readonly values: T[] = [];
constructor(capacity: number, compare?: (a: T, b: T) => number) {
if (!Number.isFinite(capacity) || capacity <= 0) {
throw new Error('RingBuffer capacity must be greater than 0');
}
this.capacity = Math.floor(capacity);
this.compare = compare;
}
push(v: T): void {
this.values.push(v);
if (this.values.length > this.capacity) {
this.values.shift();
}
}
toArray(): T[] {
return [...this.values];
}
clear(): void {
this.values.length = 0;
}
get max(): T | null {
if (this.values.length === 0) {
return null;
}
if (!this.compare) {
throw new Error('Comparator required for max()');
}
return this.values.reduce((acc, value) => (this.compare!(value, acc) > 0 ? value : acc), this.values[0]);
}
get min(): T | null {
if (this.values.length === 0) {
return null;
}
if (!this.compare) {
throw new Error('Comparator required for min()');
}
return this.values.reduce((acc, value) => (this.compare!(value, acc) < 0 ? value : acc), this.values[0]);
}
}