io: mark the mutability requirements of the Writer interface explicitly; swap the io.cp/2 parameter order to be like os.cp/2 (#10091)
							parent
							
								
									14b7ce0f04
								
							
						
					
					
						commit
						1086b4ac5e
					
				|  | @ -4,7 +4,7 @@ const ( | ||||||
| 	buf_max_len = 1024 | 	buf_max_len = 1024 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| pub fn cp(dst Writer, src Reader) ? { | pub fn cp(src Reader, mut dst Writer) ? { | ||||||
| 	mut buf := []byte{len: io.buf_max_len} | 	mut buf := []byte{len: io.buf_max_len} | ||||||
| 	for { | 	for { | ||||||
| 		len := src.read(mut buf) or { break } | 		len := src.read(mut buf) or { break } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | import io | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | fn test_cp() ? { | ||||||
|  | 	mut f := os.open(@FILE) or { panic(err) } | ||||||
|  | 	defer { | ||||||
|  | 		f.close() | ||||||
|  | 	} | ||||||
|  | 	mut r := io.new_buffered_reader(reader: f) | ||||||
|  | 	mut stdout := os.stdout() | ||||||
|  | 	io.cp(r, mut stdout) ? | ||||||
|  | 	assert true | ||||||
|  | } | ||||||
|  | @ -33,9 +33,9 @@ fn test_copy() { | ||||||
| 	src := Buf{ | 	src := Buf{ | ||||||
| 		bytes: 'abcdefghij'.repeat(10).bytes() | 		bytes: 'abcdefghij'.repeat(10).bytes() | ||||||
| 	} | 	} | ||||||
| 	dst := Writ{ | 	mut dst := Writ{ | ||||||
| 		bytes: []byte{} | 		bytes: []byte{} | ||||||
| 	} | 	} | ||||||
| 	io.cp(dst, src) or { assert false } | 	io.cp(src, mut dst) or { assert false } | ||||||
| 	assert dst.bytes == src.bytes | 	assert dst.bytes == src.bytes | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ pub fn new_multi_writer(writers ...Writer) Writer { | ||||||
| 
 | 
 | ||||||
| // MultiWriter writes to all its writers.
 | // MultiWriter writes to all its writers.
 | ||||||
| pub struct MultiWriter { | pub struct MultiWriter { | ||||||
| pub: | pub mut: | ||||||
| 	writers []Writer | 	writers []Writer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -22,8 +22,8 @@ pub: | ||||||
| // written. If any writer fails to write the full length an error is returned
 | // written. If any writer fails to write the full length an error is returned
 | ||||||
| // and writing to other writers stops. If any writer returns an error the error
 | // and writing to other writers stops. If any writer returns an error the error
 | ||||||
| // is returned immediately and writing to other writers stops.
 | // is returned immediately and writing to other writers stops.
 | ||||||
| pub fn (m MultiWriter) write(buf []byte) ?int { | pub fn (mut m MultiWriter) write(buf []byte) ?int { | ||||||
| 	for w in m.writers { | 	for mut w in m.writers { | ||||||
| 		n := w.write(buf) ? | 		n := w.write(buf) ? | ||||||
| 		if n != buf.len { | 		if n != buf.len { | ||||||
| 			return error('io: incomplete write to writer of MultiWriter') | 			return error('io: incomplete write to writer of MultiWriter') | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ module io | ||||||
| fn test_multi_writer_write_successful() { | fn test_multi_writer_write_successful() { | ||||||
| 	w0 := TestWriter{} | 	w0 := TestWriter{} | ||||||
| 	w1 := TestWriter{} | 	w1 := TestWriter{} | ||||||
| 	mw := new_multi_writer(w0, w1) | 	mut mw := new_multi_writer(w0, w1) | ||||||
| 	n := mw.write('0123456789'.bytes()) or { | 	n := mw.write('0123456789'.bytes()) or { | ||||||
| 		assert false | 		assert false | ||||||
| 		return | 		return | ||||||
|  | @ -16,7 +16,7 @@ fn test_multi_writer_write_successful() { | ||||||
| fn test_multi_writer_write_incomplete() { | fn test_multi_writer_write_incomplete() { | ||||||
| 	w0 := TestWriter{} | 	w0 := TestWriter{} | ||||||
| 	w1 := TestIncompleteWriter{} | 	w1 := TestIncompleteWriter{} | ||||||
| 	mw := new_multi_writer(w0, w1) | 	mut mw := new_multi_writer(w0, w1) | ||||||
| 	n := mw.write('0123456789'.bytes()) or { | 	n := mw.write('0123456789'.bytes()) or { | ||||||
| 		assert w0.bytes == '0123456789'.bytes() | 		assert w0.bytes == '0123456789'.bytes() | ||||||
| 		assert w1.bytes == '012345678'.bytes() | 		assert w1.bytes == '012345678'.bytes() | ||||||
|  | @ -29,7 +29,7 @@ fn test_multi_writer_write_error() { | ||||||
| 	w0 := TestWriter{} | 	w0 := TestWriter{} | ||||||
| 	w1 := TestErrorWriter{} | 	w1 := TestErrorWriter{} | ||||||
| 	w2 := TestWriter{} | 	w2 := TestWriter{} | ||||||
| 	mw := new_multi_writer(w0, w1, w2) | 	mut mw := new_multi_writer(w0, w1, w2) | ||||||
| 	n := mw.write('0123456789'.bytes()) or { | 	n := mw.write('0123456789'.bytes()) or { | ||||||
| 		assert w0.bytes == '0123456789'.bytes() | 		assert w0.bytes == '0123456789'.bytes() | ||||||
| 		assert w2.bytes == [] | 		assert w2.bytes == [] | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ pub interface ReaderWriter { | ||||||
| // a seperate reader and writer (see fn make_readerwriter)
 | // a seperate reader and writer (see fn make_readerwriter)
 | ||||||
| struct ReaderWriterImpl { | struct ReaderWriterImpl { | ||||||
| 	r Reader | 	r Reader | ||||||
|  | mut: | ||||||
| 	w Writer | 	w Writer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ const ( | ||||||
| 		'float', 'for', 'free', 'goto', 'if', 'inline', 'int', 'link', 'long', 'malloc', 'namespace', | 		'float', 'for', 'free', 'goto', 'if', 'inline', 'int', 'link', 'long', 'malloc', 'namespace', | ||||||
| 		'new', 'panic', 'register', 'restrict', 'return', 'short', 'signed', 'sizeof', 'static', | 		'new', 'panic', 'register', 'restrict', 'return', 'short', 'signed', 'sizeof', 'static', | ||||||
| 		'struct', 'switch', 'typedef', 'typename', 'union', 'unix', 'unsigned', 'void', 'volatile', | 		'struct', 'switch', 'typedef', 'typename', 'union', 'unix', 'unsigned', 'void', 'volatile', | ||||||
| 		'while', 'template'] | 		'while', 'template', 'stdout', 'stdin', 'stderr'] | ||||||
| 	c_reserved_map = string_array_to_map(c_reserved) | 	c_reserved_map = string_array_to_map(c_reserved) | ||||||
| 	// same order as in token.Kind
 | 	// same order as in token.Kind
 | ||||||
| 	cmp_str        = ['eq', 'ne', 'gt', 'lt', 'ge', 'le'] | 	cmp_str        = ['eq', 'ne', 'gt', 'lt', 'ge', 'le'] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue