Compare commits

...

3 Commits

Author SHA1 Message Date
72349459ec feat(channel): impl peek() 2023-05-23 01:38:15 -05:00
c1388c7318 fix: std.mem.set deprecated 2023-05-02 00:00:02 -05:00
d794a57b4e chore: update build.zig 2023-05-01 23:59:51 -05:00
2 changed files with 18 additions and 5 deletions

View File

@@ -27,18 +27,21 @@ pub fn build(b: *std.Build) void {
// This declares intent for the library to be installed into the standard
// location when the user invokes the "install" step (the default step when
// running `zig build`).
lib.install();
b.installArtifact(lib);
// Creates a step for unit testing.
// Creates a step for unit testing. This only builds the test executable
// but does not run it.
const main_tests = b.addTest(.{
.root_source_file = .{ .path = "src/main.zig" },
.root_source_file = .{ .path = "src/lib.zig" },
.target = target,
.optimize = optimize,
});
const run_main_tests = b.addRunArtifact(main_tests);
// This creates a build step. It will be visible in the `zig build --help` menu,
// and can be selected like this: `zig build test`
// This will evaluate the `test` step rather than the default, which is "install".
const test_step = b.step("test", "Run library tests");
test_step.dependOn(&main_tests.step);
test_step.dependOn(&run_main_tests.step);
}

View File

@@ -78,6 +78,16 @@ fn Channel(comptime T: type) type {
return value;
}
pub fn peek(self: *const Self) ?T {
const read_idx = self.read.load(.Acquire);
const write_idx = self.write.load(.Acquire);
if (read_idx == write_idx) return null;
std.atomic.fence(.Acquire);
return self.buf[self.mask(read_idx)];
}
pub fn len(self: *const Self) Index {
const read_idx = self.read.load(.Acquire);
const write_idx = self.write.load(.Acquire);
@@ -109,7 +119,7 @@ pub fn RingBuffer(comptime T: type) type {
std.debug.assert(std.math.isPowerOfTwo(buf.len)); // capacity must be a power of two
std.debug.assert(buf.len <= max_capacity);
std.mem.set(T, buf, 0);
@memset(buf, 0);
return .{ .read = 0, .write = 0, .buf = buf };
}