コード例 #1
0
        public static void WriteLittleEndian <[Primitive] T>(this WritableBuffer buffer, T value) where T : struct
        {
            int len = Unsafe.SizeOf <T>();

            buffer.Ensure(len);
            buffer.Memory.Span.WriteLittleEndian(value);
            buffer.Advance(len);
        }
コード例 #2
0
        /// <summary>
        /// Writes the source <see cref="Span{Byte}"/> to the <see cref="WritableBuffer"/>.
        /// </summary>
        /// <param name="buffer">The <see cref="WritableBuffer"/></param>
        /// <param name="source">The <see cref="Span{Byte}"/> to write</param>
        public static void Write(this WritableBuffer buffer, Span <byte> source)
        {
            if (buffer.Memory.IsEmpty)
            {
                buffer.Ensure();
            }

            // Fast path, try copying to the available memory directly
            if (source.Length <= buffer.Memory.Length)
            {
                source.CopyTo(buffer.Memory);
                buffer.Advance(source.Length);
                return;
            }

            var remaining = source.Length;
            var offset    = 0;

            while (remaining > 0)
            {
                var writable = Math.Min(remaining, buffer.Memory.Length);

                buffer.Ensure(writable);

                if (writable == 0)
                {
                    continue;
                }

                source.Slice(offset, writable).CopyTo(buffer.Memory);

                remaining -= writable;
                offset    += writable;

                buffer.Advance(writable);
            }
        }