io: add a `cp` function (#9875)

pull/9877/head
Louis Schmieder 2021-04-25 20:22:33 +02:00 committed by GitHub
parent 7184629969
commit 00261afbc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 0 deletions

17
vlib/io/io.v 100644
View File

@ -0,0 +1,17 @@
module io
const (
buf_max_len = 5 * 1024
)
pub fn cp(dst Writer, src Reader) ? {
mut buf := read_all(reader: src) or {
return err
}
dst.write(buf) or {
return
}
unsafe {
buf.free()
}
}

43
vlib/io/io_test.v 100644
View File

@ -0,0 +1,43 @@
import io
struct Buf {
pub:
bytes []byte
mut:
i int
}
struct Writ {
pub mut:
bytes []byte
}
fn (mut b Buf) read(mut buf []byte) ?int {
if !(b.i < b.bytes.len) {
return none
}
n := copy(buf, b.bytes[b.i..])
b.i += n
return n
}
fn (mut w Writ) write(buf []byte) ?int {
if buf.len <= 0 {
return none
}
w.bytes << buf
return buf.len
}
fn test_copy() {
src := Buf{
bytes: 'abcdefghij'.repeat(10).bytes()
}
dst := Writ{
bytes: []byte{}
}
io.cp(dst, src) or {
assert false
}
assert dst.bytes == src.bytes
}