shithub: mc

Download patch

ref: 99e1677b6bf577fb4db18f50a92df79ea47e9e0e
parent: c505373d1bbcad1e7861f6db054eddcfd5cac354
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Jun 12 05:51:51 EDT 2017

Add missing file.

--- /dev/null
+++ b/lib/bio/mem.myr
@@ -1,0 +1,45 @@
+use std
+use "bio"
+
+pkg bio =
+	const mkmem	: (buf : byte[:] -> file#)
+;;
+
+type mem = struct
+	buf	: byte[:]
+	off	: std.size
+;;
+
+const mkmem = {buf
+	var mem : mem#
+
+	mem = std.mk([
+		.buf = buf,
+		.off = 0
+	])
+
+	-> mk(Rd, [
+		.read = {buf; -> memread(mem, buf)},
+		.write = {buf; -> memwrite(mem, buf)},
+		.seek = {off; mem.off = std.clamp(off, 0, mem.buf.len); -> `std.Ok mem.off},
+		.close = {; std.free(mem)},
+	])
+}
+
+const memread = {mem, dst
+	var n
+
+	n = std.min(mem.buf.len - mem.off, dst.len)
+	std.slcp(dst[:n], mem.buf[mem.off:mem.off+n])
+	mem.off += n
+	-> `std.Ok n
+}
+
+const memwrite = {mem, src
+	var n
+
+	n = std.min(mem.buf.len - mem.off, src.len)
+	std.slcp(mem.buf[mem.off:mem.off+n], src[:n])
+	mem.off += n
+	-> `std.Ok n
+}