Click here to Skip to main content
Click here to Skip to main content
Articles » Languages » C# » Applications » Downloads
 
Add your own
alternative version

Building .NET Coverage Tool

, 25 Aug 2009
This article is a walkthrough for building a .NET coverage tool
Coverage.NET_demo.zip
TestApp
TestApp.exe
TestApp.pdb
Tool
Coverage.Counter.dll
Coverage.exe
Mono.Cecil.dll
Mono.Tools.Pdb2Mdb.dll
Coverage.NET_src.zip
Coverage
Common
Instrument
Properties
Report
Coverage.Counter
Properties
Mono.Cecil
src
AUTHORS
ChangeLog
CodeGen
cecil-gen-attributes.rb
cecil-gen-sources.rb
cecil-gen-tests.rb
cecil-gen-types.rb
cecil-gen.rb
cecil-mig.rb
cecil-update-rev
templates
configure
default.build
Makefile
mono-cecil.pc.in
Mono.Cecil
Mono.Cecil.Binary
Mono.Cecil.Cil
Mono.Cecil.dll.sources
Mono.Cecil.Metadata
Mono.Cecil.Signatures
Mono.Xml
ChangeLog
NEWS
README
standalone.make
TODO
Mono.Tools.Pdb2Mdb
Properties
src
ChangeLog
LICENSE
Makefile
pdb2mdb.exe.sources
//
// MetadataTableWriter.cs
//
// Author:
//   Jb Evain (jbevain@gmail.com)
//
// Generated by /CodeGen/cecil-gen.rb do not edit
// Thu Feb 22 14:39:38 CET 2007
//
// (C) 2005 Jb Evain
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

namespace Mono.Cecil.Metadata {

	using System;
	using System.Collections;

	using Mono.Cecil.Binary;

	internal sealed class MetadataTableWriter : BaseMetadataTableVisitor {

		MetadataRoot m_root;
		TablesHeap m_heap;
		MetadataRowWriter m_mrrw;
		MemoryBinaryWriter m_binaryWriter;

		public MetadataTableWriter (MetadataWriter mrv, MemoryBinaryWriter writer)
		{
			m_root = mrv.GetMetadataRoot ();
			m_heap = m_root.Streams.TablesHeap;
			m_binaryWriter = writer;
			m_mrrw = new MetadataRowWriter (this);
		}

		public MetadataRoot GetMetadataRoot ()
		{
			return m_root;
		}

		public override IMetadataRowVisitor GetRowVisitor ()
		{
			return m_mrrw;
		}

		public MemoryBinaryWriter GetWriter ()
		{
			return m_binaryWriter;
		}

		void InitializeTable (IMetadataTable table)
		{
			table.Rows = new RowCollection ();
			m_heap.Valid |= 1L << table.Id;
			m_heap.Tables.Add (table);
		}

		void WriteCount (int rid)
		{
			if (m_heap.HasTable (rid))
				m_binaryWriter.Write (m_heap [rid].Rows.Count);
		}

		public AssemblyTable GetAssemblyTable ()
		{
			AssemblyTable table = m_heap [AssemblyTable.RId] as AssemblyTable;
			if (table != null)
				return table;

			table = new AssemblyTable ();
			InitializeTable (table);
			return table;
		}

		public AssemblyOSTable GetAssemblyOSTable ()
		{
			AssemblyOSTable table = m_heap [AssemblyOSTable.RId] as AssemblyOSTable;
			if (table != null)
				return table;

			table = new AssemblyOSTable ();
			InitializeTable (table);
			return table;
		}

		public AssemblyProcessorTable GetAssemblyProcessorTable ()
		{
			AssemblyProcessorTable table = m_heap [AssemblyProcessorTable.RId] as AssemblyProcessorTable;
			if (table != null)
				return table;

			table = new AssemblyProcessorTable ();
			InitializeTable (table);
			return table;
		}

		public AssemblyRefTable GetAssemblyRefTable ()
		{
			AssemblyRefTable table = m_heap [AssemblyRefTable.RId] as AssemblyRefTable;
			if (table != null)
				return table;

			table = new AssemblyRefTable ();
			InitializeTable (table);
			return table;
		}

		public AssemblyRefOSTable GetAssemblyRefOSTable ()
		{
			AssemblyRefOSTable table = m_heap [AssemblyRefOSTable.RId] as AssemblyRefOSTable;
			if (table != null)
				return table;

			table = new AssemblyRefOSTable ();
			InitializeTable (table);
			return table;
		}

