// internal for testing
        internal static byte[] SerializeCustomDebugMetadata(ArrayBuilder <BlobBuilder> recordWriters)
        {
            if (recordWriters.Count == 0)
            {
                return(null);
            }

            var result = new byte[
                sizeof(byte) +                  // version
                sizeof(byte) +                  // record count
                sizeof(ushort) +                // padding
                recordWriters.Sum(w => w.Count) // records
                         ];

            var cmw = new BlobWriter(result);

            cmw.WriteByte(CDI.CdiVersion);
            cmw.WriteByte((byte)recordWriters.Count); // count
            cmw.WriteInt16(0);
            foreach (BlobBuilder recordWriter in recordWriters)
            {
                cmw.WriteBytes(recordWriter);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static ImmutableArray <T> ToFlattenedImmutableArrayAndFree <T>(this ArrayBuilder <ArrayBuilder <T> > builders)
        {
            try
            {
                if (builders.Count == 0)
                {
                    return(ImmutableArray <T> .Empty);
                }

                if (builders.Count == 1)
                {
                    return(builders[0].ToImmutableAndFree());
                }

                var result = ArrayBuilder <T> .GetInstance(builders.Sum(b => b.Count));

                foreach (var builder in builders)
                {
                    result.AddRange(builder);
                    builder.Free();
                }

                return(result.ToImmutableAndFree());
            }
            finally
            {
                builders.Free();
            }
        }
        // internal for testing
        internal static byte[] SerializeCustomDebugMetadata(ArrayBuilder<BlobBuilder> recordWriters)
        {
            if (recordWriters.Count == 0)
            {
                return null;
            }

            var result = new byte[
                sizeof(byte) +                  // version
                sizeof(byte) +                  // record count
                sizeof(ushort) +                // padding
                recordWriters.Sum(w => w.Count) // records
            ];

            var cmw = new BlobWriter(result);
            cmw.WriteByte(CDI.CdiVersion);
            cmw.WriteByte((byte)recordWriters.Count); // count
            cmw.WriteInt16(0);
            foreach (BlobBuilder recordWriter in recordWriters)
            {
                cmw.WriteBytes(recordWriter);
            }

            return result;
        }