source: trunk/Include/Classes/System/Collections/Generic/List.ab@ 344

Last change on this file since 344 was 344, checked in by OverTaker, 17 years ago

Removeバグ修整

File size: 2.5 KB
Line 
1
2Namespace System
3Namespace Collections
4Namespace Generic
5
6Class List<T>
7 items As *T
8 size As Long
9
10 Sub Realloc( allocateSize As Long )
11 items = realloc( items, allocateSize * SizeOf(VoidPtr) )
12 End Sub
13
14Public
15 Sub List()
16 items = GC_malloc( 1 )
17 End Sub
18 Sub ~List()
19 End Sub
20
21 /*!
22 @brief インデクサ
23 @author Daisuke Yamamoto
24 @date 2007/08/22
25 @param インデックス
26 */
27 Function Operator[] ( index As Long ) As T
28 Return items[index]
29 End Function
30
31
32 '----------------------------------------------------------------
33 ' パブリック プロパティ
34 '----------------------------------------------------------------
35
36 /*!
37 @brief Listに格納されている要素の数を取得する
38 @author Daisuke Yamamoto
39 @date 2007/08/22
40 */
41 Function Count() As Long
42 Return size
43 End Function
44
45
46 '----------------------------------------------------------------
47 ' パブリック メソッド
48 '----------------------------------------------------------------
49
50 /*!
51 @brief Listの末端に要素を追加する
52 @author Daisuke Yamamoto
53 @date 2007/08/22
54 @param 追加するオブジェクト
55 */
56 Sub Add( item As T )
57 Realloc( size + 1 )
58
59 items[size] = item
60 size++
61 End Sub
62
63 /*!
64 @brief Listからすべての要素を削除する
65 @author Daisuke Yamamoto
66 @date 2007/08/22
67 */
68 Sub Clear()
69 size = 0
70 End Sub
71
72 /*!
73 @brief List内から、最初に出現する値のインデックスを取得する
74 @author Daisuke Yamamoto
75 @date 2007/08/22
76 @return インデックス(見つからなかったときは-1)
77 */
78 Function IndexOf( item As T ) As Long
79 Dim i As Long
80 For i = 0 To ELM(size)
81 If items[i].Equals(item) Then
82 Return i
83 End If
84 Next
85 Return -1
86 End Function
87
88 /*!
89 @brief List内の指定したインデックスの位置に要素を挿入する
90 @author Daisuke Yamamoto
91 @date 2007/08/22
92 */
93 Sub Insert( index As Long, item As T )
94 Realloc( size + 1 )
95 memmove( items + (index+1)*SizeOf(VoidPtr), items + index*SizeOf(VoidPtr), (size-index)*SizeOf(VoidPtr) )
96 items[index] = item
97 size++
98 End Sub
99
100 /*!
101 @brief List内で最初に出現する値を削除する
102 @author Daisuke Yamamoto
103 @date 2007/09/28
104 @return 値が削除されたときはTrue、されなかったときはFlaseが返る
105 */
106 Function Remove( item As T ) As Boolean
107 Dim index = IndexOf( item )
108 If index = -1 Then
109 Return False
110 End If
111 memmove( items + index*SizeOf(VoidPtr), items + (index+1)*SizeOf(VoidPtr), (size-(index+1))*SizeOf(VoidPtr) )
112 Realloc( size - 1 )
113 size--
114 Return True
115 End Function
116End Class
117
118End Namespace
119End Namespace
120End Namespace
Note: See TracBrowser for help on using the repository browser.