		public AssemblyRefProcessorTable GetAssemblyRefProcessorTable ()
		{
			AssemblyRefProcessorTable table = m_heap [AssemblyRefProcessorTable.RId] as AssemblyRefProcessorTable;
			if (table != null)
				return table;

			table = new AssemblyRefProcessorTable ();
			InitializeTable (table);
			return table;
		}

		public ClassLayoutTable GetClassLayoutTable ()
		{
			ClassLayoutTable table = m_heap [ClassLayoutTable.RId] as ClassLayoutTable;
			if (table != null)
				return table;

			table = new ClassLayoutTable ();
			InitializeTable (table);
			return table;
		}

		public ConstantTable GetConstantTable ()
		{
			ConstantTable table = m_heap [ConstantTable.RId] as ConstantTable;
			if (table != null)
				return table;

			table = new ConstantTable ();
			InitializeTable (table);
			return table;
		}

		public CustomAttributeTable GetCustomAttributeTable ()
		{
			CustomAttributeTable table = m_heap [CustomAttributeTable.RId] as CustomAttributeTable;
			if (table != null)
				return table;

			table = new CustomAttributeTable ();
			InitializeTable (table);
			return table;
		}

		public DeclSecurityTable GetDeclSecurityTable ()
		{
			DeclSecurityTable table = m_heap [DeclSecurityTable.RId] as DeclSecurityTable;
			if (table != null)
				return table;

			table = new DeclSecurityTable ();
			InitializeTable (table);
			return table;
		}

		public EventTable GetEventTable ()
		{
			EventTable table = m_heap [EventTable.RId] as EventTable;
			if (table != null)
				return table;

			table = new EventTable ();
			InitializeTable (table);
			return table;
		}

		public EventMapTable GetEventMapTable ()
		{
			EventMapTable table = m_heap [EventMapTable.RId] as EventMapTable;
			if (table != null)
				return table;

			table = new EventMapTable ();
			InitializeTable (table);
			return table;
		}

		public EventPtrTable GetEventPtrTable ()
		{
			EventPtrTable table = m_heap [EventPtrTable.RId] as EventPtrTable;
			if (table != null)
				return table;

			table = new EventPtrTable ();
			InitializeTable (table);
			return table;
		}

		public ExportedTypeTable GetExportedTypeTable ()
		{
			ExportedTypeTable table = m_heap [ExportedTypeTable.RId] as ExportedTypeTable;
			if (table != null)
				return table;

			table = new ExportedTypeTable ();
			InitializeTable (table);
			return table;
		}

		public FieldTable GetFieldTable ()
		{
			FieldTable table = m_heap [FieldTable.RId] as FieldTable;
			if (table != null)
				return table;

			table = new FieldTable ();
			InitializeTable (table);
			return table;
		}

		public FieldLayoutTable GetFieldLayoutTable ()
		{
			FieldLayoutTable table = m_heap [FieldLayoutTable.RId] as FieldLayoutTable;
			if (table != null)
				return table;

			table = new FieldLayoutTable ();
			InitializeTable (table);
			return table;
		}

		public FieldMarshalTable GetFieldMarshalTable ()
		{
			FieldMarshalTable table = m_heap [FieldMarshalTable.RId] as FieldMarshalTable;
			if (table != null)
				return table;

			table = new FieldMarshalTable ();
			InitializeTable (table);
			return table;
		}

		public FieldPtrTable GetFieldPtrTable ()
		{
			FieldPtrTable table = m_heap [FieldPtrTable.RId] as FieldPtrTable;
			if (table != null)
				return table;

			table = new FieldPtrTable ();
			InitializeTable (table);
			return table;
		}

		public FieldRVATable GetFieldRVATable ()
		{
			FieldRVATable table = m_heap [FieldRVATable.RId] as FieldRVATable;
			if (table != null)
				return table;

			table = new FieldRVATable ();
			InitializeTable (table);
			return table;
		}

		public FileTable GetFileTable ()
		{
			FileTable table = m_heap [FileTable.RId] as FileTable;
			if (table != null)
				return table;

			table = new FileTable ();
			InitializeTable (table);
			return table;
		}

