Last active 1 year ago

mga's Avatar mga revised this gist 1 year ago. Go to revision

1 file changed, 49 insertions

circular_buffer.py(file created)

@@ -0,0 +1,49 @@
1 + class 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
Newer Older