Recurity.Swf.AVM2.ABC.AbcFile.Write C# (CSharp) Method

Write() public method

Writes this object back to a stream.
public Write ( Stream destination ) : void
destination Stream The stream to write to.
return void
        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);
        }