2010-04-06 Jb Evain <jbevain@novell.com>
[mcs.git] / class / Mono.Cecil / Mono.Cecil.Metadata / TableCollection.cs
blob817ccb02665743111b4bf68515b29e92612db684
1 //
2 // TableCollection.cs
3 //
4 // Author:
5 // Jb Evain (jbevain@gmail.com)
6 //
7 // (C) 2005 Jb Evain
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 namespace Mono.Cecil.Metadata {
31 using System;
32 using System.Collections;
34 public class TableCollection : ICollection, IMetadataTableVisitable {
36 IMetadataTable [] m_tables = new IMetadataTable [TablesHeap.MaxTableCount];
38 TablesHeap m_heap;
40 public IMetadataTable this [int index] {
41 get { return m_tables [index]; }
42 set { m_tables [index] = value; }
45 public int Count {
46 get {
47 return GetList ().Count;
51 public bool IsSynchronized {
52 get { return false; }
55 public object SyncRoot {
56 get { return this; }
59 public TablesHeap Heap {
60 get { return m_heap; }
63 internal TableCollection (TablesHeap heap)
65 m_heap = heap;
68 internal void Add (IMetadataTable value)
70 m_tables [value.Id] = value;
73 public bool Contains (IMetadataTable value)
75 return m_tables [value.Id] != null;
78 internal void Remove (IMetadataTable value)
80 m_tables [value.Id] = null;
83 public void CopyTo (Array array, int index)
85 GetList ().CopyTo (array, index);
88 internal IList GetList ()
90 IList tables = new ArrayList ();
91 for (int i = 0; i < m_tables.Length; i++) {
92 IMetadataTable table = m_tables [i];
93 if (table != null)
94 tables.Add (table);
97 return tables;
100 public IEnumerator GetEnumerator ()
102 return GetList ().GetEnumerator ();
105 public void Accept (IMetadataTableVisitor visitor)
107 visitor.VisitTableCollection (this);
109 foreach (IMetadataTable table in GetList ())
110 table.Accept (visitor);
112 visitor.TerminateTableCollection (this);