mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
io: add a cp
function (#9875)
This commit is contained in:
parent
7184629969
commit
00261afbc1
17
vlib/io/io.v
Normal file
17
vlib/io/io.v
Normal 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
Normal file
43
vlib/io/io_test.v
Normal 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user