/// <inheritdoc /> public override bool ConcurrentWriter(ref Key key, ref SpanByte src, ref SpanByte dst) { if (locking) { dst.SpinLock(); } // We can write the source (src) data to the existing destination (dst) in-place, // only if there is sufficient space if (dst.Length < src.Length || dst.IsMarkedReadOnly()) { dst.MarkReadOnly(); if (locking) { dst.Unlock(); } return(false); } // Option 1: write the source data, leaving the destination size unchanged. You will need // to mange the actual space used by the value if you stop here. src.CopyTo(ref dst); // We can adjust the length header on the serialized log, if we wish. // This method will also zero out the extra space to retain log scan correctness. dst.ShrinkSerializedLength(src.Length); if (locking) { dst.Unlock(); } return(true); }
/// <inheritdoc /> public override bool ConcurrentWriter(ref Key key, ref SpanByte input, ref SpanByte src, ref SpanByte dst, ref Output output, ref UpsertInfo upsertInfo) { if (dst.Length < src.Length) { return(false); } // We can adjust the length header on the serialized log, if we wish. // This method will also zero out the extra space to retain log scan correctness. dst.UnmarkExtraMetadata(); dst.ShrinkSerializedLength(src.Length); // Write the source data, leaving the destination size unchanged. You will need // to mange the actual space used by the value if you stop here. src.CopyTo(ref dst); return(true); }