mirror of
https://github.com/NuclearPowered/Reactor.git
synced 2026-10-19 15:51:54 +00:00
StreamWrapper
This commit is contained in:
3 files changed
+83
-1
No files matched your search
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using UnhollowerBaseLib;
|
||||
using UnhollowerBaseLib.Attributes;
|
||||
using UnhollowerRuntimeLib;
|
||||
|
||||
namespace Reactor.Extensions
|
||||
{
|
||||
[RegisterInIl2Cpp]
|
||||
public class StreamWrapper : Il2CppSystem.IO.Stream
|
||||
{
|
||||
private readonly Stream _stream;
|
||||
|
||||
public StreamWrapper(IntPtr ptr) : base(ptr) { }
|
||||
|
||||
public StreamWrapper(Stream stream) : base(ClassInjector.DerivedConstructorPointer<StreamWrapper>())
|
||||
{
|
||||
ClassInjector.DerivedConstructorBody(this);
|
||||
_stream = stream;
|
||||
}
|
||||
|
||||
[HideFromIl2Cpp]
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private static unsafe Span<byte> GetSpan(Il2CppStructArray<byte> buffer, int offset, int count)
|
||||
{
|
||||
var rawBuffer = (byte*) buffer.Pointer + 4 * IntPtr.Size;
|
||||
return new Span<byte>(rawBuffer + offset, count);
|
||||
}
|
||||
|
||||
public override int Read(Il2CppStructArray<byte> buffer, int offset, int count)
|
||||
{
|
||||
return _stream.Read(GetSpan(buffer, offset, count));
|
||||
}
|
||||
|
||||
public override void Write(Il2CppStructArray<byte> buffer, int offset, int count)
|
||||
{
|
||||
_stream.Write(GetSpan(buffer, offset, count));
|
||||
}
|
||||
|
||||
public override void Flush()
|
||||
{
|
||||
_stream.Flush();
|
||||
}
|
||||
|
||||
public override long Seek(long offset, Il2CppSystem.IO.SeekOrigin origin)
|
||||
{
|
||||
return _stream.Seek(offset, origin switch
|
||||
{
|
||||
Il2CppSystem.IO.SeekOrigin.Begin => SeekOrigin.Begin,
|
||||
Il2CppSystem.IO.SeekOrigin.Current => SeekOrigin.Current,
|
||||
Il2CppSystem.IO.SeekOrigin.End => SeekOrigin.End,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(origin), origin, null)
|
||||
});
|
||||
}
|
||||
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
_stream.SetLength(value);
|
||||
}
|
||||
|
||||
public override bool CanRead => _stream.CanRead;
|
||||
public override bool CanSeek => _stream.CanSeek;
|
||||
public override bool CanWrite => _stream.CanWrite;
|
||||
public override long Length => _stream.Length;
|
||||
|
||||
public override long Position
|
||||
{
|
||||
get => _stream.Position;
|
||||
set => _stream.Position = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static class StreamExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Wraps a System Stream into an Il2Cpp Stream
|
||||
/// </summary>
|
||||
public static StreamWrapper AsIl2Cpp(this Stream stream) => new(stream);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<DebugType>embedded</DebugType>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
|
||||
<VersionPrefix>1.1.0</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Reactor.Unstrip
|
||||
{
|
||||
public static void Load()
|
||||
{
|
||||
var bundle = AssetBundle.LoadFromMemory(typeof(ReactorPlugin).Assembly.GetManifestResourceStream("Reactor.Assets.default.bundle").ReadFully());
|
||||
var bundle = AssetBundle.LoadFromStream(typeof(ReactorPlugin).Assembly.GetManifestResourceStream("Reactor.Assets.default.bundle").AsIl2Cpp());
|
||||
|
||||
var backupShader = bundle.LoadAsset<Shader>("UI-Default");
|
||||
|
||||
|
||||
Reference in new issue
Block a user