source: Include/Classes/System/TypeInfo.ab@ 186

Last change on this file since 186 was 186, checked in by dai, 17 years ago

タイプミスを修正。

File size: 4.8 KB
RevLine 
[169]1' 実装中...
2'(※ まだ組み込んでいません)
3
4Class TypeInfo
5Public
6
7 Sub TypeInfo()
8 End Sub
9
10
11 '----------------------------------------------------------------
12 ' Public properties
13 '----------------------------------------------------------------
14
15 Abstract Function BaseType() As TypeInfo
16 Abstract Function FullName() As String
17 Abstract Function IsArray() As Boolean
18 Abstract Function IsByRef() As Boolean
19 Abstract Function IsClass() As Boolean
20 Abstract Function IsEnum() As Boolean
21 Abstract Function IsInterface() As Boolean
22 Abstract Function IsPointer() As Boolean
23 Abstract Function IsValueType() As Boolean
24 Abstract Function Name() As String
25 Abstract Function Namespace() As String
26
27
28
29 '----------------------------------------------------------------
30 ' Public methods
31 '----------------------------------------------------------------
32
33End Class
34
35
36' 中間的な実装(継承専用)
37Class TypeImpl
38 Inherits TypeInfo
39
40 name As String
41 strNamespace As String
42
[186]43 baseType As TypeInfo
[169]44 'interfaces As f(^^;;;
45
46Protected
47
48 Sub TypeImpl()
49 name = ""
50 strNamespace = ""
51 baseType = Nothing
52 End Sub
53
54 Sub TypeImpl( name As String, strNamespace As String )
55 This.name = name
56 This.strNamespace = strNamespace
57 baseType = Nothing
58 End Sub
59
60 Sub TypeImpl( name As String, strNamespace As String, baseType As Type )
61 TypeImpl( name, strNamespace )
62 This.baseType = baseType
63 End Sub
64
65 /*
66 Sub TypeImpl( name As String, strNamespace As String, baseType As Type, interfaces As ... )
67 TypeImpl( name, strNamespace, baseType )
68 End Sub
69 */
70
71Public
72
73
74 '----------------------------------------------------------------
75 ' Public properties
76 '----------------------------------------------------------------
77
78 Override Function BaseType() As TypeInfo
79 Return baseType
80 End Function
81
82 Override Function FullName() As String
83 Return strNamespace + "." + name
84 End Function
85
86 Override Function IsArray() As Boolean
87 Return False
88 End Function
89
90 Override Function IsByRef() As Boolean
91 Return False
92 End Function
93
94 Override Function IsClass() As Boolean
95 Return False
96 End Function
97
98 Override Function IsEnum() As Boolean
99 Return False
100 End Function
101
102 Override Function IsInterface() As Boolean
103 Return False
104 End Function
105
106 Override Function IsPointer() As Boolean
107 Return False
108 End Function
109
110 Override Function IsValueType() As Boolean
111 Return False
112 End Function
113
114 Override Function Name() As String
115 Return name
116 End Function
117
118 Override Function Namespace() As String
119 Return strNamespace
120 End Function
121
122
123
124 '----------------------------------------------------------------
125 ' Public methods
126 '----------------------------------------------------------------
127
128End Class
129
130
131' 値型を管理するためのクラス
132Class _System_TypeForValueType
133 Inherits TypeImpl
134Public
135 Sub _System_TypeForValueType( name )
136 TypeInfo( name, "" )
137 End Sub
138
139 Override Function IsValueType() As Boolean
140 Return True
141 End Function
142End Class
143
144' クラスを管理するためのクラス
145Class _System_TypeForClass
146 Inherits TypeImpl
147Public
148End Class
149
150' インターフェイスを管理するためのクラス
151Class _System_TypeForInterface
152 Inherits TypeImpl
153Public
154End Class
155
156' 列挙体を管理するためのクラス
157Class _System_TypeForEnum
158 Inherits TypeImpl
159Public
160End Class
161
162' デリゲートを管理するためのクラス
163Class _System_TypeForDelegate
164 Inherits TypeImpl
165Public
166End Class
167
168
169'--------------------------------------------------------------------
170' プロセスに存在するすべての型を管理する(シングルトン クラス)
171'--------------------------------------------------------------------
172Class _System_TypeBase
173 ppTypes As *Type
174 count As Long
175
176 Sub _System_TypeBase()
177 ppTypes = GC_malloc( 1 )
178 count = 0
179 End Sub
180 Sub ~_System_TypeBase()
181 Dim i As Long
182 For i=0 To ELM( count )
183 Delete ppTypes[i]
184 Next
185 End Sub
186
187 ' シングルトン オブジェクト
188 Static obj As _System_TypeBase
189
190Public
191
192 Sub Add( pType As *Type )
193 ppTypes = realloc( ppTypes, ( count + 1 ) * SizeOf(*Type) )
194 ppTypes[count] = pType
195 count++
196 End Sub
197
198 Static Sub _NextPointerForGC()
199 ' TODO: 実装
200 End Sub
201
202 Static Sub InitializeValueType()
203 ' 値型の追加
204 obj.Add( New _System_TypeForValueType( "Byte" ) )
205 obj.Add( New _System_TypeForValueType( "SByte" ) )
206 obj.Add( New _System_TypeForValueType( "Word" ) )
207 obj.Add( New _System_TypeForValueType( "Integer" ) )
208 obj.Add( New _System_TypeForValueType( "DWord" ) )
209 obj.Add( New _System_TypeForValueType( "Long" ) )
210 obj.Add( New _System_TypeForValueType( "QWord" ) )
211 obj.Add( New _System_TypeForValueType( "Int64" ) )
212 obj.Add( New _System_TypeForValueType( "Boolean" ) )
213 obj.Add( New _System_TypeForValueType( "Single" ) )
214 obj.Add( New _System_TypeForValueType( "Double" ) )
215 End Sub
216End Class
Note: See TracBrowser for help on using the repository browser.