예제 #1
0
        public void CopyTo(BinaryWriter bw)
        {
            var length = Length;
            var cc     = new CodeClock();

            cc.Start();
            _bb.CopyTo(bw);
            cc.Stop();
            Report(cc, "CopyTo(BinaryWriter)", length);
        }
        protected internal override ReadOnlySpan <byte> _GetReadableSpan(int index, int count)
        {
            if (0u >= (uint)count)
            {
                return(ReadOnlySpan <byte> .Empty);
            }

            switch (_componentCount)
            {
            case 0:
                return(ReadOnlySpan <byte> .Empty);

            case 1:
                //ComponentEntry c = _components[0];
                //return c.Buffer.GetReadableSpan(index, count);
                ComponentEntry c   = _components[0];
                IByteBuffer    buf = c.Buffer;
                if (buf.IsSingleIoBuffer)
                {
                    return(buf.GetReadableSpan(c.Idx(index), count));
                }
                break;
            }

            var merged  = new Memory <byte>(new byte[count]);
            var buffers = GetSequence(index, count);

            int offset = 0;

            foreach (var buf in buffers)
            {
                Debug.Assert(merged.Length - offset >= buf.Length);

                buf.CopyTo(merged.Slice(offset));
                offset += buf.Length;
            }

            return(merged.Span);
        }