// internal static void WriteMedatataItems(System.IO.Stream stream, IEnumerable <Readers.IMetadataItem> metadata) { var items = metadata.ToArray(); DumpHelper.Write(items.Length, stream); // count for (int i = 0; i < items.Length; i++) { WriteMedatataItem(stream, items[i]); } }
static void WriteMetadataItemValue(System.IO.Stream stream, Readers.IMetadataItem item) { DumpHelper.Write(item.Value is int? 1 : 0, stream); if (item.Value is int) { DumpHelper.Write((int)item.Value, stream); } else { DumpHelper.Write((item.Value ?? string.Empty).ToString(), stream); } }
static void WriteMedatataItem(System.IO.Stream stream, Readers.IMetadataItem item) { DumpHelper.Write(item.HasChildren ? 1 : 0, stream); // hasChildren DumpHelper.Write(item.Name, stream); // name if (!item.HasChildren) { WriteMetadataItemValue(stream, item); } else { WriteMedatataItems(stream, item.Children); } }
// public static void Write(System.IO.Stream stream, Context.IOperandReaderContext context) { // type stream.Write(new byte[] { (byte)context.Type }, 0, 1); // name byte[] nameBytes = null; DumpHelper.GetBytes(ref nameBytes, context.Name); DumpHelper.Write(nameBytes.Length, stream); // IL byte[] ILBytes = context.GetIL(); DumpHelper.Write(ILBytes.Length, stream); // context data stream.Write(nameBytes, 0, nameBytes.Length); stream.Write(ILBytes, 0, ILBytes.Length); // meta DumpHelper.WriteMedatataItems(stream, context.GetMetadata()); // body context.Dump(stream); }