1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"]
3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2005-2007 Kunle Odutola
4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved.
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met:
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. Redistributions of source code MUST RETAIN the above copyright
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer.
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. Redistributions in binary form MUST REPRODUCE the above copyright
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer in
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   the documentation and/or other materials provided with the
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   distribution.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. The name of the author may not be used to endorse or promote products
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   derived from this software without specific prior WRITTEN permission.
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver4. Unless explicitly state otherwise, any contribution intentionally
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   submitted for inclusion in this work to the copyright owner or licensor
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   shall be under the terms and conditions of this license, without any
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   additional terms or conditions.
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Collections
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using System;
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using IDictionary				= System.Collections.IDictionary;
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using IDictionaryEnumerator		= System.Collections.IDictionaryEnumerator;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using ICollection				= System.Collections.ICollection;
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using IEnumerator				= System.Collections.IEnumerator;
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using Hashtable					= System.Collections.Hashtable;
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using ArrayList					= System.Collections.ArrayList;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using DictionaryEntry			= System.Collections.DictionaryEntry;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using StringBuilder				= System.Text.StringBuilder;
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	/// <summary>
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	/// An Hashtable-backed dictionary that enumerates Keys and Values in
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	/// insertion order.
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	/// </summary>
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	public sealed class HashList : IDictionary
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	{
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region Helper classes
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private sealed class HashListEnumerator : IDictionaryEnumerator
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal enum EnumerationMode
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				Key,
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				Value,
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				Entry
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private HashList _hashList;
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private ArrayList _orderList;
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private EnumerationMode _mode;
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private int _index;
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private int _version;
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private object _key;
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private object _value;
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region Constructors
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal HashListEnumerator()
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_index = 0;
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_key = null;
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_value = null;
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal HashListEnumerator(HashList hashList, EnumerationMode mode)
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_hashList = hashList;
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_mode = mode;
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_version = hashList._version;
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_orderList = hashList._insertionOrderList;
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_index = 0;
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_key = null;
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_value = null;
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region IDictionaryEnumerator Members
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public object Key
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (_key == null)
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						throw new InvalidOperationException("Enumeration has either not started or has already finished.");
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					return _key;
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public object Value
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (_key == null)
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						throw new InvalidOperationException("Enumeration has either not started or has already finished.");
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					return _value;
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public DictionaryEntry Entry
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (_key == null)
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						throw new InvalidOperationException("Enumeration has either not started or has already finished.");
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					return new DictionaryEntry(_key, _value);
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region IEnumerator Members
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public void Reset()
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (_version != _hashList._version)
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					throw new InvalidOperationException("Collection was modified; enumeration operation may not execute.");
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_index = 0;
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_key = null;
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_value = null;
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public object Current
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (_key == null)
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						throw new InvalidOperationException("Enumeration has either not started or has already finished.");
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (_mode == EnumerationMode.Key)
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						return _key;
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					else if (_mode == EnumerationMode.Value)
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						return _value;
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					return new DictionaryEntry(_key, _value);
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public bool MoveNext()
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (_version != _hashList._version)
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					throw new InvalidOperationException("Collection was modified; enumeration operation may not execute.");
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (_index < _orderList.Count)
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					_key = _orderList[_index];
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					_value = _hashList[_key];
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					_index++;
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					return true;
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_key = null;
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return false;
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private sealed class KeyCollection : ICollection
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private HashList _hashList;
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region Constructors
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal KeyCollection()
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal KeyCollection(HashList hashList)
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_hashList = hashList;
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public override string ToString()
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				StringBuilder result = new StringBuilder();
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				result.Append("[");
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				ArrayList keys = _hashList._insertionOrderList;
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				for (int i = 0; i < keys.Count; i++)
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if (i > 0)
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						result.Append(", ");
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					result.Append(keys[i]);
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				result.Append("]");
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return result.ToString();
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public override bool Equals(object o)
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (o is KeyCollection)
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					KeyCollection other = (KeyCollection) o;
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					if ((Count == 0) && (other.Count == 0))
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						return true;
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					else if (Count == other.Count)
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						for (int i = 0; i < Count; i++)
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						{
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver							if ((_hashList._insertionOrderList[i] == other._hashList._insertionOrderList[i]) ||
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver								(_hashList._insertionOrderList[i].Equals(other._hashList._insertionOrderList[i])))
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver								return true;
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						}
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return false;
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public override int GetHashCode()
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return _hashList._insertionOrderList.GetHashCode();
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region ICollection Members
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public bool IsSynchronized
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.IsSynchronized; }
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public int Count
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.Count; }
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public void CopyTo(Array array, int index)
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_hashList.CopyKeysTo(array, index);
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public object SyncRoot
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.SyncRoot; }
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region IEnumerable Members
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public IEnumerator GetEnumerator()
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Key);
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private sealed class ValueCollection : ICollection
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			private HashList _hashList;
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region Constructors
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal ValueCollection()
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			internal ValueCollection(HashList hashList)
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_hashList = hashList;
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public override string ToString()
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				StringBuilder result = new StringBuilder();
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				result.Append("[");
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				IEnumerator iter = new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Value);
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (iter.MoveNext())
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				{
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					result.Append((iter.Current == null) ? "null" : iter.Current);
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					while (iter.MoveNext())
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					{
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						result.Append(", ");
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver						result.Append((iter.Current == null) ? "null" : iter.Current);
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					}
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				}
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				result.Append("]");
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return result.ToString();
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region ICollection Members
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public bool IsSynchronized
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.IsSynchronized; }
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public int Count
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.Count; }
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public void CopyTo(Array array, int index)
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_hashList.CopyValuesTo(array, index);
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public object SyncRoot
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				get { return _hashList.SyncRoot; }
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#region IEnumerable Members
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			public IEnumerator GetEnumerator()
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				return new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Value);
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			#endregion
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private Hashtable _dictionary = new Hashtable();
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private ArrayList _insertionOrderList = new ArrayList();
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private int _version;
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region Constructors
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public HashList() : this(-1)
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public HashList(int capacity)
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			if (capacity < 0)
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_dictionary = new Hashtable();
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_insertionOrderList = new ArrayList();
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			else
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_dictionary = new Hashtable(capacity);
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_insertionOrderList = new ArrayList(capacity);
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_version = 0;
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region IDictionary Members
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public bool IsReadOnly		 { get {  return _dictionary.IsReadOnly; } }
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public IDictionaryEnumerator GetEnumerator()
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			return new HashListEnumerator(this, HashListEnumerator.EnumerationMode.Entry);
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public object this[object key]
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return _dictionary[key]; }
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			set
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				bool isNewEntry = !_dictionary.Contains(key);
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_dictionary[key] = value;
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				if (isNewEntry)
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver					_insertionOrderList.Add(key);
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				_version++;
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void Remove(object key)
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_dictionary.Remove(key);
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_insertionOrderList.Remove(key);
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_version++;
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public bool Contains(object key)
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			return _dictionary.Contains(key);
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void Clear()
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_dictionary.Clear();
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_insertionOrderList.Clear();
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_version++;
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public ICollection Values
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return new ValueCollection(this); }
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void Add(object key, object value)
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_dictionary.Add(key, value);
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_insertionOrderList.Add(key);
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			_version++;
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public ICollection Keys
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return new KeyCollection(this); }
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public bool IsFixedSize
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return _dictionary.IsFixedSize; }
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region ICollection Members
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public bool IsSynchronized
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return _dictionary.IsSynchronized; }
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public int Count
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return _dictionary.Count; }
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void CopyTo(Array array, int index)
457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			int len = _insertionOrderList.Count;
459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			for (int i = 0; i < len; i++)
460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				DictionaryEntry e = new DictionaryEntry(_insertionOrderList[i], _dictionary[_insertionOrderList[i]]);
462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				array.SetValue(e, index++);
463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public object SyncRoot
467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			get { return _dictionary.SyncRoot; }
469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region IEnumerable Members
474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		IEnumerator System.Collections.IEnumerable.GetEnumerator()
476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			return new HashListEnumerator(this, HashListEnumerator.EnumerationMode.Entry);
478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private void CopyKeysTo(Array array, int index)
483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			int len = _insertionOrderList.Count;
485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			for (int i = 0; i < len; i++)
486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				array.SetValue(_insertionOrderList[i], index++);
488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private void CopyValuesTo(Array array, int index)
492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			int len = _insertionOrderList.Count;
494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			for (int i = 0; i < len; i++)
495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				array.SetValue(_dictionary[_insertionOrderList[i]], index++);
497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	}
501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}