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

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

TypeInfoクラスを微修正

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