diff --git a/lib/std/io/io_file.c3 b/lib/std/io/io_file.c3 index c6887ed19..9831528fd 100644 --- a/lib/std/io/io_file.c3 +++ b/lib/std/io/io_file.c3 @@ -102,6 +102,16 @@ fn usz! File.read(self, char[] buffer) return os::native_fread(self.file, buffer); } +/** + * @param ref "the object to read into." + * @require ref.ptr != null + * @ensure return == ref.type.sizeof + */ +fn usz! File.read_any(self, any ref) +{ + return self.read(((char*)ref.ptr)[:ref.type.sizeof]); +} + /** * @param [out] buffer * @require self.file `File must be initialized` @@ -111,6 +121,16 @@ fn usz! File.write(self, char[] buffer) return os::native_fwrite(self.file, buffer); } +/** + * @param ref "the object to write." + * @require ref.ptr != null + * @ensure return == ref.type.sizeof + */ +fn usz! File.write_any(self, any ref) +{ + return self.write(((char*)ref.ptr)[:ref.type.sizeof]); +} + /** * @require self.file `File must be initialized` */ diff --git a/lib/std/io/io_stream.c3 b/lib/std/io/io_stream.c3 index c8fa9e777..9109792ca 100644 --- a/lib/std/io/io_stream.c3 +++ b/lib/std/io/io_stream.c3 @@ -77,6 +77,22 @@ fn usz! Stream.available(self) @inline return IoError.NOT_SEEKABLE?; } +fn usz! Stream.read_any(self, any ref) +{ + return self.read(((char*)ref.ptr)[:ref.type.sizeof]); +} + +/** + * @param ref "the object to write." + * @require ref.ptr != null + * @ensure return == ref.type.sizeof + */ +fn usz! Stream.write_any(self, any ref) +{ + return self.write(((char*)ref.ptr)[:ref.type.sizeof]); +} + + fn usz! Stream.read(self, char[] buffer) { if (ReadStreamFn func = self.fns.read_fn) return func(self, buffer);