GME  13
OCLSignature.cpp
Go to the documentation of this file.
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