コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
            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);
            }