mirror of
https://github.com/ruvnet/RuView
synced 2026-07-17 16:33:18 +00:00
fdc7142dfa
- 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.
49 lines
1.2 KiB
TypeScript
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]);
|
|
}
|
|
}
|