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