GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLSignature.cpp 00005 // 00006 //############################################################################################################################################### 00007 #include "Solve4786.h" 00008 #include "OCLSignature.h" 00009 00010 namespace OclSignature 00011 { 00012 00013 //############################################################################################################################################## 00014 // 00015 // A B S T R A C T C L A S S : OclSignature::Feature 00016 // 00017 //############################################################################################################################################## 00018 00019 Feature::Feature( const std::string& strName, FeatureKind eKind ) 00020 : m_strName( strName ), m_eKind( eKind ) 00021 { 00022 } 00023 00024 Feature::~Feature() 00025 { 00026 } 00027 00028 std::string Feature::GetName() const 00029 { 00030 return m_strName; 00031 } 00032 00033 Feature::FeatureKind Feature::GetKind() const 00034 { 00035 return m_eKind; 00036 } 00037 00038 std::string Feature::Print() const 00039 { 00040 return m_strName; 00041 } 00042 00043 bool Feature::IsIdentical( const Feature& object ) const 00044 { 00045 return m_strName == object.m_strName; 00046 } 00047 00048 //############################################################################################################################################## 00049 // 00050 // C L A S S : OclSignature::ParametralFeature 00051 // 00052 //############################################################################################################################################## 00053 00054 ParametralFeature::ParametralFeature( const OclCommon::FormalParameterVector& vecParameters ) 00055 : m_vecParameters( vecParameters ) 00056 { 00057 } 00058 00059 ParametralFeature::~ParametralFeature() 00060 { 00061 } 00062 00063 int ParametralFeature::GetParameterCount() const 00064 { 00065 return m_vecParameters.size(); 00066 } 00067 00068 int ParametralFeature::GetMinParameterCount() const 00069 { 00070 for ( int i = m_vecParameters.size()-1 ; i >= 0 ; i-- ) 00071 if ( m_vecParameters[ i ].IsRequired() ) 00072 return i+1; 00073 return 0; 00074 } 00075 00076 const OclCommon::FormalParameter& ParametralFeature::GetParameter( int i ) const 00077 { 00078 return m_vecParameters[ i ]; 00079 } 00080 00081 OclCommon::FormalParameterVector& ParametralFeature::GetParameters() 00082 { 00083 return m_vecParameters; 00084 } 00085 00086 std::string ParametralFeature::Print() const 00087 { 00088 std::string strSignature = "( "; 00089 for ( int i = 0 ; i < GetParameterCount() ; i++ ) { 00090 OclCommon::FormalParameter parameter = GetParameter( i ); 00091 if ( ! parameter.IsRequired() ) 00092 strSignature += " { "; 00093 if ( i != 0 ) 00094 strSignature += ", "; 00095 strSignature += parameter.GetTypeName(); 00096 if ( i == GetParameterCount() - 1 && ! parameter.IsRequired() ) 00097 strSignature += "} "; 00098 } 00099 return strSignature + " )"; 00100 } 00101 00102 bool ParametralFeature::IsIdentical( const ParametralFeature& object ) const 00103 { 00104 return m_vecParameters == object.m_vecParameters; 00105 } 00106 00107 //############################################################################################################################################## 00108 // 00109 // C L A S S : OclSignature::TypeableFeature 00110 // 00111 //############################################################################################################################################## 00112 00113 TypeableFeature::TypeableFeature( const std::string& strTypeName ) 00114 : m_strTypeName( strTypeName ) 00115 { 00116 } 00117 00118 TypeableFeature::TypeableFeature() 00119 : m_strTypeName( "" ) 00120 { 00121 } 00122 00123 TypeableFeature::~TypeableFeature() 00124 { 00125 } 00126 00127 std::string TypeableFeature::GetTypeName() const 00128 { 00129 return m_strTypeName; 00130 } 00131 00132 std::string TypeableFeature::Print() const 00133 { 00134 if ( m_strTypeName.empty() ) 00135 return ""; 00136 return m_strTypeName + "::"; 00137 } 00138 00139 //############################################################################################################################################## 00140 // 00141 // C L A S S : OclSignature::Attribute <<< + Feature , + TypeableFeature 00142 // 00143 //############################################################################################################################################## 00144 00145 Attribute::Attribute( const std::string& strName, const std::string& strTypeName ) 00146 : Feature( strName, Feature::FK_ATTRIBUTE ), TypeableFeature( strTypeName ) 00147 { 00148 } 00149 00150 Attribute::Attribute( const std::string& strName ) 00151 : Feature( strName, Feature::FK_ATTRIBUTE ), TypeableFeature() 00152 { 00153 } 00154 00155 Attribute::~Attribute() 00156 { 00157 } 00158 00159 std::string Attribute::Print() const 00160 { 00161 return TypeableFeature::Print() + Feature::Print(); 00162 } 00163 00164 bool Attribute::IsIdentical( const Attribute& object ) const 00165 { 00166 return Feature::IsIdentical( object ); 00167 } 00168 00169 //############################################################################################################################################## 00170 // 00171 // C L A S S : OclSignature::Assocation <<< + Feature , + TypeableFeature 00172 // 00173 //############################################################################################################################################## 00174 00175 Association::Association( const std::string& strName, const std::string& strTypeName, const std::string& strAcceptable ) 00176 : Feature( strName, Feature::FK_ASSOCIATION ), TypeableFeature( strTypeName ), m_strAcceptable( strAcceptable ) 00177 { 00178 } 00179 00180 Association::Association( const std::string& strName, const std::string& strAcceptable ) 00181 : Feature( strName, Feature::FK_ASSOCIATION ), TypeableFeature(), m_strAcceptable( strAcceptable ) 00182 { 00183 } 00184 00185 Association::~Association() 00186 { 00187 } 00188 00189 std::string Association::Print() const 00190 { 00191 if ( m_strAcceptable.empty() ) 00192 return TypeableFeature::Print() + Feature::Print(); 00193 return TypeableFeature::Print() + m_strAcceptable + "[ " + Feature::Print() + " ]"; 00194 } 00195 00196 std::string Association::GetAcceptableTypeName() const 00197 { 00198 return m_strAcceptable; 00199 } 00200 00201 bool Association::IsIdentical( const Association& object ) const 00202 { 00203 return Feature::IsIdentical( object ) && m_strAcceptable == object.m_strAcceptable; 00204 } 00205 00206 //############################################################################################################################################## 00207 // 00208 // C L A S S : OclSignature::Iterator <<< + Feature , + TypeableFeature, + ParametralFeature 00209 // 00210 //############################################################################################################################################## 00211 00212 Iterator::Iterator( const std::string& strName, const std::string& strTypeName, const std::string& strParameterType ) 00213 : Feature( strName, Feature::FK_ITERATOR ), TypeableFeature( strTypeName ), ParametralFeature( OclCommon::FormalParameterVector( 1, OclCommon::FormalParameter( strParameterType, true ) ) ) 00214 { 00215 } 00216 00217 Iterator::Iterator( const std::string& strName, const std::string& strParameterType ) 00218 : Feature( strName, Feature::FK_ITERATOR ), TypeableFeature(), ParametralFeature( OclCommon::FormalParameterVector( 1, OclCommon::FormalParameter( strParameterType, true ) ) ) 00219 { 00220 } 00221 00222 Iterator::~Iterator() 00223 { 00224 } 00225 00226 std::string Iterator::Print() const 00227 { 00228 return TypeableFeature::Print() + Feature::Print() + "( ... | " + GetParameter( 0 ).GetTypeName() + " )"; 00229 } 00230 00231 bool Iterator::IsIdentical( const Iterator& object ) const 00232 { 00233 return Feature::IsIdentical( object ) && ParametralFeature::IsIdentical( object ); 00234 } 00235 00236 //############################################################################################################################################## 00237 // 00238 // C L A S S : OclSignature::Method <<< + Feature , + TypeableFeature, + ParametralFeature 00239 // 00240 //############################################################################################################################################## 00241 00242 Method::Method( const std::string& strName, const std::string& strTypeName, const StringVector& vecTypes ) 00243 : Feature( strName, Feature::FK_METHOD ), TypeableFeature( strTypeName ), ParametralFeature( OclCommon::FormalParameterVector() ) 00244 { 00245 OclCommon::FormalParameterVector& vecParameters = GetParameters(); 00246 for ( unsigned int i = 0 ; i < vecTypes.size() ; i++ ) 00247 vecParameters.push_back( OclCommon::FormalParameter( vecTypes[ i ], true ) ); 00248 } 00249 00250 Method::Method( const std::string& strName, const OclCommon::FormalParameterVector& vecParameters ) 00251 : Feature( strName, Feature::FK_METHOD ), TypeableFeature(), ParametralFeature( vecParameters ) 00252 { 00253 } 00254 00255 Method::~Method() 00256 { 00257 } 00258 00259 std::string Method::Print() const 00260 { 00261 return TypeableFeature::Print() + Feature::Print() + ParametralFeature::Print(); 00262 } 00263 00264 bool Method::IsIdentical( const Method& object ) const 00265 { 00266 return Feature::IsIdentical( object ) && ParametralFeature::IsIdentical( object ); 00267 } 00268 00269 //############################################################################################################################################## 00270 // 00271 // C L A S S : OclSignature::Operator <<< + Feature , + ParametralFeature 00272 // 00273 //============================================================================================================================================== 00274 // 00275 // D E S C R I P T I O N : 00276 // 00277 //############################################################################################################################################## 00278 00279 Operator::Operator( const std::string& strName, const std::string& strOperand1Type ) 00280 : Feature( strName, Feature::FK_OPERATOR ), ParametralFeature( OclCommon::FormalParameterVector( 1, OclCommon::FormalParameter( strOperand1Type, true ) ) ) 00281 { 00282 } 00283 00284 Operator::Operator( const std::string& strName, const std::string& strOperand1Type, const std::string& strOperand2Type ) 00285 : Feature( strName, Feature::FK_OPERATOR ), ParametralFeature( OclCommon::FormalParameterVector() ) 00286 { 00287 OclCommon::FormalParameterVector& vecParameters = GetParameters(); 00288 vecParameters.push_back( OclCommon::FormalParameter( strOperand1Type, true ) ); 00289 vecParameters.push_back( OclCommon::FormalParameter( strOperand2Type, true ) ); 00290 } 00291 00292 Operator::~Operator() 00293 { 00294 } 00295 00296 std::string Operator::Print() const 00297 { 00298 return "operator[ " + Feature::Print() + " ]" + ParametralFeature::Print(); 00299 } 00300 00301 bool Operator::IsIdentical( const Operator& object ) const 00302 { 00303 return Feature::IsIdentical( object ) && ParametralFeature::IsIdentical( object ); 00304 } 00305 00306 //############################################################################################################################################## 00307 // 00308 // C L A S S : OclSignature::Function <<< + Feature , + ParametralFeature 00309 // 00310 //############################################################################################################################################## 00311 00312 Function::Function( const std::string& strName, const StringVector& vecTypes ) 00313 : Feature( strName, Feature::FK_METHOD ), ParametralFeature( OclCommon::FormalParameterVector() ) 00314 { 00315 OclCommon::FormalParameterVector& vecParameters = GetParameters(); 00316 for ( unsigned int i = 0 ; i < vecTypes.size() ; i++ ) 00317 vecParameters.push_back( OclCommon::FormalParameter( vecTypes[ i ], true ) ); 00318 } 00319 00320 Function::Function( const std::string& strName, const OclCommon::FormalParameterVector& vecParameters ) 00321 : Feature( strName, Feature::FK_METHOD ), ParametralFeature( vecParameters ) 00322 { 00323 } 00324 00325 Function::~Function() 00326 { 00327 } 00328 00329 std::string Function::Print() const 00330 { 00331 return Feature::Print() + ParametralFeature::Print(); 00332 } 00333 00334 bool Function::IsIdentical( const Function& object ) const 00335 { 00336 return Feature::IsIdentical( object ) && ParametralFeature::IsIdentical( object ); 00337 } 00338 00339 00340 }; // namespace OclSignature