From 9f004452bab45f8e90409abf7ee6b62d9772de84 Mon Sep 17 00:00:00 2001 From: morkt Date: Mon, 30 May 2016 15:51:37 +0400 Subject: [PATCH] (ViewPointer): unsafe wrapper around memory mapped view pointer. --- GameRes/ArcView.cs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/GameRes/ArcView.cs b/GameRes/ArcView.cs index 603bcaec..29a50fa2 100644 --- a/GameRes/ArcView.cs +++ b/GameRes/ArcView.cs @@ -613,4 +613,43 @@ namespace GameRes } } } + + /// + /// Unsafe wrapper around unmanaged memory mapped view pointer. + /// + public unsafe class ViewPointer : IDisposable + { + MemoryMappedViewAccessor m_view; + byte* m_ptr; + + public ViewPointer (MemoryMappedViewAccessor view, long offset) + { + m_view = view; + m_ptr = m_view.GetPointer (offset); + } + + public byte* Value { get { return m_ptr; } } + + #region IDisposable Members + bool _disposed = false; + + public void Dispose () + { + Dispose (true); + GC.SuppressFinalize (this); + } + + protected virtual void Dispose (bool disposing) + { + if (!_disposed) + { + if (disposing) + { + m_view.SafeMemoryMappedViewHandle.ReleasePointer(); + } + _disposed = true; + } + } + #endregion + } }