GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLFeatureImplementation.h 00005 // 00006 //############################################################################################################################################### 00007 00008 #ifndef OCLFeatureImplementation_h 00009 #define OCLFeatureImplementation_h 00010 00011 #include "OCLCommon.h" 00012 #include "OclViolation.h" 00013 #include "OCLObject.h" 00014 #include "OCLException.h" 00015 #include "OCLConfig.h" 00016 00017 #define ATTRIBUTE( featureName ) class featureName : public OclImplementation::Attribute 00018 #define ASSOCIATION( featureName ) class featureName : public OclImplementation::Association 00019 #define ITERATOR( featureName ) class featureName : public OclImplementation::Iterator 00020 #define METHOD( featureName ) class featureName : public OclImplementation::Method 00021 #define OPERATOR( featureName ) class featureName : public OclImplementation::Operator 00022 #define FUNCTION( featureName ) class featureName : public OclImplementation::Function 00023 00024 #define TYPE_EXPRESSION_RETURN "%ocl::Type_Expression_Return" 00025 #define TYPE_COMPOUNDARGUMENT_SELF_BASE "%ocl::Type_CompoundArgument_Self_Base" 00026 #define TYPE_ARGUMENT_SELF_BASE "%ocl::Type_Argument_Self_Base" 00027 #define TYPE_AGGREGATED_OBJECT "%ocl::Type_Aggregated_Object" 00028 00029 namespace OclMeta 00030 { 00031 class TypeManager; 00032 } 00033 00034 namespace OclImplementation 00035 { 00036 00037 //############################################################################################################################################## 00038 // 00039 // A B S T R A C T C L A S S : OclImplementation::Feature 00040 // 00041 //============================================================================================================================================== 00042 // 00043 // D E S C R I P T I O N : 00044 // 00045 //############################################################################################################################################## 00046 00047 class Feature 00048 { 00049 private : 00050 OclMeta::Object m_Result; 00051 OclMeta::TypeManager* m_pTypeManager; 00052 00053 protected : 00054 Feature() 00055 { 00056 } 00057 00058 public : 00059 virtual ~Feature() 00060 { 00061 } 00062 00063 virtual void Initialize() 00064 { 00065 } 00066 00067 virtual void Finalize() 00068 { 00069 m_Result = OclMeta::Object::UNDEFINED; 00070 } 00071 00072 virtual void operator()() = 0; 00073 00074 void SetResult( const OclMeta::Object& object ) 00075 { 00076 m_Result = object; 00077 } 00078 00079 virtual OclMeta::Object GetResult() const 00080 { 00081 return m_Result; 00082 } 00083 00084 OclMeta::TypeManager* GetTypeManager() const 00085 { 00086 return m_pTypeManager; 00087 } 00088 00089 void ThrowException( const std::string& strMessage ) 00090 { 00091 THROWOCL0( ET_RUNTIME, strMessage ); 00092 } 00093 00094 friend class OclMeta::TypeManager; 00095 }; 00096 00097 //############################################################################################################################################## 00098 // 00099 // C L A S S : OclImplementation::TypeableFeature 00100 // 00101 //============================================================================================================================================== 00102 // 00103 // D E S C R I P T I O N : 00104 // 00105 //############################################################################################################################################## 00106 00107 class TypeableFeature 00108 { 00109 private : 00110 OclMeta::Object m_This; 00111 00112 protected : 00113 TypeableFeature() {} 00114 virtual void Finalize() { m_This = OclMeta::Object::UNDEFINED; } 00115 public : 00116 virtual ~TypeableFeature() {} 00117 00118 void SetThis( const OclMeta::Object& object ) { m_This = object; } 00119 OclMeta::Object GetThis() const { return m_This; } 00120 }; 00121 00122 //############################################################################################################################################## 00123 // 00124 // C L A S S : OclImplementation::ParametralFeature 00125 // 00126 //============================================================================================================================================== 00127 // 00128 // D E S C R I P T I O N : 00129 // 00130 //############################################################################################################################################## 00131 00132 class ParametralFeature 00133 { 00134 private : 00135 OclMeta::ObjectVector m_vecArguments; 00136 00137 protected : 00138 ParametralFeature() {} 00139 virtual void Finalize() { m_vecArguments.clear(); } 00140 public : 00141 virtual ~ParametralFeature() {} 00142 00143 void SetArguments( const OclMeta::ObjectVector& vecArguments ) { m_vecArguments = vecArguments; } 00144 OclMeta::Object GetArgument( int i ) const { return m_vecArguments[ i ]; } 00145 int GetArgumentCount() const { return m_vecArguments.size(); } 00146 }; 00147 00148 //############################################################################################################################################## 00149 // 00150 // C L A S S : OclImplementation::Attribute <<< + OclImplementation::Feature , + OclImplementation::TypeableFeature 00151 // 00152 //============================================================================================================================================== 00153 // 00154 // D E S C R I P T I O N : 00155 // 00156 //############################################################################################################################################## 00157 00158 class Attribute 00159 : public Feature, 00160 public TypeableFeature 00161 { 00162 public : 00163 virtual void Finalize() { Feature::Finalize(); TypeableFeature::Finalize(); } 00164 }; 00165 00166 //############################################################################################################################################## 00167 // 00168 // C L A S S : OclImplementation::Association <<< + OclImplementation::Feature , + OclImplementation::TypeableFeature 00169 // 00170 //============================================================================================================================================== 00171 // 00172 // D E S C R I P T I O N : 00173 // 00174 //############################################################################################################################################## 00175 00176 class Association 00177 : public Feature, 00178 public TypeableFeature 00179 { 00180 public : 00181 virtual void Finalize() { Feature::Finalize(); TypeableFeature::Finalize(); } 00182 }; 00183 00184 //############################################################################################################################################## 00185 // 00186 // C L A S S : OclImplementation::Iterator <<< + OclImplementation::Feature , + OclImplementation::TypeableFeature 00187 // 00188 //============================================================================================================================================== 00189 // 00190 // D E S C R I P T I O N : 00191 // 00192 //############################################################################################################################################## 00193 00194 class Iterator 00195 : public Feature, 00196 public TypeableFeature, 00197 public ParametralFeature 00198 { 00199 private : 00200 OclMeta::Object m_Next; 00201 OclMeta::Object m_NextOri; 00202 bool m_bStopped; 00203 bool m_bDoSnapShot; 00204 00205 public : 00206 virtual void Initialize() { m_bDoSnapShot = false; m_bStopped = false; } 00207 void SetSubResult( const OclMeta::Object& object ) { m_Next = object; } 00208 void SetSubOriResult( const OclMeta::Object& oriobject ) { m_NextOri = oriobject; } 00209 OclMeta::Object GetSubResult() const { return m_Next; } 00210 OclMeta::Object GetSubOriResult() const { return m_NextOri; } 00211 bool DoSnapshot() const { return m_bDoSnapShot; } 00212 void SetDoSnapshot( bool bDo ) { m_bDoSnapShot = bDo; } 00213 bool DoStop() const { return m_bStopped; } 00214 void SetDoStop( bool bDo ) { m_bStopped = bDo; } 00215 virtual void Finalize() { Feature::Finalize(); TypeableFeature::Finalize(); ParametralFeature::Finalize(); m_Next = OclMeta::Object::UNDEFINED; } 00216 }; 00217 00218 //############################################################################################################################################## 00219 // 00220 // C L A S S : OclImplementation::Method <<< + OclImplementation::Feature , + OclImplementation::TypeableFeature, + OclImplementation::ParametralFeature 00221 // 00222 //============================================================================================================================================== 00223 // 00224 // D E S C R I P T I O N : 00225 // 00226 //############################################################################################################################################## 00227 00228 class Method 00229 : public Feature, 00230 public TypeableFeature, 00231 public ParametralFeature 00232 { 00233 public : 00234 virtual void Finalize() { Feature::Finalize(); TypeableFeature::Finalize(); ParametralFeature::Finalize(); } 00235 virtual OclTree::ViolationVector GetViolations() {OclTree::ViolationVector vec; return vec;} 00236 virtual void ClearViolations() {} 00237 00238 }; 00239 00240 //############################################################################################################################################## 00241 // 00242 // C L A S S : OclImplementation::Operator <<< + OclImplementation::Feature , + OclImplementation::ParametralFeature 00243 // 00244 //============================================================================================================================================== 00245 // 00246 // D E S C R I P T I O N : 00247 // 00248 //############################################################################################################################################## 00249 00250 class Operator 00251 : public Feature, 00252 public ParametralFeature 00253 { 00254 public : 00255 virtual void Finalize() { Feature::Finalize(); ParametralFeature::Finalize(); } 00256 }; 00257 00258 //############################################################################################################################################## 00259 // 00260 // C L A S S : OclImplementation::Function <<< + OclImplementation::Feature , + OclImplementation::ParametralFeature 00261 // 00262 //============================================================================================================================================== 00263 // 00264 // D E S C R I P T I O N : 00265 // 00266 //############################################################################################################################################## 00267 00268 class Function 00269 : public Feature, 00270 public ParametralFeature 00271 { 00272 public : 00273 virtual void Finalize() { Feature::Finalize(); ParametralFeature::Finalize(); } 00274 }; 00275 00276 }; // namespace OclImplementation 00277 00278 #endif // OCLFeatureImplementation_h