awlane | 1cec233 | 2025-04-24 17:24:47 -0500 | [diff] [blame^] | 1 | class CircularByteBuffer: |
| 2 | """Byte buffer handmade for terminal output""" |
| 3 | size: int = 0 |
| 4 | start: int = 0 |
| 5 | buffer: bytearray |
| 6 | |
| 7 | def __init__(self, size: int): |
| 8 | self.buffer = bytearray(size) |
| 9 | |
| 10 | def writeByte(self, byte: int): |
| 11 | if self.size < len(self.buffer): |
| 12 | self.buffer[self.size] = byte |
| 13 | self.size += 1 |
| 14 | return |
| 15 | |
| 16 | self.buffer[self.start % self.size] = byte |
| 17 | self.start = (self.start + 1) % self.size |
| 18 | |
| 19 | def write(self, data: bytes): |
| 20 | for byte in data: |
| 21 | self.writeByte(byte) |
| 22 | |
| 23 | def read(self): |
| 24 | if self.size <= len(self.buffer): |
| 25 | return self.buffer[self.start:self.start + self.size] |
| 26 | else: |
| 27 | return self.buffer[self.start:] + self.buffer[:self.start] |