io
目的
- byte stream / text stream の
読 み書 き能力 を trait として分離 し、std/streamioやstd/ioが共通 入口 を構築 できるようにします。 - binary stream の
媒体 として、fd_read/fd_writeにそのまま渡 せる連続 byte bufferByteBufを定義 します。
注意
- ここでは syscall や descriptor を
扱 いません。具体的 な入出力 はstd/streamioやstd/fsが担当 します。 ByteBufは所有権 を持 つのでCopy/Cloneを実装 しません。
TEST
#entry main
#target std
#import "std/test" as *
#import "alloc/io" as *
struct CountSink:
total <i32>
impl ByteWriter for CountSink:
fn write_bytes <(CountSink,ByteBuf)*>Result<CountSink, StdErrorKind>> (sink, bytes):
let n <i32> get bytes "len";
io_bytebuf_free bytes;
Result::Ok CountSink add get sink "total" n
fn main <()*>i32> ():
let bytes0 <ByteBuf> io_bytebuf_from_str "AB";
match io_write_bytes (CountSink 3) bytes0:
Result::Ok sink1:
if eq get sink1 "total" 5 0 1
Result::Err _e:
0ByteBuf
目的
Vec<u8>の内部表現 に依存 せず、binary I/O の媒体 を明示的 に表 します。
注意
ptrはlenbyte の所有領域 を指 します。使 い終 わったらio_bytebuf_freeで解放 してください。
ByteReader
ByteWriter
TextReader
text として
TextWriter
text を
Flush
Close
stream を