/// <inheritdoc/>
 public void Write(
     TinyBinaryWriter writer)
 {
     foreach (var item in _dataByteArrays)
     {
         writer.WriteBytes(item);
     }
 }
 /// <inheritdoc/>
 public void Write(
     TinyBinaryWriter writer)
 {
     foreach (var item in _dataByteArrays)
     {
         writer.WriteBytes(item);
     }
 }
 /// <inheritdoc/>
 public void Write(
     TinyBinaryWriter writer)
 {
     foreach (var method in _methods)
     {
         writer.WriteBytes(CreateByteCode(method, writer));
     }
 }
示例#4
0
        /// <inheritdoc/>
        protected override void WriteSingleItem(
            TinyBinaryWriter writer,
            TypeDefinition item)
        {
            _context.StringTable.GetOrCreateStringId(item.Namespace);

            WriteStringReference(writer, item.Name);
            WriteStringReference(writer, item.Namespace);

            writer.WriteUInt16(GetTypeReferenceOrDefinitionId(item.BaseType));
            writer.WriteUInt16(GetTypeReferenceOrDefinitionId(item.DeclaringType));

            var fieldsList = item.Fields
                             .Where(field => !field.HasConstant)
                             .OrderByDescending(field => field.IsStatic)
                             .ToList();

            foreach (var field in fieldsList)
            {
                _context.SignaturesTable.GetOrCreateSignatureId(field);
                _context.SignaturesTable.GetOrCreateSignatureId(field.InitialValue);
            }

            using (var stream = new MemoryStream(6))
            {
                WriteClassFields(fieldsList, writer.GetMemoryBasedClone(stream));

                if (item.DeclaringType == null)
                {
                    foreach (var method in item.Methods)
                    {
                        var offsets = CodeWriter
                                      .PreProcessMethod(method, _context.ByteCodeTable.FakeStringTable)
                                      .ToList();
                        _byteCodeOffsets.Add(method.MetadataToken.ToUInt32(), offsets);
                    }
                }
                foreach (var nestedType in item.NestedTypes)
                {
                    foreach (var method in nestedType.Methods)
                    {
                        var offsets = CodeWriter
                                      .PreProcessMethod(method, _context.ByteCodeTable.FakeStringTable)
                                      .ToList();
                        _byteCodeOffsets.Add(method.MetadataToken.ToUInt32(), offsets);
                    }
                }

                WriteMethodBodies(item.Methods, item.Interfaces, writer);

                _context.SignaturesTable.WriteDataType(item, writer, false, true);

                writer.WriteBytes(stream.ToArray());
            }

            writer.WriteUInt16(GetFlags(item)); // flags
        }
示例#5
0
 /// <inheritdoc/>
 public void Write(
     TinyBinaryWriter writer)
 {
     foreach (var signature in _idsBySignatures
              .OrderBy(item => item.Value)
              .Select(item => item.Key))
     {
         writer.WriteBytes(signature);
     }
 }
        /// <summary>
        /// Writes all .NET Micro Framework metadata into output stream.
        /// </summary>
        /// <param name="binaryWriter">Binary writer with correct endianness.</param>
        public void Write(
            TinyBinaryWriter binaryWriter)
        {
            var header = new TinyAssemblyDefinition(_tablesContext);
            header.Write(binaryWriter, true);

            foreach (var table in GetTables(_tablesContext))
            {
                var tableBegin = (binaryWriter.BaseStream.Position + 3) & 0xFFFFFFFC;
                table.Write(binaryWriter);

                var padding = (4 - ((binaryWriter.BaseStream.Position - tableBegin) % 4)) % 4;
                binaryWriter.WriteBytes(new Byte[padding]);

                header.UpdateTableOffset(binaryWriter, tableBegin, padding);
            }

            binaryWriter.BaseStream.Seek(0, SeekOrigin.Begin);
            header.Write(binaryWriter, false);
        }
示例#7
0
        /// <summary>
        /// Writes all .NET Micro Framework metadata into output stream.
        /// </summary>
        /// <param name="binaryWriter">Binary writer with correct endianness.</param>
        public void Write(
            TinyBinaryWriter binaryWriter)
        {
            var header = new TinyAssemblyDefinition(_tablesContext);

            header.Write(binaryWriter, true);

            foreach (var table in GetTables(_tablesContext))
            {
                var tableBegin = (binaryWriter.BaseStream.Position + 3) & 0xFFFFFFFC;
                table.Write(binaryWriter);

                var padding = (4 - ((binaryWriter.BaseStream.Position - tableBegin) % 4)) % 4;
                binaryWriter.WriteBytes(new Byte[padding]);

                header.UpdateTableOffset(binaryWriter, tableBegin, padding);
            }

            binaryWriter.BaseStream.Seek(0, SeekOrigin.Begin);
            header.Write(binaryWriter, false);
        }
 /// <inheritdoc/>
 public void Write(
     TinyBinaryWriter writer)
 {
     foreach (var method in _methods)
     {
         writer.WriteBytes(CreateByteCode(method, writer));
     }
 }