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

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

タイプミスを修正。

File size: 4.8 KB
Line 
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
43    baseType As TypeInfo
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.