Changeset 543


Ignore:
Timestamp:
Jul 13, 2008, 5:03:44 AM (16 years ago)
Author:
NoWest
Message:

無理矢理だがICollection<T>とIList<T>を実装。
コンストラクタを追加。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/System/Collections/Generic/List.ab

    r531 r543  
    1717End Interface
    1818
     19
     20Class ICollection<T>
     21    Implements IEnumerable<T>, IEnumerator<T>
     22Public
     23    ' Property
     24    Abstract Function Count() As Long
     25    Abstract Function IsReadOnly() As Boolean
     26
     27    ' Methods
     28    Abstract Sub Add( item As T )
     29    Abstract Sub Clear()
     30'   Abstract Function Contains ( item As T ) As Boolean
     31'   Abstract Sub CopyTo (ByRef array As List<T>, arrayIndex As Long )
     32    Abstract Function Remove( item As T ) As Boolean
     33End Class
     34
     35
     36Class IList<T>
     37    Inherits ICollection<T>
     38Public
     39    ' Property
     40    Abstract Sub Operator[] ( index As Long, item As T )
     41    Abstract Function Operator[] ( index As Long ) As T
     42    ' Methods
     43'   Abstract Function Item ( index As Long ) As T
     44    Abstract Function IndexOf( item As T ) As Long
     45    Abstract Sub Insert( index As Long, item As T )
     46    Abstract Sub RemoveAt( index As Long )
     47End Class
     48
     49
    1950Class List<T>
    20     Implements IEnumerable<T>, IEnumerator<T>
     51    Inherits IList<T>
     52
    2153    items As *T
    2254    size As Long
     
    3567        Reset()
    3668    End Sub
     69
     70    /*!
     71    @brief  予め要素数を指定してList<T>を初期化
     72    @author NoWest
     73    @date   2008/07/13
     74    @param  リストの要素数
     75    */
     76    Sub List( capacity As Long )
     77        This.List()
     78        This.Realloc( capacity )
     79    End Sub
     80
     81    /*!
     82    @brief  既存の配列List<T>を初期化
     83    @author NoWest
     84    @date   2008/07/13
     85    @param  インデックス
     86    */
     87    Sub List( array As *T, count As Long )
     88        This.List( count )
     89        memmove( This.items, array, count * SizeOf(T) )
     90        This.size = count
     91    End Sub
    3792    Sub ~List()
    3893    End Sub
     
    4499    @param  インデックス
    45100    */
    46     Function Operator[] ( index As Long ) As T
     101    Override Sub Operator[] ( index As Long, item As T )
     102        items[index]=item
     103    End Sub
     104    Override Function Operator[] ( index As Long ) As T
    47105        Return items[index]
    48106    End Function
     
    68126    @date   2007/08/22
    69127    */
    70     Function Count() As Long
     128    Override Function Count() As Long
    71129        Return size
    72130    End Function
    73131
     132    /*!
     133    @brief  Listが読み込み専用かどうかを取得する
     134    @author NoWest
     135    @date   2008/07/12
     136    */
     137    Override Function IsReadOnly() As Boolean
     138        Return False
     139    End Function
    74140
    75141    '----------------------------------------------------------------
     
    83149    @param  追加するオブジェクト
    84150    */
    85     Sub Add( item As T )
     151    Override Sub Add( item As T )
    86152        Realloc( size + 1 )
    87153
     
    90156    End Sub
    91157
     158'   Function AsReadOnly() As ReadOnlyCollection
     159
    92160    /*!
    93161    @brief  Listからすべての要素を削除する
     
    95163    @date   2007/08/22
    96164    */
    97     Sub Clear()
     165    Override Sub Clear()
    98166        size = 0
    99167    End Sub
    100168
     169/*  Override Function Contains ( item As T ) As Boolean
     170        TODO
     171    End Function*/
     172
    101173    /*!
    102174    @brief  List内から、最初に出現する値のインデックスを取得する
     
    105177    @return インデックス(見つからなかったときは-1)
    106178    */
    107     Function IndexOf( item As T ) As Long
     179    Override Function IndexOf( item As T ) As Long
    108180        Dim i As Long
    109181        For i = 0 To ELM(size)
     
    120192    @date   2007/08/22
    121193    */
    122     Sub Insert( index As Long, item As T )
     194    Override Sub Insert( index As Long, item As T )
    123195        Realloc( size + 1 )
    124196        memmove( items + (index+1)*SizeOf(T), items + index*SizeOf(T), (size-index)*SizeOf(T) )
     
    133205    @return 値が削除されたときはTrue、されなかったときはFlaseが返る
    134206    */
    135     Function Remove( item As T ) As Boolean
     207    Override Function Remove( item As T ) As Boolean
    136208        Dim index = IndexOf( item )
    137209        If index = -1 Then
     
    149221    @return 値が削除されたときはTrue、されなかったときはFlaseが返る
    150222    */
    151     Sub RemoveAt( index As Long )
     223    Override Sub RemoveAt( index As Long )
    152224        memmove( items + index*SizeOf(T), items + (index+1)*SizeOf(T), (size-(index+1))*SizeOf(T) )
    153225        Realloc( size - 1 )
     
    176248    @return IEnumeratorインターフェイスが返る
    177249    */
    178     Function GetEnumerator() As IEnumerator<T>
     250    Override Function GetEnumerator() As IEnumerator<T>
    179251        Return This
    180252    End Function
     
    186258    @return 上限に達していなければTrueが、達していればFalseが返る
    187259    */
    188     Function MoveNext() As Boolean
     260    Override Function MoveNext() As Boolean
    189261        If currentIndexForEnumerator + 1 >= size Then
    190262            ' 上限に達した
     
    201273    @date   2007/11/19
    202274    */
    203     Sub Reset()
     275    Override Sub Reset()
    204276        currentIndexForEnumerator = -1
    205277    End Sub
     
    211283    @return カレントオブジェクトが返る
    212284    */
    213     Function Current() As T
     285    Override Function Current() As T
    214286        If currentIndexForEnumerator = -1 Then
    215287            ' MoveNextメソッドがReset後、一度も呼び出されなかった
     
    220292End Class
    221293
     294
    222295End Namespace
    223296End Namespace
Note: See TracChangeset for help on using the changeset viewer.