		public GenericParamTable GetGenericParamTable ()
		{
			GenericParamTable table = m_heap [GenericParamTable.RId] as GenericParamTable;
			if (table != null)
				return table;

			table = new GenericParamTable ();
			InitializeTable (table);
			return table;
		}

		public GenericParamConstraintTable GetGenericParamConstraintTable ()
		{
			GenericParamConstraintTable table = m_heap [GenericParamConstraintTable.RId] as GenericParamConstraintTable;
			if (table != null)
				return table;

			table = new GenericParamConstraintTable ();
			InitializeTable (table);
			return table;
		}

		public ImplMapTable GetImplMapTable ()
		{
			ImplMapTable table = m_heap [ImplMapTable.RId] as ImplMapTable;
			if (table != null)
				return table;

			table = new ImplMapTable ();
			InitializeTable (table);
			return table;
		}

		public InterfaceImplTable GetInterfaceImplTable ()
		{
			InterfaceImplTable table = m_heap [InterfaceImplTable.RId] as InterfaceImplTable;
			if (table != null)
				return table;

			table = new InterfaceImplTable ();
			InitializeTable (table);
			return table;
		}

		public ManifestResourceTable GetManifestResourceTable ()
		{
			ManifestResourceTable table = m_heap [ManifestResourceTable.RId] as ManifestResourceTable;
			if (table != null)
				return table;

			table = new ManifestResourceTable ();
			InitializeTable (table);
			return table;
		}

		public MemberRefTable GetMemberRefTable ()
		{
			MemberRefTable table = m_heap [MemberRefTable.RId] as MemberRefTable;
			if (table != null)
				return table;

			table = new MemberRefTable ();
			InitializeTable (table);
			return table;
		}

		public MethodTable GetMethodTable ()
		{
			MethodTable table = m_heap [MethodTable.RId] as MethodTable;
			if (table != null)
				return table;

			table = new MethodTable ();
			InitializeTable (table);
			return table;
		}

		public MethodImplTable GetMethodImplTable ()
		{
			MethodImplTable table = m_heap [MethodImplTable.RId] as MethodImplTable;
			if (table != null)
				return table;

			table = new MethodImplTable ();
			InitializeTable (table);
			return table;
		}

		public MethodPtrTable GetMethodPtrTable ()
		{
			MethodPtrTable table = m_heap [MethodPtrTable.RId] as MethodPtrTable;
			if (table != null)
				return table;

			table = new MethodPtrTable ();
			InitializeTable (table);
			return table;
		}

		public MethodSemanticsTable GetMethodSemanticsTable ()
		{
			MethodSemanticsTable table = m_heap [MethodSemanticsTable.RId] as MethodSemanticsTable;
			if (table != null)
				return table;

			table = new MethodSemanticsTable ();
			InitializeTable (table);
			return table;
		}

		public MethodSpecTable GetMethodSpecTable ()
		{
			MethodSpecTable table = m_heap [MethodSpecTable.RId] as MethodSpecTable;
			if (table != null)
				return table;

			table = new MethodSpecTable ();
			InitializeTable (table);
			return table;
		}

		public ModuleTable GetModuleTable ()
		{
			ModuleTable table = m_heap [ModuleTable.RId] as ModuleTable;
			if (table != null)
				return table;

			table = new ModuleTable ();
			InitializeTable (table);
			return table;
		}

		public ModuleRefTable GetModuleRefTable ()
		{
			ModuleRefTable table = m_heap [ModuleRefTable.RId] as ModuleRefTable;
			if (table != null)
				return table;

			table = new ModuleRefTable ();
			InitializeTable (table);
			return table;
		}

		public NestedClassTable GetNestedClassTable ()
		{
			NestedClassTable table = m_heap [NestedClassTable.RId] as NestedClassTable;
			if (table != null)
				return table;

			table = new NestedClassTable ();
			InitializeTable (table);
			return table;
		}

		public ParamTable GetParamTable ()
		{
			ParamTable table = m_heap [ParamTable.RId] as ParamTable;
			if (table != null)
				return table;

			table = new ParamTable ();
			InitializeTable (table);
			return table;
		}

		public ParamPtrTable GetParamPtrTable ()
		{
			ParamPtrTable table = m_heap [ParamPtrTable.RId] as ParamPtrTable;
			if (table != null)
				return table;

			table = new ParamPtrTable ();
			InitializeTable (table);
			return table;
		}

