authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-04-02 21:14:15+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-04-02 21:14:15+11:00
log34524a179227d1492229f52b93c61405455c47e8
treeffa447ddcf8f32cdabb358cdaa767ff397b9b1cc
parent2a031c8825832fa70299c3fb772d8230de723c22
signaturelock-open Commit is signed but in an unrecognized format.

std: add LinearFifo().inStream


1 files changed, 19 insertions(+), 0 deletions(-)

lib/std/fifo.zig+19
......@@ -215,6 +215,16 @@ pub fn LinearFifo(
215215 return dst.len - dst_left.len;
216216 }
217217
218 /// Same as `read` except it returns an error union
219 /// The purpose of this function existing is to match `std.io.InStream` API.
220 fn readFn(self: *Self, dest: []u8) error{}!usize {
221 return self.read(dest);
222 }
223
224 pub fn inStream(self: *Self) std.io.InStream(*Self, error{}, readFn) {
225 return .{ .context = self };
226 }
227
218228 /// Returns number of items available in fifo
219229 pub fn writableLength(self: Self) usize {
220230 return self.buf.len - self.count;
......@@ -414,6 +424,15 @@ test "LinearFifo(u8, .Dynamic)" {
414424 testing.expectEqualSlices(u8, "Hello, World!", result[0..fifo.read(&result)]);
415425 testing.expectEqual(@as(usize, 0), fifo.readableLength());
416426 }
427
428 {
429 try fifo.outStream().writeAll("This is a test");
430 var result: [30]u8 = undefined;
431 testing.expectEqualSlices(u8, "This", (try fifo.inStream().readUntilDelimiterOrEof(&result, ' ')).?);
432 testing.expectEqualSlices(u8, "is", (try fifo.inStream().readUntilDelimiterOrEof(&result, ' ')).?);
433 testing.expectEqualSlices(u8, "a", (try fifo.inStream().readUntilDelimiterOrEof(&result, ' ')).?);
434 testing.expectEqualSlices(u8, "test", (try fifo.inStream().readUntilDelimiterOrEof(&result, ' ')).?);
435 }
417436}
418437
419438test "LinearFifo" {