From 9494243eef088685216e30a8b2a8b3822fe88715 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 18 Apr 2020 10:26:08 -0500 Subject: [PATCH] add an IStatable extension method that can load a state directly from a byte array, reduces the stream creation boiler plate in a number of palces --- .../Api/Classes/MemorySaveStateApi.cs | 4 +--- BizHawk.Client.Common/rewind/Rewinder.cs | 3 +-- BizHawk.Client.EmuHawk/MainForm.Movie.cs | 2 +- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs | 4 +--- .../Interfaces/Services/IStatable.cs | 10 ++++++++++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/BizHawk.Client.Common/Api/Classes/MemorySaveStateApi.cs b/BizHawk.Client.Common/Api/Classes/MemorySaveStateApi.cs index 5890c96ed4..c636326b84 100644 --- a/BizHawk.Client.Common/Api/Classes/MemorySaveStateApi.cs +++ b/BizHawk.Client.Common/Api/Classes/MemorySaveStateApi.cs @@ -34,9 +34,7 @@ namespace BizHawk.Client.Common var guid = new Guid(identifier); try { - using var ms = new MemoryStream(_memorySavestates[guid]); - using var br = new BinaryReader(ms); - StatableCore.LoadStateBinary(br); + StatableCore.LoadStateBinary(_memorySavestates[guid]); } catch { diff --git a/BizHawk.Client.Common/rewind/Rewinder.cs b/BizHawk.Client.Common/rewind/Rewinder.cs index 5295f387a3..54257a04d0 100644 --- a/BizHawk.Client.Common/rewind/Rewinder.cs +++ b/BizHawk.Client.Common/rewind/Rewinder.cs @@ -371,8 +371,7 @@ namespace BizHawk.Client.Common } } - using var lastStateReader = new BinaryReader(new MemoryStream(_lastState)); - Global.Emulator.AsStatable().LoadStateBinary(lastStateReader); + Global.Emulator.AsStatable().LoadStateBinary(_lastState); } else { diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs index d4ea332e29..e5023b4e24 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs @@ -39,7 +39,7 @@ namespace BizHawk.Client.EmuHawk } else { - Emulator.AsStatable().LoadStateBinary(new BinaryReader(new MemoryStream(movie.BinarySavestate, false))); + Emulator.AsStatable().LoadStateBinary(movie.BinarySavestate); } if (movie.SavestateFramebuffer != null && Emulator.HasVideoProvider()) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 0a5ba17b9c..70d8abae28 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -1070,9 +1070,7 @@ namespace BizHawk.Client.EmuHawk public void LoadState(KeyValuePair state) { - using var ms = new MemoryStream(state.Value); - using var br = new BinaryReader(ms); - StatableEmulator.LoadStateBinary(br); + StatableEmulator.LoadStateBinary(state.Value); if (state.Key == 0 && CurrentTasMovie.StartsFromSavestate) { diff --git a/BizHawk.Emulation.Common/Interfaces/Services/IStatable.cs b/BizHawk.Emulation.Common/Interfaces/Services/IStatable.cs index 4d4cb863b6..bc9720e0fb 100644 --- a/BizHawk.Emulation.Common/Interfaces/Services/IStatable.cs +++ b/BizHawk.Emulation.Common/Interfaces/Services/IStatable.cs @@ -72,5 +72,15 @@ namespace BizHawk.Emulation.Common core.LoadStateBinary(br); } } + + /// + /// Loads a state directly from a byte array + /// + public static void LoadStateBinary(this IStatable core, byte[] state) + { + using var ms = new MemoryStream(state, false); + using var br = new BinaryReader(ms); + core.LoadStateBinary(br); + } } }