From b442bd5afbab36dd3fb7cb57008a34137f3c7ce0 Mon Sep 17 00:00:00 2001 From: morkt Date: Tue, 8 Dec 2015 20:56:10 +0400 Subject: [PATCH] (ArcView.ReadString): added commented out unsafe implementation. unsafe variant doesn't allocate temporary buffer for name, but requires .Net framework version 4.6 or later. --- GameRes/ArcView.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/GameRes/ArcView.cs b/GameRes/ArcView.cs index 10093ca5..c5da8cb8 100644 --- a/GameRes/ArcView.cs +++ b/GameRes/ArcView.cs @@ -429,6 +429,27 @@ namespace GameRes { size = Math.Min (size, Reserve (offset, size)); return m_view.ReadString (offset-m_offset, size, enc); + /* unsafe implementation requires .Net v4.6 + if (0 == size) + return string.Empty; + unsafe + { + byte* s = m_view.GetPointer (m_offset) + (offset - m_offset); + try + { + uint string_length = 0; + while (string_length < size && 0 != s[string_length]) + { + ++string_length; + } + return enc.GetString (s, (int)string_length); // .Net v4.6+ only + } + finally + { + m_view.SafeMemoryMappedViewHandle.ReleasePointer(); + } + } + */ } public string ReadString (long offset, uint size)