
Namespace System
Namespace Collections
Namespace ObjectModel


Class Collection<T>
	Implements Generic.IList<T>
	list As Generic.IList<T>

Public
	'Collection クラスの新しいインスタンスを初期化します。 
	Sub Collection ()
		This.list = New Generic.List<T>
	End Sub
	Sub Collection ( list As Generic.IList<T> )
		This.list = list
	End Sub

Public
	'Collection に実際に格納されている要素の数を取得します。
	Override Function Count () As Long
		Return This.list.Count()
	End Function

	'Item 指定したインデックスにある要素を取得または設定します。 
	Sub Operator[] ( index As Long, item As T )
		This.SetItem(index,item)
	End Sub
	Function Operator[] ( index As Long ) As T
		Return This.list.Item(index)
	End Function

Protected
	'Collection をラップする IList ラッパーを取得します。 
	Function Items () As Generic.IList<T>
		Return This
	End Function

Public
	'Collection の末尾にオブジェクトを追加します。 
	Override Sub Add ( item As T )
		This.list.Add(item)
	End Sub

	'Collection からすべての要素を削除します。 
	Override Sub Clear ()
		This.ClearItems()
	End Sub

	'ある要素が Collection 内に存在するかどうかを判断します。 
/*	Function Contains ( item As T ) As Boolean
	End Function*/

	'Collection 全体を互換性のある 1 次元の Array にコピーします。コピー操作は、コピー先の配列の指定したインデックスから始まります。 
	/*CopyTo*/

	'Collection を反復処理する列挙子を返します。 
	Override Function GetEnumerator () As Generic.IEnumerator<T>
		Return This.Items().GetEnumerator()
	End Function

	'指定したオブジェクトを検索し、Collection 全体内で最初に見つかった位置の 0 から始まるインデックスを返します。 
	Override Function IndexOf ( item As T ) As Long
		Return This.list.IndexOf(item)
	End Function

	'Collection 内の指定したインデックスの位置に要素を挿入します。 
	Override Sub Insert ( index As Long, item As T )
		This.InsertItem(index,item)
	End Sub

	'IList が読み取り専用かどうかを示す値を取得します。
	Override Function IsReadOnly () As Boolean
		Return False
	End Function

	'Collection 内で最初に見つかった特定のオブジェクトを削除します。 
	Override Function Remove ( item As T ) As Boolean
		Return This.RemoveItem(This.IndexOf(item))
	End Function

	'Collection の指定したインデックスにある要素を削除します。 
	Override Sub RemoveAt ( index As Long )
		This.RemoveItem(index)
	End Sub

	'現在の Object を表す String を返します。 (Object から継承されます。) 
	Override Function ToString () As String
		Dim string = New Text.StringBuilder
		Dim i As Long
		For i = 0 To ELM(This.list.Count())
			string.Append(This.list.Item[i]).Append(Ex"\r\n")
		Next
		Return string.ToString
	End Function

Protected
	'Collection からすべての要素を削除します。 
	Virtual Sub ClearItems ( )
		This.list.Clear()
	End Sub

	'Collection 内の指定したインデックスの位置に要素を挿入します。 
	Virtual Sub InsertItem ( index As Long, item As T )
		This.list.Insert(index,item)
	End Sub

	'Collection の指定したインデックスにある要素を削除します。 
	Virtual Function RemoveItem ( index As Long ) As Boolean
		This.list.RemoveAt(index)
	End Function
	

	'指定したインデックス位置にある要素を置き換えます。 
	Virtual Sub SetItem ( index As Long, item As T )
		This.list.Item(index,item)
	End Sub


Public
	/*
System.Collections.ICollection.CopyTo ICollection の要素を Array にコピーします。Array の特定のインデックスからコピーが開始されます。 
System.Collections.IEnumerable.GetEnumerator コレクションを反復処理する列挙子を返します。 
System.Collections.IList.Add IList に項目を追加します。 
System.Collections.IList.Contains IList に特定の値が格納されているかどうかを判断します。 
System.Collections.IList.IndexOf IList 内での指定した項目のインデックスを調べます。 
System.Collections.IList.Insert IList 内の指定したインデックスの位置に項目を挿入します。 
System.Collections.IList.Remove IList 内で最初に見つかった特定のオブジェクトを削除します。 
System.Collections.Generic.ICollection<T>.IsReadOnly ICollection が読み取り専用かどうかを示す値を取得します。 
System.Collections.ICollection.IsSynchronized ICollection へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。 
System.Collections.ICollection.SyncRoot ICollection へのアクセスを同期するために使用できるオブジェクトを取得します。 
System.Collections.IList.IsFixedSize IList が固定サイズかどうかを示す値を取得します。 
System.Collections.IList.IsReadOnly IList が読み取り専用かどうかを示す値を取得します。 
	*/
End Class
	
End Namespace
End Namespace
End Namespace