source: dev/trunk/ab5.0/abdev/BasicCompiler_Common/include/Method.h@ 523

Last change on this file since 523 was 523, checked in by dai_9181, 16 years ago

ヘッダファイルを整理中

File size: 6.6 KB
RevLine 
[206]1#pragma once
2
3class UserProc;
4class CClass;
5
6class CMethod : public MemberPrototype
7{
8 const UserProc *pUserProc;
9
10 // XMLシリアライズ用
11private:
12 friend class boost::serialization::access;
13 template<class Archive> void serialize(Archive& ar, const unsigned int version)
14 {
15 trace_for_serialize( "serializing - CMethod" );
16
17 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
18 ar & boost::serialization::make_nvp("pUserProc", const_cast<UserProc *&>(pUserProc));
19 }
20
21public:
22 CMethod( const UserProc *pUserProc, Prototype::Accessibility accessibility )
23 : MemberPrototype( accessibility )
24 , pUserProc( pUserProc )
25 {
26 }
27 CMethod()
28 {
29 }
30
31 const UserProc &GetUserProc() const
32 {
33 return *pUserProc;
34 }
35 void SetUserProcPtr( const UserProc *pUserProc )
36 {
37 this->pUserProc = pUserProc;
38 }
39
[351]40 virtual bool Override( const UserProc *pUserProc, Prototype::Accessibility accessibility, bool isOverrideModifier ) = 0;
41
[206]42 virtual bool IsAbstract() const = 0;
[351]43 virtual void SetAbstractMark( bool isAbstractMark ) = 0;
[206]44 virtual bool IsVirtual() const = 0;
45 virtual bool IsConst() const = 0;
[336]46 virtual bool IsDynamic() const = 0;
[206]47 virtual bool IsStatic() const = 0;
48 virtual const CClass *GetInheritsClassPtr() const = 0;
49 virtual void SetInheritsClassPtr( const CClass *pInheritsClass ) = 0;
[352]50 virtual bool IsNotUse() const = 0;
51 virtual void SetNotUseMark( bool isNotUse ) = 0;
[206]52};
53
54class DynamicMethod : public CMethod
55{
56 bool isAbstract;
57 bool isVirtual;
58 bool isConst;
59 const CClass *pInheritsClass;
60
[352]61 // 他のインターフェイスへ実装が移った場合(基底クラスメソッドのインターフェイス実装)はこのフラグをオンにする
62 bool isNotUse;
63
[206]64 // XMLシリアライズ用
65private:
66 friend class boost::serialization::access;
67 template<class Archive> void serialize(Archive& ar, const unsigned int version)
68 {
69 trace_for_serialize( "serializing - DynamicMethod" );
70
71 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
72 ar & BOOST_SERIALIZATION_NVP( isAbstract );
73 ar & BOOST_SERIALIZATION_NVP( isVirtual );
74 ar & BOOST_SERIALIZATION_NVP( isConst );
75 ar & boost::serialization::make_nvp("pInheritsClass", const_cast<CClass *&>(pInheritsClass));
[352]76 ar & BOOST_SERIALIZATION_NVP( isNotUse );
[206]77 }
78
79public:
80 DynamicMethod( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isAbstract, bool isVirtual, bool isConst, const CClass *pInheritsClass = NULL )
81 : CMethod( pUserProc, accessibility )
82 , isAbstract( isAbstract )
83 , isVirtual( isVirtual )
84 , isConst( isConst )
85 , pInheritsClass( pInheritsClass )
[352]86 , isNotUse( false )
[206]87 {
88 }
89 DynamicMethod( const CMethod &method )
90 : CMethod( &method.GetUserProc(), method.GetAccessibility() )
91 , isAbstract( method.IsAbstract() )
92 , isVirtual( method.IsVirtual() )
93 , isConst( method.IsConst() )
94 , pInheritsClass( method.GetInheritsClassPtr() )
[352]95 , isNotUse( false )
[206]96 {
97 }
98 DynamicMethod()
99 {
100 }
101
[351]102 virtual bool Override( const UserProc *pUserProc, Prototype::Accessibility accessibility, bool isOverrideModifier );
103
[206]104 virtual bool IsAbstract() const
105 {
106 return isAbstract;
107 }
[351]108 virtual void SetAbstractMark( bool isAbstract )
[206]109 {
[351]110 this->isAbstract = isAbstract;
[206]111 }
112 virtual bool IsVirtual() const
113 {
114 return isVirtual;
115 }
116 virtual bool IsConst() const
117 {
118 return isConst;
119 }
[336]120 virtual bool IsDynamic() const
121 {
122 return true;
123 }
[206]124 virtual bool IsStatic() const
125 {
126 return false;
127 }
128 virtual const CClass *GetInheritsClassPtr() const
129 {
130 return pInheritsClass;
131 }
132 virtual void SetInheritsClassPtr( const CClass *pInheritsClass )
133 {
134 this->pInheritsClass = pInheritsClass;
135 }
[352]136 virtual bool IsNotUse() const
137 {
138 return isNotUse;
139 }
140 virtual void SetNotUseMark( bool isNotUse )
141 {
142 this->isNotUse = isNotUse;
143 }
[206]144};
145BOOST_CLASS_EXPORT( DynamicMethod );
146class StaticMethod : public CMethod
147{
148 // XMLシリアライズ用
149private:
150 friend class boost::serialization::access;
151 template<class Archive> void serialize(Archive& ar, const unsigned int version)
152 {
153 trace_for_serialize( "serializing - StaticMethod" );
154
155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
156 }
157
158public:
[351]159
160 // コンストラクタ
[206]161 StaticMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
162 : CMethod( pUserProc, accessibility )
163 {
164 }
[351]165
166 // コピーコンストラクタ
167 StaticMethod( const StaticMethod &staticMethod );
168
169 // デストラクタ
[206]170 StaticMethod()
171 {
172 }
173
[465]174 virtual bool Override( const UserProc *pUserProc, Prototype::Accessibility accessibility, bool isOverrideModifier )
175 {
176 throw;
177 }
[351]178
[465]179 virtual bool IsAbstract() const
180 {
181 throw;
182 }
183 virtual void SetAbstractMark( bool isAbstract )
184 {
185 throw;
186 }
[206]187 virtual bool IsVirtual() const{
188 return false;
189 }
[465]190 virtual bool IsConst() const
191 {
192 throw;
193 }
[336]194 virtual bool IsDynamic() const
195 {
196 return false;
197 }
[206]198 virtual bool IsStatic() const
199 {
200 return true;
201 }
[465]202 virtual const CClass *GetInheritsClassPtr() const
203 {
204 throw;
205 }
206 virtual void SetInheritsClassPtr( const CClass *pInheritsClass )
207 {
208 throw;
209 }
[352]210 virtual bool IsNotUse() const
211 {
212 return false;
213 }
214 virtual void SetNotUseMark( bool isNotUse )
215 {
[465]216 throw;
[352]217 }
[206]218};
219BOOST_CLASS_EXPORT( StaticMethod );
220
[523]221class Methods : public std::vector<CMethod *>
[206]222{
223 // XMLシリアライズ用
224private:
225 friend class boost::serialization::access;
226 template<class Archive> void serialize(Archive& ar, const unsigned int version)
227 {
228 trace_for_serialize( "serializing - Methods" );
229
230 ar & boost::serialization::make_nvp("vector_CMethod", boost::serialization::base_object<vector<CMethod *>>(*this));
231 }
232
233public:
[351]234 // コンストラクタ
[206]235 Methods();
[351]236
237 // コピーコンストラクタ
238 Methods( const Methods &methods );
239
240 // デストラクタ
[206]241 ~Methods();
242
243 //メンバ、メソッドの追加
244 void Add( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isConst, bool isAbstract, bool isVirtual );
245 void AddStatic(UserProc *pUserProc,Prototype::Accessibility accessibility);
246
[382]247 /*!
248 @brief オーバーライドのための検索
249 @param actualTypeParametersForThisMethods thisオブジェクトで保有するメソッド群を対象とした実型パラメータ
250 pUserProc 照らし合わせる関数
251 */
252 CMethod *FindForOverride( const Types &actualTypeParametersForThisMethods, const UserProc *pUserProc );
[346]253
[206]254 const CMethod *GetMethodPtr( const UserProc *pUserProc ) const;
255 bool IsExist( const char *name ) const;
[523]256 virtual void Enum( const char *methodName, std::vector<const UserProc *> &subs ) const;
257 virtual void Enum( BYTE idOperatorCalc, std::vector<const UserProc *> &subs ) const;
[347]258
259 // 仮想メソッドの個数を取得
260 int GetVtblNum() const;
261
262 // vtblを生成
263 void GenerateVTablePart( long &vtableDataTableOffset ) const;
[206]264};
Note: See TracBrowser for help on using the repository browser.