diff --git a/src/lib.zig b/src/lib.zig index 94f8cf6d11e074959e72f291eb33beb7b313578a..b3b361a276f620a8bee6443ebe4daedba46ffee8 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -814,3 +814,22 @@ pub fn sum(comptime T: type, slice: []const T) T { for (slice) |item| res += item; return res; } + +pub fn RingBuffer(comptime T: type, comptime capacity: usize) type { + return struct { + items: [capacity]T = undefined, + len: usize = 0, + comptime capacity: usize = capacity, + + const Self = @This(); + + pub fn append(self: *Self, new_item: T) void { + if (self.len == self.capacity) { + for (1..self.len) |i| self.items[i - 1] = self.items[i]; + self.len -= 1; + } + self.items[self.len] = new_item; + self.len += 1; + } + }; +}