/// <summary> /// </summary> /// <param name="streams"> /// </param> /// <param name="directoryRoot"> /// </param> /// <param name="directorySize"> /// </param> /// <param name="bits"> /// </param> private void WriteDirectory(DataStream[] streams, out int directoryRoot, out int directorySize, BitAccess bits) { var directory = new DataStream(); var pages = 0; for (var s = 0; s < streams.Length; s++) { if (streams[s].Length > 0) { pages += streams[s].Pages; } } var use = 4 * (1 + streams.Length + pages); bits.MinCapacity(use); bits.WriteInt32(streams.Length); for (var s = 0; s < streams.Length; s++) { bits.WriteInt32(streams[s].Length); } for (var s = 0; s < streams.Length; s++) { if (streams[s].Length > 0) { bits.WriteInt32(streams[s].pages); } } directory.Write(this, bits.Buffer, use); directorySize = directory.Length; use = 4 * directory.Pages; bits.MinCapacity(use); bits.WriteInt32(directory.pages); var ddir = new DataStream(); ddir.Write(this, bits.Buffer, use); directoryRoot = ddir.pages[0]; }
/// <summary> /// </summary> /// <param name="streams"> /// </param> /// <param name="bits"> /// </param> internal void WriteMeta(DataStream[] streams, BitAccess bits) { var head = new PdbFileHeader(this.pageSize); this.WriteDirectory(streams, out head.directoryRoot, out head.directorySize, bits); this.WriteFreeMap(); head.freePageMap = 2; head.pagesUsed = this.usedBytes / this.pageSize; this.writer.Seek(0, SeekOrigin.Begin); head.Write(this.writer, bits); }