Last active 1 year ago

Revision 4ef49bb4902258fd71e681cea8e081e185430b2e

circular_buffer.py Raw
1class CircularBuffer:
2 def __init__(self, size):
3 self.size = size
4 self.buffer = [None for i in range(size)]
5 self.head = 0
6 self.tail = 0
7
8 def push(self, item):
9 self.buffer[self.head] = item
10 self.head = (self.head + 1) % self.size
11 if self.head == self.tail:
12 self.tail = (self.tail + 1) % self.size
13
14 def pop(self):
15 item = self.buffer[self.tail]
16 self.tail = (self.tail + 1) % self.size
17 return item
18
19 def __len__(self):
20 return (self.head - self.tail) % self.size
21
22 def __getitem__(self, index):
23 return self.buffer[(self.tail + index) % self.size]
24
25 def sum(self):
26 sum = 0
27 for i in range(len(self)):
28 sum += self[i]
29 return sum
30
31 def min(self):
32 min = self[0]
33 for i in range(len(self)):
34 if self[i] < min:
35 min = self[i]
36 return min
37
38 def max(self):
39 max = self[0]
40 for i in range(len(self)):
41 if self[i] > max:
42 max = self[i]
43 return max
44
45 def resize(self, size):
46 self.size = size
47 self.buffer = [None for i in range(size)]
48 self.head = 0
49 self.tail = 0