Source code for track.containers.ring

import array


[docs]class RingBuffer: def __init__(self, size, dtype, default_val=0): if len(str(dtype)) > 1: self.array = [default_val] * size else: self.array = array.array(dtype, [default_val] * size) self.capacity = size self.offset = 0 def __getitem__(self, item): return self.array[item % self.capacity] def __setitem__(self, item, value): self.array[item % self.capacity] = value
[docs] def append(self, item): self.array[self.offset % self.capacity] = item self.offset += 1
[docs] def to_list(self): if self.offset < self.capacity: return list(self.array[:self.offset]) else: end_idx = self.offset % self.capacity return list(self.array[end_idx: self.capacity]) + list(self.array[0:end_idx])
def __len__(self): return min(self.capacity, self.offset)
[docs] def last(self): if self.offset == 0: return None return self.array[(self.offset - 1) % self.capacity]