Merge pull request #1857 from slluis/fix-assembly-resolver
[mono.git] / mcs / class / System.Core / System.IO.MemoryMappedFiles / MemoryMappedViewAccessor.cs
index 288930202882696e6387803d56de3e56f4630c77..8bb8fc31b4bc02b206608b19910c91832463365c 100644 (file)
@@ -26,7 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_4_0 || MOBILE
 
 using System;
 using System.IO;
@@ -36,14 +35,19 @@ using Microsoft.Win32.SafeHandles;
 namespace System.IO.MemoryMappedFiles
 {
        public sealed class MemoryMappedViewAccessor : UnmanagedMemoryAccessor, IDisposable {
-               int file_handle;
-               IntPtr mmap_addr;
-               SafeMemoryMappedViewHandle handle;
+               IntPtr mmap_handle;
+               SafeMemoryMappedViewHandle safe_handle;
+               long pointerOffset;
 
-               internal MemoryMappedViewAccessor (int file_handle, long offset, long size, MemoryMappedFileAccess access)
+               internal MemoryMappedViewAccessor (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
                {
-                       this.file_handle = file_handle;
-                       Create (offset, size, access);
+                       pointerOffset = offset;
+                       Create (handle, offset, size, access);
+               }
+
+               public long PointerOffset
+               {
+                       get { return pointerOffset; }
                }
 
                static FileAccess ToFileAccess (MemoryMappedFileAccess access)
@@ -64,19 +68,19 @@ namespace System.IO.MemoryMappedFiles
                        }
                }
                
-               unsafe void Create (long offset, long size, MemoryMappedFileAccess access)
+               unsafe void Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
                {
-                       int offset_diff;
+                       IntPtr base_address;
 
-                       MemoryMapImpl.Map (file_handle, offset, ref size, access, out mmap_addr, out offset_diff);
+                       MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
+                       safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size);
 
-                       handle = new SafeMemoryMappedViewHandle ((IntPtr)((long)mmap_addr + offset_diff), size);
-                       Initialize (handle, 0, size, ToFileAccess (access));
+                       Initialize (safe_handle, 0, size, ToFileAccess (access));
                }
 
                public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle {
                        get {
-                               return handle;
+                               return safe_handle;
                        }
                }
 
@@ -91,9 +95,8 @@ namespace System.IO.MemoryMappedFiles
 
                public void Flush ()
                {
-                       MemoryMapImpl.Flush (file_handle);
+                       MemoryMapImpl.Flush (mmap_handle);
                }
        }
 }
 
-#endif