GME  13
OCLObjectExBasic.h
Go to the documentation of this file.
00001 //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      OCLObjectExBasic.h
00005 //
00006 //###############################################################################################################################################
00007 
00008 #ifndef OCLObjectExBasic_h
00009 #define OCLObjectExBasic_h
00010 
00011 #include "StdAfx.h"
00012 #include "OCLCommon.h"
00013 #include "OCLObject.h"
00014 
00015         #define CREATE_BOOLEAN( pManager, bValue )      \
00016                 OclMeta::Object( new OclBasic::Boolean( pManager, bValue ) )
00017 
00018         #define CREATE_STRING( pManager, strValue )     \
00019                 OclMeta::Object( new OclBasic::String( pManager, strValue ) )
00020 
00021         #define CREATE_ENUMERATION( pManager, eValue )  \
00022                 OclMeta::Object( new OclBasic::Enumeration( pManager, eValue ) )
00023 
00024         #define CREATE_REAL( pManager, dValue ) \
00025                 OclMeta::Object( new OclBasic::Real( pManager, dValue ) )
00026 
00027         #define CREATE_INTEGER( pManager, lValue )      \
00028                 OclMeta::Object( new OclBasic::Integer( pManager, lValue ) )
00029 
00030         #define CREATE_TYPE( pManager, lValue ) \
00031                 OclMeta::Object( new OclBasic::Type( pManager, lValue ) )
00032 
00033         #define DECL_BOOLEAN( varName, var2Name )                       \
00034                 bool varName = false;                                                                   \
00035                 if ( ! var2Name.IsUndefined() )                 \
00036                         ( ( OclBasic::Boolean* ) var2Name.GetImplementation() )->GetValue( varName )
00037 
00038         #define DECL_STRING( varName, var2Name )                        \
00039                 std::string varName;                                                                            \
00040                 if ( ! var2Name.IsUndefined() )                 \
00041                         ( ( OclBasic::String* ) var2Name.GetImplementation() )->GetValue( varName )
00042 
00043         #define DECL_ENUMERATION( varName, var2Name )                   \
00044                 std::string varName;                                                                                    \
00045                 if ( ! var2Name.IsUndefined() )                 \
00046                         ( ( OclBasic::Enumeration* ) var2Name.GetImplementation() )->GetValue( varName )
00047 
00048         #define DECL_REAL( varName, var2Name )                  \
00049                 double varName = 0.0;                                                                           \
00050                 if ( ! var2Name.IsUndefined() )                 \
00051                         ( ( OclBasic::Real* ) var2Name.GetImplementation() )->GetValue( varName )
00052 
00053         #define DECL_INTEGER( varName, var2Name )                       \
00054                 long varName = 0;                                                                                       \
00055                 if ( ! var2Name.IsUndefined() )                 \
00056                         ( ( OclBasic::Integer* ) var2Name.GetImplementation() )->GetValue( varName )
00057 
00058         #define DECL_TYPE( varName, var2Name )                  \
00059                 std::string varName;                                                                            \
00060                 if ( ! var2Name.IsUndefined() )                 \
00061                         ( ( OclBasic::Type* ) var2Name.GetImplementation() )->GetValue( varName )
00062 
00063         #define DECL_BOOLEAN2( varName, var2Name )                      \
00064                 if ( ! var2Name.IsUndefined() )                 \
00065                         ( ( OclBasic::Boolean* ) var2Name.GetImplementation() )->GetValue( varName )
00066 
00067         #define DECL_STRING2( varName, var2Name )                       \
00068                 if ( ! var2Name.IsUndefined() )                 \
00069                         ( ( OclBasic::String* ) var2Name.GetImplementation() )->GetValue( varName )
00070 
00071         #define DECL_ENUMERATION2( varName, var2Name )                  \
00072                 if ( ! var2Name.IsUndefined() )                 \
00073                         ( ( OclBasic::Enumeration* ) var2Name.GetImplementation() )->GetValue( varName )
00074 
00075         #define DECL_REAL2( varName, var2Name )                 \
00076                 if ( ! var2Name.IsUndefined() )                 \
00077                         ( ( OclBasic::Real* ) var2Name.GetImplementation() )->GetValue( varName )
00078 
00079         #define DECL_INTEGER2( varName, var2Name )                      \
00080                 if ( ! var2Name.IsUndefined() )                 \
00081                         ( ( OclBasic::Integer* ) var2Name.GetImplementation() )->GetValue( varName )
00082 
00083         #define DECL_TYPE2( varName, var2Name )                 \
00084                 if ( ! var2Name.IsUndefined() )                 \
00085                         ( ( OclBasic::Type* ) var2Name.GetImplementation() )->GetValue( varName )
00086 
00087         #define CREATE_SET( pManager, setValue )        \
00088                 OclMeta::Object( new OclBasic::Set( pManager, setValue ) )
00089 
00090         #define CREATE_SEQUENCE( pManager, seqValue )   \
00091                 OclMeta::Object( new OclBasic::Sequence( pManager, seqValue ) )
00092 
00093         #define CREATE_BAG( pManager, bagValue )        \
00094                 OclMeta::Object( new OclBasic::Bag( pManager, bagValue ) )
00095 
00096         #define CREATE_ORDEREDSET( pManager, osetValue )        \
00097                 OclMeta::Object( new OclBasic::OrderedSet( pManager, osetValue ) )
00098 
00099         #define DECL_COLLECTION( varName, var2Name )    \
00100                 OclMeta::ObjectVector varName;  \
00101                 if ( ! var2Name.IsUndefined() ) {               \
00102                         if ( var2Name.GetTypeName() == "ocl::Set" )      \
00103                                 ( ( OclBasic::Set* ) var2Name.GetImplementation() )->GetValue( varName );       \
00104                         else if ( var2Name.GetTypeName() == "ocl::Bag" )        \
00105                                 ( ( OclBasic::Bag* ) var2Name.GetImplementation() )->GetValue( varName );       \
00106                         else if ( var2Name.GetTypeName() == "ocl::Sequence" )   \
00107                                 ( ( OclBasic::Sequence* ) var2Name.GetImplementation() )->GetValue( varName );  \
00108                         else \
00109                                 ( ( OclBasic::OrderedSet* ) var2Name.GetImplementation() )->GetValue( varName ); \
00110                 } 
00111 
00112         #define DECL_COLLECTION2( varName, var2Name )   \
00113                 if ( ! var2Name.IsUndefined() ) {               \
00114                         if ( var2Name.GetTypeName() == "ocl::Set" )     \
00115                                 ( ( OclBasic::Set* ) var2Name.GetImplementation() )->GetValue( varName );       \
00116                         else if ( var2Name.GetTypeName() == "ocl::Bag" )        \
00117                                 ( ( OclBasic::Bag* ) var2Name.GetImplementation() )->GetValue( varName );       \
00118                         else if ( var2Name.GetTypeName() == "ocl::Sequence" )   \
00119                                 ( ( OclBasic::Sequence* ) var2Name.GetImplementation() )->GetValue( varName );  \
00120                         else \
00121                                 ( ( OclBasic::OrderedSet* ) var2Name.GetImplementation() )->GetValue( varName );        \
00122                 }
00123 
00124         #define DECL_ITERATOR( varName, var2Name )      \
00125                 OclCommon::Smart< OclImplementation::ObjectIterator > varName( ( (OclImplementation::CompoundObject*) var2Name.GetImplementation() )->GetIterator() )
00126 
00127 namespace OclMeta
00128 {
00129         class TypeManager;
00130 };
00131 
00132 namespace OclBasic
00133 {
00134 
00135 //##############################################################################################################################################
00136 //
00137 //      C L A S S : OclBasic::Any = OclImplementation::Object
00138 //
00139 //==============================================================================================================================================
00140 //
00141 //      D E S C R I P T I O N :
00142 //
00143 //##############################################################################################################################################
00144 
00145         typedef OclImplementation::Object Any;
00146 
00147 //##############################################################################################################################################
00148 //
00149 //      C L A S S : OclBasic::String <<< + OclBasic::Any
00150 //
00151 //==============================================================================================================================================
00152 //
00153 //      D E S C R I P T I O N :
00154 //
00155 //##############################################################################################################################################
00156 
00157         class String
00158                 : public Any
00159         {
00160                 private :
00161                         std::string m_Value;
00162 
00163                 protected :
00164                         String( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value );
00165                 public :
00166                         String( OclMeta::TypeManager* pManager, const std::string& value );
00167                         virtual Any* Clone() const;
00168 
00169                         void GetValue( std::string& value ) const;
00170                         void SetValue( const std::string& value );
00171 
00172                         virtual bool Equals( const Any& object ) const;
00173                         bool operator==( const String& object ) const;
00174                         bool operator!=( const String& object ) const;
00175 
00176                         virtual std::string Print() const;
00177         };
00178 
00179 //##############################################################################################################################################
00180 //
00181 //      C L A S S : OclBasic::Enumeration <<< + OclBasic::Any
00182 //
00183 //==============================================================================================================================================
00184 //
00185 //      D E S C R I P T I O N :
00186 //
00187 //##############################################################################################################################################
00188 
00189         class Enumeration
00190                 : public Any
00191         {
00192                 private :
00193                         std::string m_Value;
00194 
00195 
00196                 protected :
00197                         Enumeration( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value );
00198                 public :
00199                         Enumeration( OclMeta::TypeManager* pManager, const std::string& value );
00200                         virtual Any* Clone() const;
00201 
00202                         void GetValue( std::string& value ) const;
00203                         void SetValue( const std::string& value );
00204 
00205                         virtual bool Equals( const Any& object ) const;
00206                         bool operator==( const Enumeration& object ) const;
00207                         bool operator!=( const Enumeration& object ) const;
00208 
00209                         virtual std::string Print() const;
00210         };
00211 
00212 //##############################################################################################################################################
00213 //
00214 //      C L A S S : OclBasic::Boolean <<< + OclBasic::Any
00215 //
00216 //==============================================================================================================================================
00217 //
00218 //      D E S C R I P T I O N :
00219 //
00220 //##############################################################################################################################################
00221 
00222         class Boolean
00223                 : public Any
00224         {
00225                 private :
00226                         bool m_Value;
00227 
00228                 protected :
00229                         Boolean( OclMeta::TypeManager* pManager, const std::string& strTypeName, bool value );
00230                 public :
00231                         Boolean( OclMeta::TypeManager* pManager, bool value );
00232                         virtual Any* Clone() const;
00233 
00234                         void GetValue( bool& value ) const;
00235                         void SetValue( bool value );
00236 
00237                         virtual bool Equals( const Any& object ) const;
00238                         bool operator==( const Boolean& object ) const;
00239                         bool operator!=( const Boolean& object ) const;
00240 
00241                         virtual std::string Print() const;
00242         };
00243 
00244 //##############################################################################################################################################
00245 //
00246 //      C L A S S : OclBasic::Real <<< + OclBasic::Any
00247 //
00248 //==============================================================================================================================================
00249 //
00250 //      D E S C R I P T I O N :
00251 //
00252 //##############################################################################################################################################
00253 
00254         class Real
00255                 : public Any
00256         {
00257                 private :
00258                         double m_Value;
00259 
00260                 protected :
00261                         Real( OclMeta::TypeManager* pManager, const std::string& strTypeName, double value );
00262                 public :
00263                         Real( OclMeta::TypeManager* pManager, double value );
00264                         virtual Any* Clone() const;
00265 
00266                         void GetValue( double& value ) const;
00267                         void SetValue( double value );
00268 
00269                         virtual bool Equals( const Any& object ) const;
00270                         bool operator==( const Real& object ) const;
00271                         bool operator!=( const Real& object ) const;
00272 
00273                         virtual std::string Print() const;
00274         };
00275 
00276 //##############################################################################################################################################
00277 //
00278 //      C L A S S : OclBasic::Integer <<< + OclBasic::Real
00279 //
00280 //==============================================================================================================================================
00281 //
00282 //      D E S C R I P T I O N :
00283 //
00284 //##############################################################################################################################################
00285 
00286         class Integer
00287                 : public Real
00288         {
00289                 protected :
00290                         Integer( OclMeta::TypeManager* pManager, const std::string& strTypeName, long value );
00291                 public :
00292                         Integer( OclMeta::TypeManager* pManager, long value );
00293                         virtual Any* Clone() const;
00294 
00295                         void GetValue( long& value ) const;
00296                         void SetValue( long value );
00297 
00298                         bool operator==( const Integer& object ) const;
00299                         bool operator!=( const Integer& object ) const;
00300 
00301                         virtual std::string Print() const;
00302         };
00303 
00304 //##############################################################################################################################################
00305 //
00306 //      C L A S S : OclBasic::Type <<< + OclBasic::Any
00307 //
00308 //==============================================================================================================================================
00309 //
00310 //      D E S C R I P T I O N :
00311 //
00312 //##############################################################################################################################################
00313 
00314         class Type
00315                 : public Any
00316         {
00317                 private :
00318                         std::string m_Value;
00319 
00320                 protected :
00321                         Type( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value );
00322                 public :
00323                         Type( OclMeta::TypeManager* pManager, const std::string& value );
00324                         virtual Any* Clone() const;
00325 
00326                         void GetValue( std::string& value ) const;
00327                         void SetValue( const std::string& value );
00328 
00329                         virtual bool Equals( const Any& object ) const;
00330                         bool operator==( const Type& object ) const;
00331                         bool operator!=( const Type& object ) const;
00332 
00333                         virtual std::string Print() const;
00334         };
00335 
00336 //##############################################################################################################################################
00337 //
00338 //      C L A S S : OclBasic::Collection = OclImplementation::CompoundObject
00339 //
00340 //==============================================================================================================================================
00341 //
00342 //      D E S C R I P T I O N :
00343 //
00344 //##############################################################################################################################################
00345 
00346         typedef OclImplementation::CompoundObject Collection;
00347 
00348 //##############################################################################################################################################
00349 //
00350 //      C L A S S : OclBasic::Set <<< + OclBasic::Collection
00351 //
00352 //==============================================================================================================================================
00353 //
00354 //      D E S C R I P T I O N :
00355 //
00356 //##############################################################################################################################################
00357 
00358         class Set
00359                 : public Collection
00360         {
00361                 private :
00362                         OclMeta::ObjectVector   m_vecObjects;
00363 
00364                 protected :
00365                         Set( OclMeta::TypeManager* pManager, const std::string& strTypeName );
00366                         Set( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects );
00367                 public :
00368                         Set( OclMeta::TypeManager* pManager );
00369                         Set( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects );
00370                         virtual Any* Clone() const;
00371 
00372                         void GetValue( OclMeta::ObjectVector& value ) const;
00373                         void SetValue( const OclMeta::ObjectVector& value );
00374 
00375                         virtual bool Equals( const Any& object ) const;
00376                         bool operator==( const Set& object ) const;
00377                         bool operator!=( const Set& object ) const;
00378 
00379                         virtual void AddObject( const OclMeta::Object& object );
00380                         virtual OclImplementation::ObjectIterator* GetIterator();
00381 
00382                         virtual std::string Print() const;
00383         };
00384 
00385 //##############################################################################################################################################
00386 //
00387 //      C L A S S : OclBasic::Bag <<< + OclBasic::Collection
00388 //
00389 //==============================================================================================================================================
00390 //
00391 //      D E S C R I P T I O N :
00392 //
00393 //##############################################################################################################################################
00394 
00395         class Bag
00396                 : public Collection
00397         {
00398                 private :
00399                         OclMeta::ObjectVector   m_vecObjects;
00400 
00401                 protected :
00402                         Bag( OclMeta::TypeManager* pManager, const std::string& strTypeName );
00403                         Bag( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects );
00404                 public :
00405                         Bag( OclMeta::TypeManager* pManager );
00406                         Bag( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects );
00407                         virtual Any* Clone() const;
00408 
00409                         void GetValue( OclMeta::ObjectVector& value ) const;
00410                         void SetValue( const OclMeta::ObjectVector& value );
00411 
00412                         virtual bool Equals( const Any& object ) const;
00413                         bool operator==( const Bag& object ) const;
00414                         bool operator!=( const Bag& object ) const;
00415 
00416                         virtual void AddObject( const OclMeta::Object& object );
00417                         virtual OclImplementation::ObjectIterator* GetIterator();
00418 
00419                         virtual std::string Print() const;
00420         };
00421 
00422 //##############################################################################################################################################
00423 //
00424 //      C L A S S : OclBasic::Sequence <<< + OclBasic::Collection
00425 //
00426 //==============================================================================================================================================
00427 //
00428 //      D E S C R I P T I O N :
00429 //
00430 //##############################################################################################################################################
00431 
00432         class Sequence
00433                 : public Collection
00434         {
00435                 private :
00436                         OclMeta::ObjectVector   m_vecObjects;
00437 
00438                 protected :
00439                         Sequence( OclMeta::TypeManager* pManager, const std::string& strTypeName );
00440                         Sequence( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects );
00441                 public :
00442                         Sequence( OclMeta::TypeManager* pManager );
00443                         Sequence( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects );
00444                         virtual Any* Clone() const;
00445 
00446                         void GetValue( OclMeta::ObjectVector& value ) const;
00447                         void SetValue( const OclMeta::ObjectVector& value );
00448 
00449                         virtual bool Equals( const Any& object ) const;
00450                         bool operator==( const Sequence& object ) const;
00451                         bool operator!=( const Sequence& object ) const;
00452 
00453                         virtual void AddObject( const OclMeta::Object& object );
00454                         virtual OclImplementation::ObjectIterator* GetIterator();
00455 
00456                         virtual std::string Print() const;
00457         };
00458 
00459 //##############################################################################################################################################
00460 //
00461 //      C L A S S : OclBasic::OrderedSet <<< + OclBasic::Collection
00462 //
00463 //==============================================================================================================================================
00464 //
00465 //      D E S C R I P T I O N :
00466 //
00467 //##############################################################################################################################################
00468 
00469         class OrderedSet
00470                 : public Set
00471         {
00472                 private :
00473                         OclMeta::ObjectVector   m_vecObjects;
00474                         void * m_pArgNode;
00475 
00476                 protected :
00477                         OrderedSet( OclMeta::TypeManager* pManager, const std::string& strTypeName );
00478                         OrderedSet( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects );
00479                 public :
00480                         OrderedSet( OclMeta::TypeManager* pManager );
00481                         OrderedSet( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects );
00482                         virtual Any* Clone() const;
00483 
00484                         void GetValue( OclMeta::ObjectVector& value ) const;
00485                         void SetValue( const OclMeta::ObjectVector& value );
00486 
00487 //                      void SetArgNode(void *arg);
00488 //                      void GetArgNode(void * &arg);
00489 
00490                         virtual bool Equals( const Any& object ) const;
00491                         bool operator==( const OrderedSet& object ) const;
00492                         bool operator!=( const OrderedSet& object ) const;
00493 
00494                         virtual void AddObject( const OclMeta::Object& object );
00495                         virtual OclImplementation::ObjectIterator* GetIterator();
00496 
00497                         virtual std::string Print() const;
00498         };
00499 
00500 }; // namespace OclBasic
00501 
00502 #endif // OCLObjectExBasic
00503