GME
13
|
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