From 7cc95c2b0729ae385552e8580a3c8b4436b506c6 Mon Sep 17 00:00:00 2001 From: moneyl <8206401+Moneyl@users.noreply.github.com> Date: Tue, 16 Mar 2021 19:06:01 -0400 Subject: [PATCH] Add functions to System.IO.Stream --- BeefLibs/corlib/src/IO/Stream.bf | 52 ++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/BeefLibs/corlib/src/IO/Stream.bf b/BeefLibs/corlib/src/IO/Stream.bf index dd989abf..f70f49ad 100644 --- a/BeefLibs/corlib/src/IO/Stream.bf +++ b/BeefLibs/corlib/src/IO/Stream.bf @@ -63,6 +63,58 @@ namespace System.IO public abstract Result TryWrite(Span data); public abstract void Close(); + //Read value from stream without changing position. Position won't change even if it returns .Err + public Result Peek() where T : struct + { + T val = ?; + int size = Try!(TryRead(.((uint8*)&val, sizeof(T)))); + Seek(Position - size, .Absolute); + if (size != sizeof(T)) + return .Err; + + return .Ok(val); + } + + //Skip count bytes + public void Skip(int64 count) + { + Seek(Position + count, .Absolute); + } + + //Write count null bytes to stream + public void WriteNullBytes(int64 count) + { + if(count <= 0) + return; + + int64 nullBytesRemaining = count; + int64 emptyData = 0; + while (nullBytesRemaining > 0) + { + int64 writeSize = Math.Min(nullBytesRemaining, sizeof(decltype(emptyData))); + TryWrite(.((uint8*)&emptyData, (int)writeSize)); + nullBytesRemaining -= writeSize; + } + } + + //Read sized string from stream + public Result ReadSizedString(int64 size, String output) + { + if (size <= 0) + return .Err; + + for (int64 i = 0; i < size; i++) + { + Result char = Read(); + if (char == .Err) + return .Err; + + output.Append(char); + } + + return .Ok; + } + public Result Read() where T : struct { T val = ?;