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
RevLine 
[169]1' 実装中...
2'(※ まだ組み込んでいません)
3
[195]4
5'Namespace System
6
7
[169]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' 中間的な実装(継承専用)
[195]41Class TypeBaseImpl
[169]42 Inherits TypeInfo
43
44 name As String
45 strNamespace As String
46
[186]47 baseType As TypeInfo
[169]48 'interfaces As f(^^;;;
49
50Protected
51
[195]52 Sub TypeBaseImpl()
[169]53 name = ""
54 strNamespace = ""
55 baseType = Nothing
56 End Sub
57
[195]58 Sub TypeBaseImpl( name As String, strNamespace As String )
[169]59 This.name = name
60 This.strNamespace = strNamespace
[195]61 This.baseType = Nothing
[169]62 End Sub
63
[195]64 Sub TypeBaseImpl( name As String, strNamespace As String, baseType As TypeInfo )
65 This.name = name
66 This.strNamespace = strNamespace
[169]67 This.baseType = baseType
68 End Sub
69
70 /*
[195]71 Sub TypeBaseImpl( name As String, strNamespace As String, baseType As Type, interfaces As ... )
72 TypeBaseImpl( name, strNamespace, baseType )
[169]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
[195]138 Inherits TypeBaseImpl
[169]139Public
[195]140 Sub _System_TypeForValueType( name As String )
[169]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
[195]151 Inherits TypeBaseImpl
[169]152Public
[195]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
[169]161End Class
162
163' インターフェイスを管理するためのクラス
164Class _System_TypeForInterface
[195]165 Inherits TypeBaseImpl
[169]166Public
167End Class
168
169' 列挙体を管理するためのクラス
170Class _System_TypeForEnum
[195]171 Inherits TypeBaseImpl
[169]172Public
173End Class
174
175' デリゲートを管理するためのクラス
176Class _System_TypeForDelegate
[195]177 Inherits TypeBaseImpl
[169]178Public
179End Class
180
181
182'--------------------------------------------------------------------
183' プロセスに存在するすべての型を管理する(シングルトン クラス)
184'--------------------------------------------------------------------
185Class _System_TypeBase
[195]186 pTypes As *TypeInfo
[169]187 count As Long
188
189 Sub _System_TypeBase()
[195]190 pTypes = GC_malloc( 1 )
[169]191 count = 0
192 End Sub
193 Sub ~_System_TypeBase()
194 End Sub
195
[196]196 Sub Add( typeInfo As TypeInfo )
[195]197 pTypes = realloc( pTypes, ( count + 1 ) * SizeOf(*TypeInfo) )
198 pTypes[count] = typeInfo
199 count++
200 End Sub
201
[196]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
[169]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
[195]230
231 Static Sub InitializeUserTypes()
232 ' このメソッドの実装はコンパイラが自動生成する
[196]233
234 '例:
235 'obj.Add( New _System_TypeForClass( "String", "", obj.Search( "Object" ) ) )
[195]236 End Sub
237
[196]238Public
239
240 Static Sub _NextPointerForGC()
241 ' TODO: 実装
242 End Sub
243
[195]244 Static Sub Initialize()
245 ' 値型を初期化
246 InitializeValueType()
247
248 ' Class / Interface / Enum / Delegate を初期化
249 InitializeUserTypes()
250 End Sub
[169]251End Class
[195]252
253' End Namespace ' System
Note: See TracBrowser for help on using the repository browser.