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