mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-03 14:18:47 +00:00
Integrate package io into core library
This commit is contained in:
@@ -114,6 +114,21 @@ to_writer_to :: proc(s: Stream) -> (w: Writer_To, err: Conversion_Error) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
to_Write_Closer :: proc(s: Stream) -> (w: Write_Closer, err: Conversion_Error) {
|
||||
w.stream = s;
|
||||
if s.stream_vtable == nil || s.impl_write == nil || s.impl_close == nil {
|
||||
err = .Missing_Procedure;
|
||||
}
|
||||
return;
|
||||
}
|
||||
to_Write_Seeker :: proc(s: Stream) -> (w: Write_Seeker, err: Conversion_Error) {
|
||||
w.stream = s;
|
||||
if s.stream_vtable == nil || s.impl_write == nil || s.impl_seek == nil {
|
||||
err = .Missing_Procedure;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
to_byte_reader :: proc(s: Stream) -> (b: Byte_Reader, err: Conversion_Error) {
|
||||
b.stream = s;
|
||||
|
||||
+10
-3
@@ -96,6 +96,9 @@ Read_Writer :: struct {using stream: Stream};
|
||||
Read_Closer :: struct {using stream: Stream};
|
||||
Read_Write_Closer :: struct {using stream: Stream};
|
||||
Read_Write_Seeker :: struct {using stream: Stream};
|
||||
|
||||
Write_Closer :: struct {using stream: Stream};
|
||||
Write_Seeker :: struct {using stream: Stream};
|
||||
Write_Flusher :: struct {using stream: Stream};
|
||||
Write_Flush_Closer :: struct {using stream: Stream};
|
||||
|
||||
@@ -117,7 +120,6 @@ destroy :: proc(s: Stream) -> Error {
|
||||
if s.stream_vtable != nil && s.impl_destroy != nil {
|
||||
return s->impl_destroy();
|
||||
}
|
||||
// Instead of .Empty, .None is fine in this case
|
||||
return close_err;
|
||||
}
|
||||
|
||||
@@ -205,9 +207,14 @@ read_at :: proc(r: Reader_At, p: []byte, offset: i64) -> (n: int, err: Error) {
|
||||
if err != nil {
|
||||
return 0, err;
|
||||
}
|
||||
defer r->impl_seek(current_offset, .Start);
|
||||
|
||||
return r->impl_read(p);
|
||||
n, err = r->impl_read(p);
|
||||
if err != nil {
|
||||
return;
|
||||
}
|
||||
_, err = r->impl_seek(current_offset, .Start);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
write_at :: proc(w: Writer_At, p: []byte, offset: i64) -> (n: int, err: Error) {
|
||||
|
||||
@@ -14,6 +14,13 @@ write_i64 :: proc(w: Writer, i: i64, base: int = 10) -> (n: int, err: Error) {
|
||||
return write_string(w, s);
|
||||
}
|
||||
|
||||
write_uint :: proc(w: Writer, i: uint, base: int = 10) -> (n: int, err: Error) {
|
||||
return write_u64(w, u64(i), base);
|
||||
}
|
||||
write_int :: proc(w: Writer, i: int, base: int = 10) -> (n: int, err: Error) {
|
||||
return write_i64(w, i64(i), base);
|
||||
}
|
||||
|
||||
@(private)
|
||||
Tee_Reader :: struct {
|
||||
using stream: Stream,
|
||||
|
||||
Reference in New Issue
Block a user