GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLSignature.h 00005 // 00006 //############################################################################################################################################### 00007 00008 #ifndef OCLSignature_h 00009 #define OCLSignature_h 00010 00011 #include "OCLCommon.h" 00012 #include "OCLFormalParameter.h" 00013 00014 namespace OclSignature 00015 { 00016 class Feature; 00017 class ParametralFeature; 00018 class TypeableFeature; 00019 00020 class Attribute; 00021 class Association; 00022 class Iterator; 00023 class Method; 00024 class Operator; 00025 class Function; 00026 00027 //############################################################################################################################################## 00028 // 00029 // C L A S S : OclSignature::Feature 00030 // 00031 //============================================================================================================================================== 00032 // 00033 // D E S C R I P T I O N : 00034 // 00035 //############################################################################################################################################## 00036 00037 class Feature 00038 { 00039 public : 00040 enum FeatureKind { FK_OPERATOR = 0, FK_METHOD = 1, FK_FUNCTION = 2, FK_ATTRIBUTE = 3, FK_ASSOCIATION = 4, FK_ITERATOR = 5 }; 00041 00042 private : 00043 std::string m_strName; 00044 FeatureKind m_eKind; 00045 00046 protected : 00047 Feature( const std::string& strName, FeatureKind eKind ); 00048 public : 00049 virtual ~Feature(); 00050 00051 std::string GetName() const; 00052 FeatureKind GetKind() const; 00053 virtual std::string Print() const; 00054 protected : 00055 bool IsIdentical( const Feature& object ) const; 00056 }; 00057 00058 //############################################################################################################################################## 00059 // 00060 // C L A S S : OclSignature::ParametralFeature 00061 // 00062 //============================================================================================================================================== 00063 // 00064 // D E S C R I P T I O N : 00065 // 00066 //############################################################################################################################################## 00067 00068 class ParametralFeature 00069 { 00070 private : 00071 OclCommon::FormalParameterVector m_vecParameters; 00072 00073 protected : 00074 ParametralFeature( const OclCommon::FormalParameterVector& vecParameters ); 00075 public : 00076 virtual ~ParametralFeature(); 00077 00078 int GetParameterCount() const; 00079 int GetMinParameterCount() const; 00080 const OclCommon::FormalParameter& GetParameter( int i ) const; 00081 protected : 00082 OclCommon::FormalParameterVector& GetParameters(); 00083 virtual std::string Print() const; 00084 bool IsIdentical( const ParametralFeature& object ) const; 00085 }; 00086 00087 //############################################################################################################################################## 00088 // 00089 // C L A S S : OclMeta::TypeableFeature 00090 // 00091 //============================================================================================================================================== 00092 // 00093 // D E S C R I P T I O N : 00094 // 00095 //############################################################################################################################################## 00096 00097 class TypeableFeature 00098 { 00099 private : 00100 std::string m_strTypeName; 00101 00102 protected : 00103 TypeableFeature( const std::string& strTypeName ); 00104 TypeableFeature(); 00105 public : 00106 virtual ~TypeableFeature(); 00107 00108 std::string GetTypeName() const; 00109 virtual std::string Print() const; 00110 }; 00111 00112 //############################################################################################################################################## 00113 // 00114 // C L A S S : OclSignature::Attribute <<< + Feature , + TypeableFeature 00115 // 00116 //============================================================================================================================================== 00117 // 00118 // D E S C R I P T I O N : 00119 // 00120 //############################################################################################################################################## 00121 00122 class Attribute 00123 : public Feature, 00124 public TypeableFeature 00125 { 00126 public : 00127 Attribute( const std::string& strName, const std::string& strTypeName ); 00128 protected : 00129 Attribute( const std::string& strName ); 00130 public : 00131 virtual ~Attribute(); 00132 00133 virtual std::string Print() const; 00134 bool IsIdentical( const Attribute& object ) const; 00135 }; 00136 00137 //############################################################################################################################################## 00138 // 00139 // C L A S S : OclSignature::Assocation <<< + Feature , + TypeableFeature 00140 // 00141 //============================================================================================================================================== 00142 // 00143 // D E S C R I P T I O N : 00144 // 00145 //############################################################################################################################################## 00146 00147 class Association 00148 : public Feature, 00149 public TypeableFeature 00150 { 00151 private : 00152 std::string m_strAcceptable; 00153 00154 public : 00155 Association( const std::string& strName, const std::string& strTypeName, const std::string& strAcceptable ); 00156 protected : 00157 Association( const std::string& strName, const std::string& strAcceptable ); 00158 public : 00159 virtual ~Association(); 00160 00161 virtual std::string Print() const; 00162 std::string GetAcceptableTypeName() const; 00163 bool IsIdentical( const Association& object ) const; 00164 }; 00165 00166 //############################################################################################################################################## 00167 // 00168 // C L A S S : OclSignature::Iterator <<< + Feature , + TypeableFeature, + ParametralFeature 00169 // 00170 //============================================================================================================================================== 00171 // 00172 // D E S C R I P T I O N : 00173 // 00174 //############################################################################################################################################## 00175 00176 class Iterator 00177 : public Feature, 00178 public TypeableFeature, 00179 public ParametralFeature 00180 { 00181 public : 00182 Iterator( const std::string& strName, const std::string& strTypeName, const std::string& strParameterType ); 00183 protected : 00184 Iterator( const std::string& strName, const std::string& strParameterType ); 00185 public : 00186 virtual ~Iterator(); 00187 00188 virtual std::string Print() const; 00189 bool IsIdentical( const Iterator& object ) const; 00190 }; 00191 00192 //############################################################################################################################################## 00193 // 00194 // C L A S S : OclSignature::Method <<< + Feature , + TypeableFeature, + ParametralFeature 00195 // 00196 //============================================================================================================================================== 00197 // 00198 // D E S C R I P T I O N : 00199 // 00200 //############################################################################################################################################## 00201 00202 class Method 00203 : public Feature, 00204 public TypeableFeature, 00205 public ParametralFeature 00206 { 00207 public : 00208 Method( const std::string& strName, const std::string& strTypeName, const StringVector& vecTypes ); 00209 protected : 00210 Method( const std::string& strName, const OclCommon::FormalParameterVector& vecParameters ); 00211 public : 00212 virtual ~Method(); 00213 00214 virtual std::string Print() const; 00215 bool IsIdentical( const Method& object ) const; 00216 }; 00217 00218 //############################################################################################################################################## 00219 // 00220 // C L A S S : OclSignature::Operator <<< + Feature , + ParametralFeature 00221 // 00222 //============================================================================================================================================== 00223 // 00224 // D E S C R I P T I O N : 00225 // 00226 //############################################################################################################################################## 00227 00228 class Operator 00229 : public Feature, public ParametralFeature 00230 { 00231 public : 00232 Operator( const std::string& strName, const std::string& strOperand1Type ); 00233 Operator( const std::string& strName, const std::string& strOperand1Type, const std::string& strOperand2Type ); 00234 public : 00235 virtual ~Operator(); 00236 00237 virtual std::string Print() const; 00238 bool IsIdentical( const Operator& object ) const; 00239 }; 00240 00241 //############################################################################################################################################## 00242 // 00243 // C L A S S : OclSignature::Function <<< + Feature , + ParametralFeature 00244 // 00245 //============================================================================================================================================== 00246 // 00247 // D E S C R I P T I O N : 00248 // 00249 //############################################################################################################################################## 00250 00251 class Function 00252 : public Feature, public ParametralFeature 00253 { 00254 public : 00255 Function( const std::string& strName, const StringVector& vecTypes ); 00256 protected : 00257 Function( const std::string& strName, const OclCommon::FormalParameterVector& vecParameters ); 00258 public : 00259 virtual ~Function(); 00260 00261 virtual std::string Print() const; 00262 bool IsIdentical( const Function& object ) const; 00263 }; 00264 00265 }; // namespace OclSignature 00266 00267 #endif // OCLSignature_h 00268