internal void WriteTildeStream(PEWriter output)
{
long startTilde = output.Seek(0,SeekOrigin.Current);
//Console.WriteLine("Starting tilde output at offset " + Hex.Long(startTilde));
output.Write((uint)0); // Reserved
output.Write(output.verInfo.tsMajVer); // MajorVersion
output.Write(output.verInfo.tsMinVer); // MinorVersion
output.Write(heapSizes);
output.Write((byte)1); // Reserved
output.Write(valid);
output.Write(sorted);
for (int i=0; i < NumMetaDataTables; i++) {
if (tables[i] != null) {
uint count = (uint)tables[i].Count;
output.Write(count);
}
}
long tabStart = output.Seek(0,SeekOrigin.Current);
//Console.WriteLine("Starting metaData tables at " + tabStart);
for (int i=0; i < NumMetaDataTables; i++) {
if (tables[i] != null) {
//Console.WriteLine("Starting metaData table " + i + " at " + (output.Seek(0,SeekOrigin.Current) - startTilde));
ArrayList table = tables[i];
for (int j=0; j < table.Count; j++) {
((MetaDataElement)table[j]).Write(output);
}
}
}
// reset the typespec flags
if (tables[(int)MDTable.TypeSpec] != null) {
ArrayList typeSpecTable = tables[(int)MDTable.TypeSpec];
for (int i=0; i < typeSpecTable.Count; i++) {
((TypeSpec)typeSpecTable[i]).typeSpecAdded = false;
}
}
//Console.WriteLine("Writing padding at " + output.Seek(0,SeekOrigin.Current));
for (int i=0; i < tildePadding; i++) output.Write((byte)0);
}