#region Using Statements
using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.Collections.Generic;

#endregion // Using Statements

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ANX.Framework.GamerServices
{
	public class GamerCollection<T> : ReadOnlyCollection<T>,
		IEnumerable<Gamer>, IEnumerable where T : Gamer
	{
		#region GamerCollectionEnumerator
		public struct GamerCollectionEnumerator
			: IEnumerator<T>, IDisposable, IEnumerator
		{
			private List<T>.Enumerator enumerator;

			public T Current
			{
				get
				{
					return enumerator.Current;
				}
			}

			object IEnumerator.Current
			{
				get
				{
					return enumerator.Current;
				}
			}

			internal GamerCollectionEnumerator(List<T>.Enumerator setEnumerator)
			{
				enumerator = setEnumerator;
			}

			public void Dispose()
			{
				enumerator.Dispose();
			}

			public bool MoveNext()
			{
				return enumerator.MoveNext();
			}

			void IEnumerator.Reset()
			{
				((IEnumerator)enumerator).Reset();
			}
		}
		#endregion

		public GamerCollection()
			: base(new List<T>())
		{
		}

		#region GetEnumerator
		public new GamerCollection<T>.GamerCollectionEnumerator GetEnumerator()
		{
			throw new NotImplementedException();
		}

		IEnumerator<Gamer> IEnumerable<Gamer>.GetEnumerator()
		{
			throw new NotImplementedException();
		}
		#endregion
	}
}