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