public void Resize(uint newSize, byte filler) { if (m_buffer == null) { ThrowAlreadyDisposed(); } if (newSize <= m_count) { m_count = newSize; } else { if (newSize > m_buffer.Length) { GrowBuffer(newSize); } // fill the extra space with zeroes uint pos = m_count; uint r = checked ((uint)m_buffer.Length - newSize); if (r > 0) { UnmanagedHelpers.FillUnsafe(this.Data + pos, r, 0); } m_count = newSize; } }
private byte *AllocateInternal(uint size, bool zeroed) { if (m_buffer == null) { ThrowAlreadyDisposed(); } Contract.Requires(size != 0, "size == 0"); Contract.Assert(m_buffer != null && m_count <= m_buffer.Length, "Builder is corrupted"); uint remaining = checked (((uint)m_buffer.Length) - m_count); if (remaining < size) { GrowBuffer(m_count + size); } uint pos = m_count; m_count = pos + size; byte *ptr = this.Data + pos; if (zeroed) { UnmanagedHelpers.FillUnsafe(ptr, size, 0); } return(ptr); }
public Page(int id, IntPtr handle, uint size) { Contract.Requires(handle != IntPtr.Zero && size > 0); m_id = id; m_handle = handle; m_size = size; m_begin = (byte *)handle; // fill with zeroes ! UnmanagedHelpers.FillUnsafe(m_begin, size, 0); GC.AddMemoryPressure(size); Contract.Ensures(m_handle != IntPtr.Zero && m_size > 0 && m_nextFree == 0); }