1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing System; 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing System.Collections.Generic; 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing System.Linq; 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing System.Text; 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing System.Collections; 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.JavaExtensions 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class SubList 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : IList 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IList _source; 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int _startIndex; 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int _endIndex; 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public SubList( IList source, int startIndex, int endIndex ) 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( source == null ) 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentNullException( "source" ); 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( startIndex < 0 || endIndex < 0 ) 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( startIndex > endIndex || endIndex >= source.Count ) 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentException(); 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _source = source; 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _startIndex = startIndex; 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _endIndex = endIndex; 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IList Members 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Add( object value ) 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void Clear() 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool Contains( object value ) 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Cast<object>() 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Skip( _startIndex ) 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Take( _endIndex - _startIndex + 1 ) 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Contains( value ); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int IndexOf( object value ) 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < Count; i++ ) 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( object.Equals( this[i], value ) ) 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return i; 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return -1; 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void Insert( int index, object value ) 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsFixedSize 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return true; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsReadOnly 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return true; 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void Remove( object value ) 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void RemoveAt( int index ) 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public object this[int index] 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 || index >= Count ) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source[index + _startIndex]; 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 || index >= Count ) 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _source[index + _startIndex] = value; 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region ICollection Members 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void CopyTo( Array array, int index ) 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( array == null ) 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentNullException( "array" ); 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 ) 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index + Count > array.Length ) 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentException(); 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < Count; i++ ) 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver array.SetValue( this[i], index + i ); 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Count 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _endIndex - _startIndex + 1; 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsSynchronized 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return false; 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public object SyncRoot 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source.SyncRoot; 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IEnumerable Members 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public System.Collections.IEnumerator GetEnumerator() 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source.Cast<object>() 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Skip( _startIndex ) 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .Take( _endIndex - _startIndex + 1 ) 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver .GetEnumerator(); 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class SubList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IList<T> _source; 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int _startIndex; 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int _endIndex; 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public SubList( IList<T> source, int startIndex, int endIndex ) 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( source == null ) 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentNullException( "source" ); 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( startIndex < 0 || endIndex < 0 ) 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( startIndex > endIndex || endIndex >= source.Count ) 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentException(); 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _source = source; 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _startIndex = startIndex; 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _endIndex = endIndex; 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IEnumerable Members 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IEnumerator IEnumerable.GetEnumerator() 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return GetEnumerator(); 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region ICollection Members 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void ICollection.CopyTo( Array array, int index ) 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( array == null ) 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentNullException( "array" ); 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 ) 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index + Count > array.Length ) 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentException(); 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < Count; i++ ) 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver array.SetValue( this[i], index + i ); 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Count 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _endIndex - _startIndex + 1; 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsSynchronized 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ICollection sourceCollection = _source as ICollection; 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( sourceCollection != null ) 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return sourceCollection.IsSynchronized; 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return false; 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public object SyncRoot 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ICollection sourceCollection = _source as ICollection; 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( sourceCollection != null ) 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return sourceCollection.SyncRoot; 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source; 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IList Members 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int IList.Add( object value ) 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList.Clear() 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool Contains( object value ) 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source.Cast<object>().Skip( _startIndex ).Take( Count ).Contains( value ); 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int IndexOf( object value ) 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = _startIndex; i <= _endIndex; i++ ) 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( object.Equals( _source[i], value ) ) 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return i - _startIndex; 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return -1; 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList.Insert( int index, object value ) 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsFixedSize 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var sourceCollection = _source as IList; 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( sourceCollection != null ) 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return sourceCollection.IsFixedSize; 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return false; 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool IsReadOnly 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return true; 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList.Remove( object value ) 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList.RemoveAt( int index ) 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver object IList.this[int index] 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return this[index]; 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this[index] = (T)value; 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IEnumerable<T> Members 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public IEnumerator<T> GetEnumerator() 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source.Skip( _startIndex ).Take( Count ).GetEnumerator(); 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region ICollection<T> Members 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void ICollection<T>.Add( T item ) 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void ICollection<T>.Clear() 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public bool Contains( T item ) 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source.Skip( _startIndex ).Take( Count ).Contains( item ); 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void CopyTo( T[] array, int arrayIndex ) 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( array == null ) 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentNullException( "array" ); 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( arrayIndex < 0 ) 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( arrayIndex + Count > array.Length ) 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentException(); 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < Count; i++ ) 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver array[arrayIndex + i] = this[i]; 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool ICollection<T>.Remove( T item ) 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IList<T> Members 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int IndexOf( T item ) 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < Count; i++ ) 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( object.Equals( this[i], item ) ) 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return i; 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return -1; 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList<T>.Insert( int index, T item ) 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void IList<T>.RemoveAt( int index ) 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new NotSupportedException(); 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public T this[int index] 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 || index >= Count ) 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return _source[index + _startIndex]; 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( index < 0 || index >= Count ) 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new ArgumentOutOfRangeException(); 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _source[index + _startIndex] = value; 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 424