// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_4_0
using System;
using System.IO;
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)
}
}
- 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;
}
}
public void Flush ()
{
- MemoryMapImpl.Flush (file_handle);
+ MemoryMapImpl.Flush (mmap_handle);
}
}
}
-#endif