io: add a `cp` function (#9875)
parent
7184629969
commit
00261afbc1
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue