Ejemplo n.º 1
0
        /// <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];
        }
Ejemplo n.º 2
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);
        }