		public PropertyTable GetPropertyTable ()
		{
			PropertyTable table = m_heap [PropertyTable.RId] as PropertyTable;
			if (table != null)
				return table;

			table = new PropertyTable ();
			InitializeTable (table);
			return table;
		}

		public PropertyMapTable GetPropertyMapTable ()
		{
			PropertyMapTable table = m_heap [PropertyMapTable.RId] as PropertyMapTable;
			if (table != null)
				return table;

			table = new PropertyMapTable ();
			InitializeTable (table);
			return table;
		}

		public PropertyPtrTable GetPropertyPtrTable ()
		{
			PropertyPtrTable table = m_heap [PropertyPtrTable.RId] as PropertyPtrTable;
			if (table != null)
				return table;

			table = new PropertyPtrTable ();
			InitializeTable (table);
			return table;
		}

		public StandAloneSigTable GetStandAloneSigTable ()
		{
			StandAloneSigTable table = m_heap [StandAloneSigTable.RId] as StandAloneSigTable;
			if (table != null)
				return table;

			table = new StandAloneSigTable ();
			InitializeTable (table);
			return table;
		}

		public TypeDefTable GetTypeDefTable ()
		{
			TypeDefTable table = m_heap [TypeDefTable.RId] as TypeDefTable;
			if (table != null)
				return table;

			table = new TypeDefTable ();
			InitializeTable (table);
			return table;
		}

		public TypeRefTable GetTypeRefTable ()
		{
			TypeRefTable table = m_heap [TypeRefTable.RId] as TypeRefTable;
			if (table != null)
				return table;

			table = new TypeRefTable ();
			InitializeTable (table);
			return table;
		}

		public TypeSpecTable GetTypeSpecTable ()
		{
			TypeSpecTable table = m_heap [TypeSpecTable.RId] as TypeSpecTable;
			if (table != null)
				return table;

			table = new TypeSpecTable ();
			InitializeTable (table);
			return table;
		}

		public override void VisitTableCollection (TableCollection coll)
		{
			WriteCount (ModuleTable.RId);
			WriteCount (TypeRefTable.RId);
			WriteCount (TypeDefTable.RId);
			WriteCount (FieldPtrTable.RId);
			WriteCount (FieldTable.RId);
			WriteCount (MethodPtrTable.RId);
			WriteCount (MethodTable.RId);
			WriteCount (ParamPtrTable.RId);
			WriteCount (ParamTable.RId);
			WriteCount (InterfaceImplTable.RId);
			WriteCount (MemberRefTable.RId);
			WriteCount (ConstantTable.RId);
			WriteCount (CustomAttributeTable.RId);
			WriteCount (FieldMarshalTable.RId);
			WriteCount (DeclSecurityTable.RId);
			WriteCount (ClassLayoutTable.RId);
			WriteCount (FieldLayoutTable.RId);
			WriteCount (StandAloneSigTable.RId);
			WriteCount (EventMapTable.RId);
			WriteCount (EventPtrTable.RId);
			WriteCount (EventTable.RId);
			WriteCount (PropertyMapTable.RId);
			WriteCount (PropertyPtrTable.RId);
			WriteCount (PropertyTable.RId);
			WriteCount (MethodSemanticsTable.RId);
			WriteCount (MethodImplTable.RId);
			WriteCount (ModuleRefTable.RId);
			WriteCount (TypeSpecTable.RId);
			WriteCount (ImplMapTable.RId);
			WriteCount (FieldRVATable.RId);
			WriteCount (AssemblyTable.RId);
			WriteCount (AssemblyProcessorTable.RId);
			WriteCount (AssemblyOSTable.RId);
			WriteCount (AssemblyRefTable.RId);
			WriteCount (AssemblyRefProcessorTable.RId);
			WriteCount (AssemblyRefOSTable.RId);
			WriteCount (FileTable.RId);
			WriteCount (ExportedTypeTable.RId);
			WriteCount (ManifestResourceTable.RId);
			WriteCount (NestedClassTable.RId);
			WriteCount (GenericParamTable.RId);
			WriteCount (MethodSpecTable.RId);
			WriteCount (GenericParamConstraintTable.RId);
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License

About the Author

Sergiy Sakharov
Software Developer (Senior)
United Kingdom United Kingdom
No Biography provided

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 25 Aug 2009
Article Copyright 2009 by Sergiy Sakharov
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid