ref: 5a6878701b5066d0143b0a2e21be35ce7f3d8976
dir: /lib/bio/mem.myr/
use std
use "bio"
use "types"
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; -> memseek(mem, off)},
.close = {; std.free(mem); -> true},
])
}
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
}
const memseek = {mem, off : std.off
off = std.clamp(off, 0, mem.buf.len)
mem.off = (off : std.size)
-> `std.Ok off
}