public uint Reserve(long offset, uint size) { if (offset < m_offset || offset + size > m_offset + m_size) { if (offset > m_arc.MaxOffset) { throw new ArgumentOutOfRangeException("offset", "Too large offset specified for memory mapped file view."); } if (size < ArcView.PageSize) { size = (uint)ArcView.PageSize; } if (size > m_arc.MaxOffset - offset) { size = (uint)(m_arc.MaxOffset - offset); } var old_view = m_view; m_view = m_arc.CreateViewAccessor(offset, size); old_view.SafeMemoryMappedViewHandle.ReleasePointer(); old_view.Dispose(); m_offset = offset; m_size = size; unsafe { m_mem = m_view.GetPointer(m_offset); } } return((uint)(m_offset + m_size - offset)); }
public Frame(ArcView arc, long offset, uint size) { m_arc = arc; m_offset = Math.Min(offset, m_arc.MaxOffset); m_size = (uint)Math.Min(size, m_arc.MaxOffset - m_offset); m_view = m_arc.CreateViewAccessor(m_offset, m_size); unsafe { m_mem = m_view.GetPointer(m_offset); } }
public Frame(Frame other) { m_arc = other.m_arc; m_offset = 0; m_size = (uint)Math.Min(ArcView.PageSize, m_arc.MaxOffset); m_view = m_arc.CreateViewAccessor(m_offset, m_size); unsafe { m_mem = m_view.GetPointer(m_offset); } }
public Frame(ArcView arc) { m_arc = arc; m_offset = 0; m_size = (uint)Math.Min(ArcView.PageSize, m_arc.MaxOffset); m_view = m_arc.CreateViewAccessor(m_offset, m_size); unsafe { m_mem = m_view.GetPointer(m_offset); } //unsafe permet d'utiliser des pointeurs }
public bool AsciiEqual(long offset, string data) { if (Reserve(offset, (uint)data.Length) < (uint)data.Length) { return(false); } unsafe { byte *ptr = m_view.GetPointer(m_offset); try { for (int i = 0; i < data.Length; ++i) { if (ptr[offset - m_offset + i] != data[i]) { return(false); } } } finally { m_view.SafeMemoryMappedViewHandle.ReleasePointer(); } return(true); } }
public ViewPointer(MemoryMappedViewAccessor view, long offset) { m_view = view; m_ptr = m_view.GetPointer(offset); }