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