GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLObjectExBasic.cpp 00005 // 00006 //############################################################################################################################################### 00007 #include "StdAfx.h" 00008 #include "Solve4786.h" 00009 #include "OCLObjectExBasic.h" 00010 #include "OCLType.h" 00011 #include <algorithm> 00012 00013 namespace OclBasic 00014 { 00015 00016 //############################################################################################################################################## 00017 // 00018 // F U N C T I O N S 00019 // 00020 //############################################################################################################################################## 00021 00022 std::string PrintCollection( const std::string& strTypeName, const OclMeta::ObjectVector& vecElements ) 00023 { 00024 CString chBuffer; 00025 chBuffer.Format( _T("%lu"), vecElements.size() ); 00026 return strTypeName + " { size: " + std::string( CStringA(chBuffer) ) + "; } "; 00027 /* 00028 std::string strObject = strTypeName + " { " + std::string( chBuffer ) + " , [ "; 00029 for ( int i = 0 ; i < vecElements.size() ; i++ ) { 00030 strObject = vecElements[ i ].Print(); 00031 if ( i != vecElements.size() - 1 ) 00032 strObject += ", "; 00033 } 00034 return strObject + " ] }"; 00035 */ 00036 00037 } 00038 00039 int GetObjectCountInVector( OclMeta::ObjectVector& vecObjects, OclMeta::Object& object ) 00040 { 00041 int i = 0; 00042 OclMeta::ObjectVector::iterator j = std::find( vecObjects.begin(), vecObjects.end(), object ); 00043 while ( j != vecObjects.end() ) { 00044 i++; 00045 vecObjects.erase( j ); 00046 j = std::find( vecObjects.begin(), vecObjects.end(), object ); 00047 } 00048 return i; 00049 } 00050 00051 //############################################################################################################################################## 00052 // 00053 // C L A S S : OclBasic::String <<< + OclBasic::Any 00054 // 00055 //############################################################################################################################################## 00056 00057 String::String( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value ) 00058 : Any( pManager, strTypeName ), m_Value( value ) 00059 { 00060 } 00061 00062 00063 String::String( OclMeta::TypeManager* pManager, const std::string& value ) 00064 : Any( pManager, "ocl::String" ), m_Value( value ) 00065 { 00066 } 00067 00068 void String::GetValue( std::string& value ) const 00069 { 00070 value = m_Value; 00071 } 00072 00073 void String::SetValue( const std::string& value ) 00074 { 00075 m_Value = value; 00076 } 00077 00078 Any* String::Clone() const 00079 { 00080 return new String( GetTypeManager(), m_Value ); 00081 } 00082 00083 bool String::Equals( const Any& object ) const 00084 { 00085 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::String" ) >= 0 ) 00086 return m_Value == ( ( String* ) &object )->m_Value; 00087 else 00088 return false; 00089 } 00090 00091 bool String::operator==( const String& object ) const 00092 { 00093 return Equals( object ); 00094 } 00095 00096 bool String::operator!=( const String& object ) const 00097 { 00098 return ! ( *this == object ); 00099 } 00100 00101 std::string String::Print() const 00102 { 00103 return "ocl::String { \"" + m_Value + "\" }"; 00104 } 00105 00106 //############################################################################################################################################## 00107 // 00108 // C L A S S : OclBasic::Enumeration <<< + OclBasic::Any 00109 // 00110 //############################################################################################################################################## 00111 00112 Enumeration::Enumeration( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value ) 00113 : Any( pManager, strTypeName ), m_Value( value ) 00114 { 00115 } 00116 00117 Enumeration::Enumeration( OclMeta::TypeManager* pManager, const std::string& value ) 00118 : Any( pManager, "ocl::Enumeration" ), m_Value( value ) 00119 { 00120 } 00121 00122 void Enumeration::GetValue( std::string& value ) const 00123 { 00124 value = m_Value; 00125 } 00126 00127 void Enumeration::SetValue( const std::string& value ) 00128 { 00129 m_Value = value; 00130 } 00131 00132 Any* Enumeration::Clone() const 00133 { 00134 return new Enumeration( GetTypeManager(), m_Value ); 00135 } 00136 00137 bool Enumeration::Equals( const Any& object ) const 00138 { 00139 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Enumeration" ) >= 0 ) 00140 return m_Value == ( ( Enumeration* ) &object )->m_Value; 00141 else 00142 return false; 00143 } 00144 00145 bool Enumeration::operator==( const Enumeration& object ) const 00146 { 00147 return Equals( object ); 00148 } 00149 00150 bool Enumeration::operator!=( const Enumeration& object ) const 00151 { 00152 return ! ( *this == object ); 00153 } 00154 00155 std::string Enumeration::Print() const 00156 { 00157 return "ocl::Enumeration { #" + m_Value + " }"; 00158 } 00159 00160 //############################################################################################################################################## 00161 // 00162 // C L A S S : OclBasic::Boolean <<< + OclBasic::Any 00163 // 00164 //############################################################################################################################################## 00165 00166 Boolean::Boolean( OclMeta::TypeManager* pManager, const std::string& strTypeName, bool value ) 00167 : Any( pManager, strTypeName ), m_Value( value ) 00168 { 00169 } 00170 00171 Boolean::Boolean( OclMeta::TypeManager* pManager, bool value ) 00172 : Any( pManager, "ocl::Boolean" ), m_Value( value ) 00173 { 00174 } 00175 00176 void Boolean::GetValue( bool& value ) const 00177 { 00178 value = m_Value; 00179 } 00180 00181 void Boolean::SetValue( bool value ) 00182 { 00183 m_Value = value; 00184 } 00185 00186 Any* Boolean::Clone() const 00187 { 00188 return new Boolean( GetTypeManager(), m_Value ); 00189 } 00190 00191 bool Boolean::Equals( const Any& object ) const 00192 { 00193 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Boolean" ) >= 0 ) 00194 return m_Value == ( ( Boolean* ) &object )->m_Value; 00195 else 00196 return false; 00197 } 00198 00199 bool Boolean::operator==( const Boolean& object ) const 00200 { 00201 return Equals( object ); 00202 } 00203 00204 bool Boolean::operator!=( const Boolean& object ) const 00205 { 00206 return ! ( *this == object ); 00207 } 00208 00209 std::string Boolean::Print() const 00210 { 00211 return ( m_Value ) ? "ocl::Boolean { true }" : "ocl::Boolean { false }"; 00212 } 00213 00214 //############################################################################################################################################## 00215 // 00216 // C L A S S : OclBasic::Real <<< + OclBasic::Any 00217 // 00218 //############################################################################################################################################## 00219 00220 Real::Real( OclMeta::TypeManager* pManager, const std::string& strTypeName, double value ) 00221 : Any( pManager, strTypeName ), m_Value( value ) 00222 { 00223 } 00224 00225 Real::Real( OclMeta::TypeManager* pManager, double value ) 00226 : Any( pManager, "ocl::Real" ), m_Value( value ) 00227 { 00228 } 00229 00230 void Real::GetValue( double& value ) const 00231 { 00232 value = m_Value; 00233 } 00234 00235 void Real::SetValue( double value ) 00236 { 00237 m_Value = value; 00238 } 00239 00240 Any* Real::Clone() const 00241 { 00242 return new Real( GetTypeManager(), m_Value ); 00243 } 00244 00245 bool Real::Equals( const Any& object ) const 00246 { 00247 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Real" ) >= 0 ) { 00248 double v = ( ( Real* ) &object )->m_Value; 00249 return m_Value == v; 00250 } 00251 else 00252 return false; 00253 } 00254 00255 bool Real::operator==( const Real& object ) const 00256 { 00257 return Equals( object ); 00258 } 00259 00260 bool Real::operator!=( const Real& object ) const 00261 { 00262 return ! ( *this == object ); 00263 } 00264 00265 std::string Real::Print() const 00266 { 00267 char chBuffer[ 100 ]; 00268 sprintf_s( chBuffer, "%lf", m_Value ); 00269 return "ocl::Real { " + std::string( chBuffer ) + " }"; 00270 } 00271 00272 //############################################################################################################################################## 00273 // 00274 // C L A S S : OclBasic::Integer <<< + OclBasic::Real 00275 // 00276 //############################################################################################################################################## 00277 00278 Integer::Integer( OclMeta::TypeManager* pManager, const std::string& strTypeName, long value ) 00279 : Real( pManager, strTypeName, (double) value ) 00280 { 00281 } 00282 00283 Integer::Integer( OclMeta::TypeManager* pManager, long value ) 00284 : Real( pManager, "ocl::Integer", (double) value ) 00285 { 00286 } 00287 00288 void Integer::GetValue( long& value ) const 00289 { 00290 double dValue; 00291 Real::GetValue( dValue ); 00292 value = (long) dValue; 00293 } 00294 00295 void Integer::SetValue( long value ) 00296 { 00297 Real::SetValue( (double) value ); 00298 } 00299 00300 Any* Integer::Clone() const 00301 { 00302 long lValue; 00303 GetValue( lValue ); 00304 return new Integer( GetTypeManager(), lValue ); 00305 } 00306 00307 bool Integer::operator==( const Integer& object ) const 00308 { 00309 return Real::operator==( object ); 00310 } 00311 00312 bool Integer::operator!=( const Integer& object ) const 00313 { 00314 return ! ( *this == object ); 00315 } 00316 00317 std::string Integer::Print() const 00318 { 00319 double lValue; 00320 Real::GetValue( lValue ); 00321 char chBuffer[ 100 ]; 00322 sprintf_s( chBuffer, "%ld", (long) lValue ); 00323 return "ocl::Integer { " + std::string( chBuffer ) + " }"; 00324 } 00325 00326 //############################################################################################################################################## 00327 // 00328 // C L A S S : OclBasic::Type <<< + OclBasic::Any 00329 // 00330 //############################################################################################################################################## 00331 00332 Type::Type( OclMeta::TypeManager* pManager, const std::string& strTypeName, const std::string& value ) 00333 : Any( pManager, strTypeName ), m_Value( value ) 00334 { 00335 } 00336 00337 00338 Type::Type( OclMeta::TypeManager* pManager, const std::string& value ) 00339 : Any( pManager, "ocl::Type" ), m_Value( value ) 00340 { 00341 } 00342 00343 void Type::GetValue( std::string& value ) const 00344 { 00345 value = m_Value; 00346 } 00347 00348 void Type::SetValue( const std::string& value ) 00349 { 00350 m_Value = value; 00351 } 00352 00353 Any* Type::Clone() const 00354 { 00355 return new Type( GetTypeManager(), m_Value ); 00356 } 00357 00358 bool Type::Equals( const Any& object ) const 00359 { 00360 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Type" ) >= 0 ) 00361 return m_Value == ( ( Type* ) &object )->m_Value; 00362 else 00363 return false; 00364 } 00365 00366 bool Type::operator==( const Type& object ) const 00367 { 00368 return Equals( object ); 00369 } 00370 00371 bool Type::operator!=( const Type& object ) const 00372 { 00373 return ! ( *this == object ); 00374 } 00375 00376 std::string Type::Print() const 00377 { 00378 return "ocl::Type { \"" + m_Value + "\" }"; 00379 } 00380 00381 //############################################################################################################################################## 00382 // 00383 // C L A S S : OclBasic::ObjectIterator <<< + OclImplementation::ObjectIterator 00384 // 00385 //============================================================================================================================================== 00386 // 00387 // D E S C R I P T I O N : 00388 // 00389 //############################################################################################################################################## 00390 00391 class ObjectIterator 00392 : public OclImplementation::ObjectIterator 00393 { 00394 private : 00395 OclMeta::ObjectVector::iterator m_iteratorPos; 00396 OclMeta::ObjectVector::iterator m_iteratorEnd; 00397 00398 public : 00399 ObjectIterator( OclMeta::ObjectVector::iterator iteratorBegin, OclMeta::ObjectVector::iterator iteratorEnd ) 00400 : OclImplementation::ObjectIterator(), m_iteratorPos( iteratorBegin ), m_iteratorEnd( iteratorEnd ) 00401 { 00402 } 00403 00404 virtual ~ObjectIterator() 00405 { 00406 } 00407 00408 virtual bool HasNext() 00409 { 00410 return m_iteratorPos != m_iteratorEnd; 00411 } 00412 00413 virtual OclMeta::Object GetNext() 00414 { 00415 return *( m_iteratorPos++ ); 00416 } 00417 }; 00418 00419 //############################################################################################################################################## 00420 // 00421 // C L A S S : OclBasic::Set <<< + OclBasic::Collection 00422 // 00423 //############################################################################################################################################## 00424 00425 Set::Set( OclMeta::TypeManager* pManager, const std::string& strTypeName ) 00426 : Collection( pManager, strTypeName ) 00427 { 00428 } 00429 00430 Set::Set( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects ) 00431 : Collection( pManager, strTypeName ) 00432 { 00433 for ( unsigned int i = 0 ; i < vecObjects.size() ; i++ ) 00434 AddObject( vecObjects[ i ] ); 00435 } 00436 00437 Set::Set( OclMeta::TypeManager* pManager ) 00438 : Collection( pManager, "ocl::Set" ) 00439 { 00440 } 00441 00442 Set::Set( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects ) 00443 : Collection( pManager, "ocl::Set" ) 00444 { 00445 for ( unsigned int i = 0 ; i < vecObjects.size() ; i++ ) 00446 AddObject( vecObjects[ i ] ); 00447 } 00448 00449 Any* Set::Clone() const 00450 { 00451 return new Set( GetTypeManager(), m_vecObjects ); 00452 } 00453 00454 void Set::GetValue( OclMeta::ObjectVector& value ) const 00455 { 00456 value = m_vecObjects; 00457 } 00458 00459 void Set::SetValue( const OclMeta::ObjectVector& value ) 00460 { 00461 for ( unsigned int i = 0 ; i < value.size() ; i++ ) 00462 AddObject( value[ i ] ); 00463 } 00464 00465 bool Set::Equals( const Any& object ) const 00466 { 00467 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Set" ) >= 0 ) { 00468 OclMeta::ObjectVector vecObjects = ( ( Set* ) &object )->m_vecObjects; 00469 if ( m_vecObjects.size() != vecObjects.size() ) 00470 return false; 00471 for ( unsigned int i = 0 ; i < m_vecObjects.size() ; i++ ) 00472 if ( std::find( vecObjects.begin(), vecObjects.end(), m_vecObjects[ i ] ) == vecObjects.end() ) 00473 return false; 00474 return true; 00475 } 00476 else 00477 return false; 00478 } 00479 00480 bool Set::operator==( const Set& object ) const 00481 { 00482 return Equals( object ); 00483 } 00484 00485 bool Set::operator!=( const Set& object ) const 00486 { 00487 return ! ( *this == object ); 00488 } 00489 00490 void Set::AddObject( const OclMeta::Object& object ) 00491 { 00492 OclMeta::ObjectVector::iterator i = std::find( m_vecObjects.begin(), m_vecObjects.end(), object ); 00493 if ( i == m_vecObjects.end() ) 00494 m_vecObjects.push_back( object ); 00495 } 00496 00497 OclImplementation::ObjectIterator* Set::GetIterator() 00498 { 00499 return new ObjectIterator( m_vecObjects.begin(), m_vecObjects.end() ); 00500 } 00501 00502 std::string Set::Print() const 00503 { 00504 return PrintCollection( GetTypeName(), m_vecObjects ); 00505 } 00506 00507 //############################################################################################################################################## 00508 // 00509 // C L A S S : OclBasic::Bag <<< + OclBasic::Collection 00510 // 00511 //############################################################################################################################################## 00512 00513 Bag::Bag( OclMeta::TypeManager* pManager, const std::string& strTypeName ) 00514 : Collection( pManager, strTypeName ) 00515 { 00516 } 00517 00518 Bag::Bag( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects ) 00519 : Collection( pManager, strTypeName ) 00520 { 00521 m_vecObjects = vecObjects; 00522 } 00523 00524 Bag::Bag( OclMeta::TypeManager* pManager ) 00525 : Collection( pManager, "ocl::Bag" ) 00526 { 00527 } 00528 00529 Bag::Bag( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects ) 00530 : Collection( pManager, "ocl::Bag" ) 00531 { 00532 m_vecObjects = vecObjects; 00533 } 00534 00535 Any* Bag::Clone() const 00536 { 00537 return new Bag( GetTypeManager(), m_vecObjects ); 00538 } 00539 00540 void Bag::GetValue( OclMeta::ObjectVector& value ) const 00541 { 00542 value = m_vecObjects; 00543 } 00544 00545 void Bag::SetValue( const OclMeta::ObjectVector& value ) 00546 { 00547 m_vecObjects = value; 00548 } 00549 00550 bool Bag::Equals( const Any& object ) const 00551 { 00552 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Bag" ) >= 0 ) { 00553 OclMeta::ObjectVector vecObjects2 = ( ( Bag* ) &object )->m_vecObjects; 00554 if ( m_vecObjects.size() != vecObjects2.size() ) 00555 return false; 00556 00557 OclMeta::ObjectVector vecObjects1 = m_vecObjects; 00558 00559 OclMeta::ObjectVector::iterator i = vecObjects1.begin(); 00560 while ( i != vecObjects1.end() ) { 00561 OclMeta::Object o = *i; 00562 vecObjects1.erase( i ); 00563 if ( GetObjectCountInVector( vecObjects1, o ) + 1 != GetObjectCountInVector( vecObjects2, o ) ) 00564 return false; 00565 i = vecObjects1.begin(); 00566 } 00567 return true; 00568 } 00569 else 00570 return false; 00571 } 00572 00573 bool Bag::operator==( const Bag& object ) const 00574 { 00575 return Equals( object ); 00576 } 00577 00578 bool Bag::operator!=( const Bag& object ) const 00579 { 00580 return ! ( *this == object ); 00581 } 00582 00583 void Bag::AddObject( const OclMeta::Object& object ) 00584 { 00585 m_vecObjects.push_back( object ); 00586 } 00587 00588 OclImplementation::ObjectIterator* Bag::GetIterator() 00589 { 00590 return new ObjectIterator( m_vecObjects.begin(), m_vecObjects.end() ); 00591 } 00592 00593 std::string Bag::Print() const 00594 { 00595 return PrintCollection( GetTypeName(), m_vecObjects ); 00596 } 00597 00598 //############################################################################################################################################## 00599 // 00600 // C L A S S : OclBasic::Sequence <<< + OclBasic::Collection 00601 // 00602 //############################################################################################################################################## 00603 00604 Sequence::Sequence( OclMeta::TypeManager* pManager, const std::string& strTypeName ) 00605 : Collection( pManager, strTypeName ) 00606 { 00607 } 00608 00609 Sequence::Sequence( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects ) 00610 : Collection( pManager, strTypeName ) 00611 { 00612 m_vecObjects = vecObjects; 00613 } 00614 00615 Sequence::Sequence( OclMeta::TypeManager* pManager ) 00616 : Collection( pManager, "ocl::Sequence" ) 00617 { 00618 } 00619 00620 Sequence::Sequence( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects ) 00621 : Collection( pManager, "ocl::Sequence" ) 00622 { 00623 m_vecObjects = vecObjects; 00624 } 00625 00626 Any* Sequence::Clone() const 00627 { 00628 return new Sequence( GetTypeManager(), m_vecObjects ); 00629 } 00630 00631 void Sequence::GetValue( OclMeta::ObjectVector& value ) const 00632 { 00633 value = m_vecObjects; 00634 } 00635 00636 void Sequence::SetValue( const OclMeta::ObjectVector& value ) 00637 { 00638 m_vecObjects = value; 00639 } 00640 00641 bool Sequence::Equals( const Any& object ) const 00642 { 00643 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::Sequence" ) >= 0 ) 00644 return m_vecObjects == ( ( Sequence* ) &object )->m_vecObjects; 00645 else 00646 return false; 00647 } 00648 00649 bool Sequence::operator==( const Sequence& object ) const 00650 { 00651 return Equals( object ); 00652 } 00653 00654 bool Sequence::operator!=( const Sequence& object ) const 00655 { 00656 return ! ( *this == object ); 00657 } 00658 00659 void Sequence::AddObject( const OclMeta::Object& object ) 00660 { 00661 m_vecObjects.push_back( object ); 00662 } 00663 00664 OclImplementation::ObjectIterator* Sequence::GetIterator() 00665 { 00666 return new ObjectIterator( m_vecObjects.begin(), m_vecObjects.end() ); 00667 } 00668 00669 std::string Sequence::Print() const 00670 { 00671 return PrintCollection( GetTypeName(), m_vecObjects ); 00672 } 00673 00674 //############################################################################################################################################## 00675 // 00676 // C L A S S : OclBasic::OrderedSet <<< + OclBasic::Collection 00677 // 00678 //############################################################################################################################################## 00679 00680 OrderedSet::OrderedSet( OclMeta::TypeManager* pManager, const std::string& strTypeName ) 00681 : Set( pManager, strTypeName ) 00682 { 00683 m_pArgNode = NULL; 00684 } 00685 00686 OrderedSet::OrderedSet( OclMeta::TypeManager* pManager, const std::string& strTypeName, const OclMeta::ObjectVector& vecObjects ) 00687 : Set( pManager, strTypeName ) 00688 { 00689 for ( unsigned int i = 0 ; i < vecObjects.size() ; i++ ) 00690 AddObject( vecObjects[ i ] ); 00691 m_pArgNode = NULL; 00692 } 00693 00694 OrderedSet::OrderedSet( OclMeta::TypeManager* pManager ) 00695 : Set( pManager, "ocl::OrderedSet" ) 00696 { 00697 m_pArgNode = NULL; 00698 } 00699 00700 OrderedSet::OrderedSet( OclMeta::TypeManager* pManager, const OclMeta::ObjectVector& vecObjects ) 00701 : Set( pManager, "ocl::OrderedSet" ) 00702 { 00703 for ( unsigned int i = 0 ; i < vecObjects.size() ; i++ ) 00704 AddObject( vecObjects[ i ] ); 00705 m_pArgNode = NULL; 00706 } 00707 00708 Any* OrderedSet::Clone() const 00709 { 00710 return new OrderedSet( GetTypeManager(), m_vecObjects ); 00711 } 00712 00713 void OrderedSet::GetValue( OclMeta::ObjectVector& value ) const 00714 { 00715 value = m_vecObjects; 00716 } 00717 00718 void OrderedSet::SetValue( const OclMeta::ObjectVector& value ) 00719 { 00720 for ( unsigned int i = 0 ; i < value.size() ; i++ ) 00721 AddObject( value[ i ] ); 00722 } 00723 00724 bool OrderedSet::Equals( const Any& object ) const 00725 { 00726 if ( GetTypeManager()->IsTypeA( object.GetTypeName(), "ocl::OrderedSet" ) >= 0 ) { 00727 OclMeta::ObjectVector vecObjects = ( ( OrderedSet* ) &object )->m_vecObjects; 00728 if ( m_vecObjects.size() != vecObjects.size() ) 00729 return false; 00730 for ( unsigned int i = 0 ; i < m_vecObjects.size() ; i++ ) 00731 { 00732 if ( m_vecObjects[ i ] != vecObjects[ i ] ) 00733 return false; 00734 } 00735 return true; 00736 } 00737 else 00738 return false; 00739 } 00740 00741 bool OrderedSet::operator==( const OrderedSet& object ) const 00742 { 00743 return Equals( object ); 00744 } 00745 00746 bool OrderedSet::operator!=( const OrderedSet& object ) const 00747 { 00748 return ! ( *this == object ); 00749 } 00750 00751 void OrderedSet::AddObject( const OclMeta::Object& object ) 00752 { 00753 OclMeta::ObjectVector::iterator i = std::find( m_vecObjects.begin(), m_vecObjects.end(), object ); 00754 if ( i == m_vecObjects.end() ) 00755 m_vecObjects.push_back( object ); 00756 } 00757 00758 OclImplementation::ObjectIterator* OrderedSet::GetIterator() 00759 { 00760 return new ObjectIterator( m_vecObjects.begin(), m_vecObjects.end() ); 00761 } 00762 00763 std::string OrderedSet::Print() const 00764 { 00765 return PrintCollection( GetTypeName(), m_vecObjects ); 00766 } 00767 00768 }; // namespace OclBasic