source: trunk/Include/Classes/ActiveBasic/Core/TypeInfo.ab@ 400

Last change on this file since 400 was 400, checked in by イグトランス (egtra), 16 years ago

_System_CThreadCollectionでのクラスインスタンスへのポインタの使用を除去、参照変数構文へ。

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