fifo.ts 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. export class FIFOBuffer<T> {
  2. private buffer: T[] = [];
  3. private readonly maxSize: number;
  4. constructor(maxSize: number) {
  5. if (maxSize <= 0) {
  6. throw new Error("Buffer size must be greater than 0");
  7. }
  8. this.maxSize = maxSize;
  9. }
  10. // 添加一个元素(如果超出大小则移除最旧的)
  11. enqueue(item: T): void {
  12. if (this.buffer.length >= this.maxSize) {
  13. this.buffer.shift(); // 移除最早的元素
  14. }
  15. this.buffer.push(item);
  16. }
  17. // 移除并返回最早的元素
  18. dequeue(): T | undefined {
  19. return this.buffer.shift();
  20. }
  21. // 查看最早的元素但不移除
  22. peek(): T | undefined {
  23. return this.buffer[0];
  24. }
  25. // 获取当前缓冲区大小
  26. size(): number {
  27. return this.buffer.length;
  28. }
  29. // 是否为空
  30. isEmpty(): boolean {
  31. return this.buffer.length === 0;
  32. }
  33. // 清空缓冲器
  34. clear(): void {
  35. this.buffer = [];
  36. }
  37. // 查看当前所有元素(按顺序)
  38. toArray(): T[] {
  39. return [...this.buffer];
  40. }
  41. }