64557bf9ab
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
21 lines
670 B
Zig
21 lines
670 B
Zig
const std = @import("std");
|
|
const testing = std.testing;
|
|
|
|
const GraphemeCache = @This();
|
|
|
|
/// the underlying storage for graphemes. Right now 8kb
|
|
buf: [1024 * 8]u8 = undefined,
|
|
|
|
// the start index of the next grapheme
|
|
idx: usize = 0,
|
|
|
|
/// put a slice of bytes in the cache as a grapheme
|
|
pub fn put(self: *GraphemeCache, bytes: []const u8) []u8 {
|
|
// reset the idx to 0 if we would overflow
|
|
if (self.idx + bytes.len > self.buf.len) self.idx = 0;
|
|
defer self.idx += bytes.len;
|
|
// copy the grapheme to our storage
|
|
@memcpy(self.buf[self.idx .. self.idx + bytes.len], bytes);
|
|
// return the slice
|
|
return self.buf[self.idx .. self.idx + bytes.len];
|
|
}
|