Exemplo n.º 1
0
 /// <summary>
 /// Writes debugging marker if needed
 /// </summary>
 protected static void WriteEntryMarker(PageableStore store, BuildXLWriter writer)
 {
     if (store.Debug)
     {
         writer.Write(EntryMarker);
     }
 }
Exemplo n.º 2
0
            public override int Write(PageableStore store, Action <BuildXLWriter> serializer, out bool gotSealed)
            {
                lock (this)
                {
                    m_stream.Seek(0, SeekOrigin.End);
                    int start = (int)m_stream.Position;
                    WriteEntryMarker(store, m_writer);

                    int depth = m_writer.Depth;
                    serializer(m_writer);
                    Contract.Assert(depth == m_writer.Depth);
                    m_writer.Flush();

                    // Make sure that whoever may pick up m_buffer concurrently will see the actual buffer contents
                    Volatile.Write(ref m_buffer, m_stream.GetBuffer());

                    m_length   = (int)m_stream.Length;
                    m_capacity = m_stream.Capacity;

                    if (m_stream.Length * 1D / m_capacity > 0.9)
                    {
                        Seal();
                        gotSealed = true;
                    }
                    else
                    {
                        // Otherwise, make it available for more writes.
                        gotSealed = false;
                    }

                    return(start);
                }
            }
Exemplo n.º 3
0
 /// <summary>
 /// Read away debugging marker if needed
 /// </summary>
 protected static void ReadEntryMarker(PageableStore store, BuildXLReader reader)
 {
     if (store.Debug)
     {
         uint marker = reader.ReadUInt32();
         Contract.Assume(marker == EntryMarker);
     }
 }
Exemplo n.º 4
0
 public MemoryPageStream(PageableStore store)
 {
     Contract.RequiresNotNull(store);
     Contract.Requires(store.CanWrite);
     Contract.Assume(
         store.m_initialBufferSize > 0,
         "Initial buffer size for store was 0. This implies an attempt to write to a non-writable store.");
     m_stream = new MemoryStream(store.m_initialBufferSize);
     m_writer = store.CreateWriter(m_stream, leaveOpen: true);
     m_buffer = m_stream.GetBuffer();
 }
Exemplo n.º 5
0
            public override T Read <T>(PageableStore store, int offset, Func <BuildXLReader, T> deserializer)
            {
                var buffer = GetBuffer();

                using (var stream = new MemoryStream(buffer, writable: false, index: offset, count: buffer.Length - offset))
                    using (var reader = store.CreateReader(stream, leaveOpen: true))
                    {
                        ReadEntryMarker(store, reader);
                        T value = deserializer(reader);
                        Contract.Assume(reader.Depth == 0);
                        return(value);
                    }
            }
Exemplo n.º 6
0
 /// <summary>
 /// Writes an item.
 /// </summary>
 public virtual int Write(PageableStore store, Action <BuildXLWriter> serializer, out bool gotSealed)
 {
     Contract.Requires(CanWrite);
     gotSealed = false;
     return(0);
 }
Exemplo n.º 7
0
 /// <summary>
 /// Reads an item.
 /// </summary>
 public abstract T Read <T>(PageableStore store, int offset, Func <BuildXLReader, T> deserializer);