Esempio n. 1
0
 public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
 {
     for (int i = 0; i < m_root.Header.Streams; i++)
     {
         coll.Add(new MetadataStream());
     }
 }
        public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
        {
            MetadataStream tables = new MetadataStream();

            tables.Header.Name = MetadataStream.Tables;
            tables.Heap        = MetadataHeap.HeapFactory(tables);
            TablesHeap th = tables.Heap as TablesHeap;

            th.Tables = new TableCollection(th);
            m_root.Streams.Add(tables);
        }
Esempio n. 3
0
        public override void VisitMetadataStreamCollection(MetadataStreamCollection streams)
        {
            foreach (MetadataStream stream in streams)
            {
                MetadataStream.MetadataStreamHeader header = stream.Header;

                header.Offset = (uint)(m_binaryWriter.BaseStream.Position);
                m_binaryWriter.Write(header.Offset);
                MemoryBinaryWriter container;
                string             name = header.Name;
                uint size = 0;
                switch (header.Name)
                {
                case MetadataStream.Tables:
                    container = m_tWriter;
                    size     += 24;                 // header
                    break;

                case MetadataStream.Strings:
                    name     += "\0\0\0\0";
                    container = m_stringWriter;
                    break;

                case MetadataStream.GUID:
                    container = m_guidWriter;
                    break;

                case MetadataStream.Blob:
                    container = m_blobWriter;
                    break;

                case MetadataStream.UserStrings:
                    container = m_usWriter;
                    break;

                default:
                    throw new MetadataFormatException("Unknown stream kind");
                }

                size += (uint)(container.BaseStream.Length + 3 & (~3));
                m_binaryWriter.Write(size);
                m_binaryWriter.Write(Encoding.ASCII.GetBytes(name));
                m_binaryWriter.QuadAlign();
            }
        }