public void Write(Stream destination)
{
long startPos = destination.Position;
VariableLengthInteger.WriteU16(destination, _MinorVersion);
VariableLengthInteger.WriteU16(destination, _MajorVersion);
// (1) ConstantPool
String s1 = String.Format("0x{0:X08}: ConstantPool", destination.Position - startPos);
Log.Debug(this, s1);
_ConstantPool.Write(destination);
// (2) Method_Info
String s2 = String.Format("0x{0:X08}: Method_info", destination.Position - startPos);
Log.Debug(this, s2);
VariableLengthInteger.WriteU30(destination, (uint)_Method.Count);
for (int i = 0; i < _Method.Count; i++)
{
_Method[i].Write(destination);
}
// (3) Metadata
String s3 = String.Format("0x{0:X08}: Metadata", destination.Position - startPos);
Log.Debug(this, s3);
if (SwfFile.Configuration.AbcRemoveMetadata)
{
VariableLengthInteger.WriteU30(destination, 0);
}
else
{
VariableLengthInteger.WriteU30(destination, (uint)_Metadata.Count);
for (int i = 0; i < _Metadata.Count; i++)
{
_Metadata[i].Write(destination);
}
}
// (4) Instances
String s4 = String.Format("0x{0:X08}: Instance_info", destination.Position - startPos);
Log.Debug(this, s4);
VariableLengthInteger.WriteU30(destination, (uint)_Instance.Count);
for (int i = 0; i < _Instance.Count; i++)
{
_Instance[i].Write(destination);
}
// (5) Class_info
String s5 = String.Format("0x{0:X08}: Class_info", destination.Position - startPos);
Log.Debug(this, s5);
// ClassCount == InstanceCount
for (int i = 0; i < _Class.Count; i++)
{
_Class[i].Write(destination);
}
// (6) Script_info
String s6 = String.Format("0x{0:X08}: Script_info", destination.Position - startPos);
Log.Debug(this, s6);
VariableLengthInteger.WriteU30(destination, (uint)_Script.Count);
for (int i = 0; i < _Script.Count; i++)
{
_Script[i].Write(destination);
}
// (7) Method_body_info
String s7 = String.Format("0x{0:X08}: MethodBody_info", destination.Position - startPos);
Log.Debug(this, s7);
VariableLengthInteger.WriteU30(destination, (uint)_MethodBody.Count);
foreach (UInt32 k in _MethodBody.Keys)
{
_MethodBody[k].Write(destination);
}
String s8 = String.Format("0x{0:X08}: End", destination.Position - startPos);
Log.Debug(this, s8);
}