From c3644d15ded7cbc6178c8f348c971f7ae9946ee3 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 14 Nov 2021 18:01:01 -0800 Subject: [PATCH] MemStream improvements --- BeefLibs/corlib/src/IO/DynMemStream.bf | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/BeefLibs/corlib/src/IO/DynMemStream.bf b/BeefLibs/corlib/src/IO/DynMemStream.bf index 1fd2e235..64db81ce 100644 --- a/BeefLibs/corlib/src/IO/DynMemStream.bf +++ b/BeefLibs/corlib/src/IO/DynMemStream.bf @@ -15,6 +15,11 @@ namespace System.IO mOwnsData = true; } + public this(List data) + { + mData = data; + } + public uint8* Ptr { get @@ -112,4 +117,100 @@ namespace System.IO mData.RemoveRange(0, count); } } + + class DynMemStreamSequential : Stream + { + List mData ~ { if (mOwnsData) delete _; }; + bool mOwnsData; + + public this() + { + mData = new .(); + mOwnsData = true; + } + + public this(List data) + { + mData = data; + } + + public uint8* Ptr + { + get + { + return mData.Ptr; + } + } + + public Span Content + { + get + { + return mData; + } + } + + public override int64 Position + { + get + { + return mData.Count; + } + + set + { + Runtime.FatalError(); + } + } + + public override int64 Length + { + get + { + return mData.Count; + } + } + + public override bool CanRead + { + get + { + return true; + } + } + + public override bool CanWrite + { + get + { + return true; + } + } + + public List TakeOwnership() + { + Debug.Assert(mOwnsData); + mOwnsData = false; + return mData; + } + + public override Result TryRead(Span data) + { + return .Err; + } + + public override Result TryWrite(Span data) + { + let count = data.Length; + if (count == 0) + return .Ok(0); + Internal.MemCpy(mData.GrowUnitialized(count), data.Ptr, count); + return .Ok(count); + } + + public override Result Close() + { + return .Ok; + } + } }