From 508a850c54a2dd27e0654c4f50188b3820078f86 Mon Sep 17 00:00:00 2001 From: Jim Horvath <38920027+jhorv@users.noreply.github.com> Date: Sun, 4 Feb 2024 01:09:19 -0500 Subject: [PATCH] - WritableRegion: enable wrapping IMemoryOwner - IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous. - IVirtualMemoryManager: add GetReadOnlySequence() and impls - ByteMemoryPool: add new method RentCopy() - ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl --- .../Memory/BytesReadOnlySequenceSegment.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs diff --git a/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs b/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs new file mode 100644 index 0000000000..9c4cd1ff36 --- /dev/null +++ b/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs @@ -0,0 +1,26 @@ +using System; +using System.Buffers; + +namespace Ryujinx.Common.Memory +{ + /// + /// A concrete implementation of , + /// with methods to help build a full sequence. + /// + public sealed class BytesReadOnlySequenceSegment : ReadOnlySequenceSegment + { + public BytesReadOnlySequenceSegment(Memory memory) => Memory = memory; + + public BytesReadOnlySequenceSegment Append(Memory memory) + { + var nextSegment = new BytesReadOnlySequenceSegment(memory) + { + RunningIndex = RunningIndex + Memory.Length + }; + + Next = nextSegment; + + return nextSegment; + } + } +}