00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef Extensions_h
00023 #define Extensions_h
00024
00025 #pragma warning ( disable : 4503 )
00026 #pragma warning ( disable : 4250 ) // Dominant Inhertiance Methods
00027
00028 #include "BON.h"
00029 #include <map>
00030
00031 namespace BON
00032 {
00033 struct ExtensionsCleanup;
00034
00035 enum ExtensionType {EXT_None = 0, EXT_MetaKind = 1, EXT_Kind = 2, EXT_Role = 3};
00036 typedef std::pair<ExtensionType,int> ExtensionInfo;
00037
00038
00039 void splitKinds( const std::string& strKinds, std::vector<std::string>& vecKinds );
00040
00041 ObjectImpl* castObjectImpl( ObjectImpl* pObject, const std::string& strBEType, ObjectType eType, const std::vector<std::string>& vecKinds, const std::vector<std::string>& vecDerivedKinds );
00042 ExtensionType castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole, const std::string& strBEType, ObjectType eType, const std::vector<std::string>& vecKinds );
00043
00044 void mergeTypes( const std::string& strType1, ObjectType eType1, const std::string& strType2, ObjectType eType2, std::string& strType, ObjectType& eType );
00045
00046 template <class TBON,class TUserI> class Extension;
00047 template <class TBON1,class TBON2,class TUserI> class Extension2;
00048 template <class TBON1,class TBON2,class TBON3,class TUserI> class Extension3;
00049 template <class TBON1,class TBON2,class TBON3,class TBON4,class TUserI> class Extension4;
00050 template <class TBON1,class TBON2,class TBON3,class TBON4,class TBON5,class TUserI> class Extension5;
00051 template <class TBON1,class TBON2,class TBON3,class TBON4,class TBON5,class TBON6,class TUserI> class Extension6;
00052
00053 class ExtensionManager;
00054
00055 #define DECLARE_BONEXTENSION( TBON, TUserI, TUser ) \
00056 class TUserI; \
00057 typedef BON::Extension<TBON,TUserI> TUser;
00058
00059 #define DECLARE_BONEXTENSION2( TBON1, TBON2, TUserI, TUser ) \
00060 class TUserI; \
00061 typedef BON::Extension2<TBON1,TBON2,TUserI> TUser;
00062
00063 #define DECLARE_BONEXTENSION3( TBON1, TBON2, TBON3, TUserI, TUser ) \
00064 class TUserI; \
00065 typedef BON::Extension3<TBON1,TBON2,TBON3,TUserI> TUser;
00066
00067 #define DECLARE_BONEXTENSION4( TBON1, TBON2, TBON3, TBON4, TUserI, TUser ) \
00068 class TUserI; \
00069 typedef BON::Extension4<TBON1,TBON2,TBON3, TBON4, TUserI> TUser;
00070
00071 #define DECLARE_BONEXTENSION5( TBON1, TBON2, TBON3, TBON4, TBON5, TUserI, TUser ) \
00072 class TUserI; \
00073 typedef BON::Extension5<TBON1,TBON2,TBON3, TBON4, TBON5, TUserI> TUser;
00074
00075 #define DECLARE_BONEXTENSION6( TBON1, TBON2, TBON3, TBON4, TBON5, TBON6, TUserI, TUser ) \
00076 class TUserI; \
00077 typedef BON::Extension6<TBON1,TBON2,TBON3, TBON4, TBON5, TBON6, TUserI> TUser;
00078
00079 #define DECLARE_ABSTRACT_BONEXTENSION( TBON, TUserI, TUser ) \
00080 class TUserI; \
00081 typedef BON::ExtensionA<TBON,TUserI> TUser;
00082
00083 #define DECLARE_ABSTRACT_BONEXTENSION2( TBON1, TBON2, TUserI, TUser ) \
00084 class TUserI; \
00085 typedef BON::ExtensionA2<TBON1,TBON2,TUserI> TUser;
00086
00087 #define DECLARE_ABSTRACT_BONEXTENSION3( TBON1, TBON2, TBON3, TUserI, TUser ) \
00088 class TUserI; \
00089 typedef BON::ExtensionA3<TBON1,TBON2,TBON3,TUserI> TUser;
00090
00091 #define DECLARE_ABSTRACT_BONEXTENSION4( TBON1, TBON2, TBON3, TBON4, TUserI, TUser ) \
00092 class TUserI; \
00093 typedef BON::ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI> TUser;
00094
00095 #define DECLARE_ABSTRACT_BONEXTENSION5( TBON1, TBON2, TBON3, TBON4, TBON5, TUserI, TUser ) \
00096 class TUserI; \
00097 typedef BON::ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI> TUser;
00098
00099 #define DECLARE_ABSTRACT_BONEXTENSION6( TBON1, TBON2, TBON3, TBON4, TBON5, TBON6, TUserI, TUser ) \
00100 class TUserI; \
00101 typedef BON::ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI> TUser;
00102
00103 #define IMPLEMENT_BONEXTENSIONBASE( TUser, SKinds ) \
00104 int TUser::inheritance_level = 0; \
00105 std::string TUser::string_type; \
00106 BON::ObjectType TUser::type = BON::OT_Null; \
00107 std::vector<std::string> TUser::vecKinds = TUser::setKinds( SKinds ); \
00108 std::vector<std::string> TUser::vecDerivedKinds; \
00109 const BON::ExtensionManager TUser::extensionFactory = BON::ExtensionManager( TUser::vecKinds, TUser::castImpl, TUser::createImpl );
00110
00111 #define IMPLEMENT_BONEXTENSION( TUser, SKinds ) \
00112 IMPLEMENT_BONEXTENSIONBASE( TUser, SKinds )
00113
00114 #define IMPLEMENT_ABSTRACT_BONEXTENSION( TUser ) \
00115 IMPLEMENT_BONEXTENSIONBASE( TUser, "" )
00116
00117
00118
00119
00120
00121
00122
00123 class ExtensionManager
00124 {
00125
00126 public :
00127 typedef ObjectImpl* (*CreateFunction)();
00128 typedef ExtensionInfo (*CastFunction)( ObjectType eType, const std::string& strKind, const std::string& strRole );
00129
00130 typedef std::pair<CastFunction,CreateFunction> FunctionPair;
00131 typedef std::vector<FunctionPair> FunctionVector;
00132
00133
00134 private :
00135 static FunctionVector* _vecKindFunctions;
00136 static int _vecKindFunctions_refCnt;
00137
00138
00139 public :
00140 ExtensionManager( const std::vector<std::string>& vecKinds, CastFunction pFnCast, CreateFunction pFnCreate );
00141 ~ExtensionManager()
00142 {
00143 if (! --_vecKindFunctions_refCnt) {
00144 delete _vecKindFunctions;
00145 _vecKindFunctions = NULL;
00146 }
00147 }
00148
00149
00150 public :
00151 static FunctionVector& vecKindFunctions()
00152 {
00153 if (!_vecKindFunctions) {
00154 _vecKindFunctions = new FunctionVector();
00155 }
00156 return *_vecKindFunctions;
00157 }
00158 static ObjectImpl* createImpl( ObjectType eType, const std::string& strKind, const std::string& strRole );
00159
00160
00161 friend ObjectImpl;
00162 friend ExtensionsCleanup;
00163 };
00164
00165
00166
00167
00168
00169
00170
00171 template < class TBON , class TUserI>
00172 class Extension
00173 : virtual public TBON
00174 {
00175
00176 public :
00177 static std::vector<std::string> vecKinds;
00178 static const ExtensionManager extensionFactory;
00179 static std::vector<std::string> vecDerivedKinds;
00180 protected :
00181 static int inheritance_level;
00182 static std::string string_type;
00183 static ObjectType type;
00184 public :
00185
00186
00187 public :
00188 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
00189 {
00190 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
00191 }
00192
00193 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
00194 {
00195 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
00196 }
00197
00198 static ObjectImpl* createImpl()
00199 {
00200 return new TUserI();
00201 }
00202
00203 static std::vector<std::string> setKinds( const std::string& strKinds )
00204 {
00205 std::vector<std::string> _vecKinds;
00206 splitKinds( strKinds, _vecKinds );
00207 TBON::addDerivedKinds( _vecKinds );
00208 inheritance_level = TBON::inheritance_level + 1;
00209 string_type = TBON::string_type;
00210 type = TBON::type;
00211 return _vecKinds;
00212 }
00213
00214 protected :
00215 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
00216 {
00217 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
00218 vecDerivedKinds.push_back( *it );
00219 TBON::addDerivedKinds( _vecKinds );
00220 }
00221
00222
00223 public :
00224 Extension()
00225 : TBON()
00226 {
00227 }
00228
00229 Extension( TUserI* pObject )
00230 : TBON( pObject )
00231 {
00232
00233 setCounted( pObject );
00234 }
00235
00236 Extension( const Object& object )
00237 : TBON()
00238 {
00239 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00240 }
00241
00242 Extension( const FCO& object )
00243 : TBON()
00244 {
00245 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00246 }
00247
00248 Extension( const ConnectionEnd& object )
00249 : TBON()
00250 {
00251 if ( object && ! object->isReferencePort() )
00252 setCounted( object.getCounted( false ) );
00253 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00254 setCounted( NULL );
00255 }
00256
00257
00258 Extension( const Extension<TBON,TUserI>& object )
00259 : TBON()
00260 {
00261 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00262 }
00263
00264
00265 Extension<TBON,TUserI>& operator = ( const Object& object )
00266 {
00267 if ( this != &object ) {
00268 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00269 }
00270 return *this;
00271 }
00272
00273 Extension<TBON,TUserI>& operator = ( const FCO& object )
00274 {
00275 if ( this != &object ) {
00276 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00277 }
00278 return *this;
00279 }
00280
00281 Extension<TBON,TUserI>& operator = ( const ConnectionEnd& object )
00282 {
00283 if ( this != &object ) {
00284 if ( object && ! object->isReferencePort() )
00285 setCounted( object.getCounted( false ) );
00286 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00287 setCounted( NULL );
00288 }
00289 return *this;
00290 }
00291
00292 TUserI* operator -> () const
00293 {
00294 return dynamic_cast<TUserI*>( getCounted() );
00295 }
00296
00297
00298 friend ExtensionManager;
00299 };
00300
00301
00302
00303
00304
00305
00306
00307 template < class TBON1, class TBON2, class TUserI>
00308 class Extension2
00309 : virtual public TBON1, virtual public TBON2
00310 {
00311
00312 public :
00313 static std::vector<std::string> vecKinds;
00314 static const ExtensionManager extensionFactory;
00315 static std::vector<std::string> vecDerivedKinds;
00316 protected :
00317 static int inheritance_level;
00318 static std::string string_type;
00319 static ObjectType type;
00320
00321
00322 public :
00323 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
00324 {
00325 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
00326 }
00327
00328 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
00329 {
00330 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
00331 }
00332
00333 static ObjectImpl* createImpl()
00334 {
00335 return new TUserI();
00336 }
00337
00338 static std::vector<std::string> setKinds( const std::string& strKinds )
00339 {
00340 std::vector<std::string> _vecKinds;
00341 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
00342 if ( ! string_type.empty() ) {
00343 splitKinds( strKinds, _vecKinds );
00344 TBON1::addDerivedKinds( _vecKinds );
00345 TBON2::addDerivedKinds( _vecKinds );
00346 inheritance_level = max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 );
00347 }
00348 return _vecKinds;
00349 }
00350
00351 protected :
00352 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
00353 {
00354 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
00355 vecDerivedKinds.push_back( *it );
00356 TBON1::addDerivedKinds( _vecKinds );
00357 TBON2::addDerivedKinds( _vecKinds );
00358 }
00359
00360
00361 public :
00362 Extension2()
00363 : TBON1(), TBON2()
00364 {
00365 }
00366
00367 Extension2( TUserI* pObject )
00368 : TBON1(), TBON2()
00369 {
00370 setCounted( pObject );
00371 }
00372
00373 Extension2( const Object& object )
00374 : TBON1(), TBON2()
00375 {
00376 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00377 }
00378
00379 Extension2( const FCO& object )
00380 : TBON1(), TBON2()
00381 {
00382 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00383 }
00384
00385 Extension2( const ConnectionEnd& object )
00386 : TBON1(), TBON2()
00387 {
00388 if ( object && ! object->isReferencePort() )
00389 setCounted( object.getCounted( false ) );
00390 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00391 setCounted( NULL );
00392 }
00393
00394 Extension2( const TBON1& object )
00395 : TBON1(), TBON2()
00396 {
00397 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00398 }
00399
00400 Extension2( const TBON2& object )
00401 : TBON1(), TBON2()
00402 {
00403 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00404 }
00405
00406 Extension2( const Extension2<TBON1,TBON2,TUserI>& object )
00407 : TBON1(), TBON2()
00408 {
00409 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00410 }
00411
00412 Extension2<TBON1,TBON2,TUserI>& operator = ( const Object& object )
00413 {
00414 if ( this != &object ) {
00415 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00416 }
00417 return *this;
00418 }
00419
00420 Extension2<TBON1,TBON2,TUserI>& operator = ( const FCO& object )
00421 {
00422 if ( this != &object ) {
00423 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00424 }
00425 return *this;
00426 }
00427
00428 Extension2<TBON1,TBON2,TUserI>& operator = ( const ConnectionEnd& object )
00429 {
00430 if ( this != &object ) {
00431 if ( object && ! object->isReferencePort() )
00432 setCounted( object.getCounted( false ) );
00433 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00434 setCounted( NULL );
00435 }
00436 return *this;
00437 }
00438
00439 Extension2<TBON1,TBON2,TUserI>& operator = ( const TBON1& object )
00440 {
00441 if ( this != &object ) {
00442 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00443 }
00444 return *this;
00445 }
00446
00447 Extension2<TBON1,TBON2,TUserI>& operator = ( const TBON2& object )
00448 {
00449 if ( this != &object ) {
00450 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00451 }
00452 return *this;
00453 }
00454
00455 Extension2<TBON1,TBON2,TUserI>& operator = ( const Extension2<TBON1,TBON2,TUserI>& object )
00456 {
00457 if ( this != &object ) {
00458 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00459 }
00460 return *this;
00461 }
00462
00463 operator bool () const
00464 {
00465 return getCounted( false ) != NULL;
00466 }
00467
00468 TUserI* operator -> () const
00469 {
00470 return dynamic_cast<TUserI*>( getCounted() );
00471 }
00472
00473
00474 friend ExtensionManager;
00475 };
00476
00477
00478
00479
00480
00481
00482
00483 template < class TBON1, class TBON2, class TBON3, class TUserI>
00484 class Extension3
00485 : virtual public TBON1, virtual public TBON2, virtual public TBON3
00486 {
00487
00488 public :
00489 static std::vector<std::string> vecKinds;
00490 static const ExtensionManager extensionFactory;
00491 static std::vector<std::string> vecDerivedKinds;
00492 protected :
00493 static int inheritance_level;
00494 static std::string string_type;
00495 static ObjectType type;
00496
00497
00498 public :
00499 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
00500 {
00501 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
00502 }
00503
00504 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
00505 {
00506 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
00507 }
00508
00509 static ObjectImpl* createImpl()
00510 {
00511 return new TUserI();
00512 }
00513
00514 static std::vector<std::string> setKinds( const std::string& strKinds )
00515 {
00516 std::vector<std::string> _vecKinds;
00517 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
00518 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
00519 if ( ! string_type.empty() ) {
00520 splitKinds( strKinds, _vecKinds );
00521 TBON1::addDerivedKinds( _vecKinds );
00522 TBON2::addDerivedKinds( _vecKinds );
00523 TBON3::addDerivedKinds( _vecKinds );
00524 inheritance_level = max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1);
00525 }
00526 return _vecKinds;
00527 }
00528
00529 protected :
00530 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
00531 {
00532 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
00533 vecDerivedKinds.push_back( *it );
00534 TBON1::addDerivedKinds( _vecKinds );
00535 TBON2::addDerivedKinds( _vecKinds );
00536 TBON3::addDerivedKinds( _vecKinds );
00537 }
00538
00539
00540 public :
00541 Extension3()
00542 : TBON1(), TBON2(), TBON3()
00543 {
00544 }
00545
00546 Extension3( TUserI* pObject )
00547 : TBON1(), TBON2(), TBON3()
00548 {
00549 setCounted( pObject );
00550 }
00551
00552 Extension3( const Object& object )
00553 : TBON1(), TBON2(), TBON3()
00554 {
00555 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00556 }
00557
00558 Extension3( const FCO& object )
00559 : TBON1(), TBON2(), TBON3()
00560 {
00561 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00562 }
00563
00564 Extension3( const ConnectionEnd& object )
00565 : TBON1(), TBON2(), TBON3()
00566 {
00567 if ( object && ! object->isReferencePort() )
00568 setCounted( object.getCounted( false ) );
00569 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00570 setCounted( NULL );
00571 }
00572
00573 Extension3( const TBON1& object )
00574 : TBON1(), TBON2(), TBON3()
00575 {
00576 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00577 }
00578
00579 Extension3( const TBON2& object )
00580 : TBON1(), TBON2(), TBON3()
00581 {
00582 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00583 }
00584
00585 Extension3( const TBON3& object )
00586 : TBON1(), TBON2(), TBON3()
00587 {
00588 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00589 }
00590
00591 Extension3( const Extension3<TBON1,TBON2,TBON3,TUserI>& object )
00592 : TBON1(), TBON2(), TBON3()
00593 {
00594 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00595 }
00596
00597 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const Object& object )
00598 {
00599 if ( this != &object ) {
00600 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00601 }
00602 return *this;
00603 }
00604
00605 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const FCO& object )
00606 {
00607 if ( this != &object ) {
00608 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00609 }
00610 return *this;
00611 }
00612
00613 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const ConnectionEnd& object )
00614 {
00615 if ( this != &object ) {
00616 if ( object && ! object->isReferencePort() )
00617 setCounted( object.getCounted( false ) );
00618 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00619 setCounted( NULL );
00620 }
00621 return *this;
00622 }
00623
00624 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON1& object )
00625 {
00626 if ( this != &object ) {
00627 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00628 }
00629 return *this;
00630 }
00631
00632 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON2& object )
00633 {
00634 if ( this != &object ) {
00635 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00636 }
00637 return *this;
00638 }
00639
00640 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON3& object )
00641 {
00642 if ( this != &object ) {
00643 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00644 }
00645 return *this;
00646 }
00647
00648 Extension3<TBON1,TBON2,TBON3,TUserI>& operator = ( const Extension3<TBON1,TBON2,TBON3,TUserI>& object )
00649 {
00650 if ( this != &object ) {
00651 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00652 }
00653 return *this;
00654 }
00655
00656 operator bool () const
00657 {
00658 return getCounted( false ) != NULL;
00659 }
00660
00661 TUserI* operator -> () const
00662 {
00663 return dynamic_cast<TUserI*>( getCounted() );
00664 }
00665
00666
00667 friend ExtensionManager;
00668 };
00669
00670
00671
00672
00673
00674
00675
00676 template < class TBON1, class TBON2, class TBON3, class TBON4, class TUserI>
00677 class Extension4
00678 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4
00679 {
00680
00681 public :
00682 static std::vector<std::string> vecKinds;
00683 static const ExtensionManager extensionFactory;
00684 static std::vector<std::string> vecDerivedKinds;
00685 protected :
00686 static int inheritance_level;
00687 static std::string string_type;
00688 static ObjectType type;
00689
00690
00691 public :
00692 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
00693 {
00694 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
00695 }
00696
00697 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
00698 {
00699 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
00700 }
00701
00702 static ObjectImpl* createImpl()
00703 {
00704 return new TUserI();
00705 }
00706
00707 static std::vector<std::string> setKinds( const std::string& strKinds )
00708 {
00709 std::vector<std::string> _vecKinds;
00710 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
00711 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
00712 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
00713 if ( ! string_type.empty() ) {
00714 splitKinds( strKinds, _vecKinds );
00715 TBON1::addDerivedKinds( _vecKinds );
00716 TBON2::addDerivedKinds( _vecKinds );
00717 TBON3::addDerivedKinds( _vecKinds );
00718 TBON4::addDerivedKinds( _vecKinds );
00719 inheritance_level = max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1);
00720 }
00721 return _vecKinds;
00722 }
00723
00724 protected :
00725 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
00726 {
00727 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
00728 vecDerivedKinds.push_back( *it );
00729 TBON1::addDerivedKinds( _vecKinds );
00730 TBON2::addDerivedKinds( _vecKinds );
00731 TBON3::addDerivedKinds( _vecKinds );
00732 TBON4::addDerivedKinds( _vecKinds );
00733 }
00734
00735
00736 public :
00737 Extension4()
00738 : TBON1(), TBON2(), TBON3(), TBON4()
00739 {
00740 }
00741
00742 Extension4( TUserI* pObject )
00743 : TBON1(), TBON2(), TBON3(), TBON4()
00744 {
00745 setCounted( pObject );
00746 }
00747
00748 Extension4( const Object& object )
00749 : TBON1(), TBON2(), TBON3(), TBON4()
00750 {
00751 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00752 }
00753
00754 Extension4( const FCO& object )
00755 : TBON1(), TBON2(), TBON3(), TBON4()
00756 {
00757 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00758 }
00759
00760 Extension4( const ConnectionEnd& object )
00761 : TBON1(), TBON2(), TBON3(), TBON4()
00762 {
00763 if ( object && ! object->isReferencePort() )
00764 setCounted( object.getCounted( false ) );
00765 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00766 setCounted( NULL );
00767 }
00768
00769 Extension4( const TBON1& object )
00770 : TBON1(), TBON2(), TBON3(), TBON4()
00771 {
00772 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00773 }
00774
00775 Extension4( const TBON2& object )
00776 : TBON1(), TBON2(), TBON3(), TBON4()
00777 {
00778 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00779 }
00780
00781 Extension4( const TBON3& object )
00782 : TBON1(), TBON2(), TBON3(), TBON4()
00783 {
00784 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00785 }
00786
00787 Extension4( const TBON4& object )
00788 : TBON1(), TBON2(), TBON3(), TBON4()
00789 {
00790 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00791 }
00792
00793 Extension4( const Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& object )
00794 : TBON1(), TBON2(), TBON3(), TBON4()
00795 {
00796 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00797 }
00798
00799 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const Object& object )
00800 {
00801 if ( this != &object ) {
00802 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00803 }
00804 return *this;
00805 }
00806
00807 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const FCO& object )
00808 {
00809 if ( this != &object ) {
00810 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00811 }
00812 return *this;
00813 }
00814
00815 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const ConnectionEnd& object )
00816 {
00817 if ( this != &object ) {
00818 if ( object && ! object->isReferencePort() )
00819 setCounted( object.getCounted( false ) );
00820 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00821 setCounted( NULL );
00822 }
00823 return *this;
00824 }
00825
00826 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON1& object )
00827 {
00828 if ( this != &object ) {
00829 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00830 }
00831 return *this;
00832 }
00833
00834 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON2& object )
00835 {
00836 if ( this != &object ) {
00837 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00838 }
00839 return *this;
00840 }
00841
00842 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON3& object )
00843 {
00844 if ( this != &object ) {
00845 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00846 }
00847 return *this;
00848 }
00849
00850 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON4& object )
00851 {
00852 if ( this != &object ) {
00853 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00854 }
00855 return *this;
00856 }
00857
00858 Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const Extension4<TBON1,TBON2,TBON3,TBON4,TUserI>& object )
00859 {
00860 if ( this != &object ) {
00861 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00862 }
00863 return *this;
00864 }
00865
00866 operator bool () const
00867 {
00868 return getCounted( false ) != NULL;
00869 }
00870
00871 TUserI* operator -> () const
00872 {
00873 return dynamic_cast<TUserI*>( getCounted() );
00874 }
00875
00876
00877 friend ExtensionManager;
00878 };
00879
00880
00881
00882
00883
00884
00885
00886 template < class TBON1, class TBON2, class TBON3, class TBON4, class TBON5, class TUserI>
00887 class Extension5
00888 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4, virtual public TBON5
00889 {
00890
00891 public :
00892 static std::vector<std::string> vecKinds;
00893 static const ExtensionManager extensionFactory;
00894 static std::vector<std::string> vecDerivedKinds;
00895 protected :
00896 static int inheritance_level;
00897 static std::string string_type;
00898 static ObjectType type;
00899
00900
00901 public :
00902 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
00903 {
00904 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
00905 }
00906
00907 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
00908 {
00909 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
00910 }
00911
00912 static ObjectImpl* createImpl()
00913 {
00914 return new TUserI();
00915 }
00916
00917 static std::vector<std::string> setKinds( const std::string& strKinds )
00918 {
00919 std::vector<std::string> _vecKinds;
00920 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
00921 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
00922 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
00923 mergeTypes( string_type, type, TBON5::string_type, TBON5::type, string_type, type );
00924 if ( ! string_type.empty() ) {
00925 splitKinds( strKinds, _vecKinds );
00926 TBON1::addDerivedKinds( _vecKinds );
00927 TBON2::addDerivedKinds( _vecKinds );
00928 TBON3::addDerivedKinds( _vecKinds );
00929 TBON4::addDerivedKinds( _vecKinds );
00930 TBON5::addDerivedKinds( _vecKinds );
00931 inheritance_level = max( max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1), TBON5::inheritance_level + 1);
00932 }
00933 return _vecKinds;
00934 }
00935
00936 protected :
00937 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
00938 {
00939 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
00940 vecDerivedKinds.push_back( *it );
00941 TBON1::addDerivedKinds( _vecKinds );
00942 TBON2::addDerivedKinds( _vecKinds );
00943 TBON3::addDerivedKinds( _vecKinds );
00944 TBON4::addDerivedKinds( _vecKinds );
00945 TBON5::addDerivedKinds( _vecKinds );
00946 }
00947
00948
00949 public :
00950 Extension5()
00951 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00952 {
00953 }
00954
00955 Extension5( TUserI* pObject )
00956 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00957 {
00958 setCounted( pObject );
00959 }
00960
00961 Extension5( const Object& object )
00962 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00963 {
00964 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00965 }
00966
00967 Extension5( const FCO& object )
00968 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00969 {
00970 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00971 }
00972
00973 Extension5( const ConnectionEnd& object )
00974 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00975 {
00976 if ( object && ! object->isReferencePort() )
00977 setCounted( object.getCounted( false ) );
00978 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
00979 setCounted( NULL );
00980 }
00981
00982 Extension5( const TBON1& object )
00983 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00984 {
00985 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00986 }
00987
00988 Extension5( const TBON2& object )
00989 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00990 {
00991 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00992 }
00993
00994 Extension5( const TBON3& object )
00995 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
00996 {
00997 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
00998 }
00999
01000 Extension5( const TBON4& object )
01001 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
01002 {
01003 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01004 }
01005
01006 Extension5( const TBON5& object )
01007 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
01008 {
01009 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01010 }
01011
01012 Extension5( const Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& object )
01013 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
01014 {
01015 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01016 }
01017
01018 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const Object& object )
01019 {
01020 if ( this != &object ) {
01021 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01022 }
01023 return *this;
01024 }
01025
01026 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const FCO& object )
01027 {
01028 if ( this != &object ) {
01029 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01030 }
01031 return *this;
01032 }
01033
01034 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const ConnectionEnd& object )
01035 {
01036 if ( this != &object ) {
01037 if ( object && ! object->isReferencePort() )
01038 setCounted( object.getCounted( false ) );
01039 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01040 setCounted( NULL );
01041 }
01042 return *this;
01043 }
01044
01045 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON1& object )
01046 {
01047 if ( this != &object ) {
01048 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01049 }
01050 return *this;
01051 }
01052
01053 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON2& object )
01054 {
01055 if ( this != &object ) {
01056 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01057 }
01058 return *this;
01059 }
01060
01061 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON3& object )
01062 {
01063 if ( this != &object ) {
01064 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01065 }
01066 return *this;
01067 }
01068
01069 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON4& object )
01070 {
01071 if ( this != &object ) {
01072 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01073 }
01074 return *this;
01075 }
01076
01077 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON5& object )
01078 {
01079 if ( this != &object ) {
01080 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01081 }
01082 return *this;
01083 }
01084
01085 Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const Extension5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& object )
01086 {
01087 if ( this != &object ) {
01088 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01089 }
01090 return *this;
01091 }
01092
01093 operator bool () const
01094 {
01095 return getCounted( false ) != NULL;
01096 }
01097
01098 TUserI* operator -> () const
01099 {
01100 return dynamic_cast<TUserI*>( getCounted() );
01101 }
01102
01103
01104 friend ExtensionManager;
01105 };
01106
01107
01108
01109
01110
01111
01112
01113 template < class TBON1, class TBON2, class TBON3, class TBON4, class TBON5, class TBON6, class TUserI>
01114 class Extension6
01115 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4, virtual public TBON5, virtual public TBON6
01116 {
01117
01118 public :
01119 static std::vector<std::string> vecKinds;
01120 static const ExtensionManager extensionFactory;
01121 static std::vector<std::string> vecDerivedKinds;
01122 protected :
01123 static int inheritance_level;
01124 static std::string string_type;
01125 static ObjectType type;
01126
01127
01128 public :
01129 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
01130 {
01131 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
01132 }
01133
01134 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
01135 {
01136 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
01137 }
01138
01139 static ObjectImpl* createImpl()
01140 {
01141 return new TUserI();
01142 }
01143
01144 static std::vector<std::string> setKinds( const std::string& strKinds )
01145 {
01146 std::vector<std::string> _vecKinds;
01147 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
01148 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
01149 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
01150 mergeTypes( string_type, type, TBON5::string_type, TBON5::type, string_type, type );
01151 mergeTypes( string_type, type, TBON6::string_type, TBON6::type, string_type, type );
01152 if ( ! string_type.empty() ) {
01153 splitKinds( strKinds, _vecKinds );
01154 TBON1::addDerivedKinds( _vecKinds );
01155 TBON2::addDerivedKinds( _vecKinds );
01156 TBON3::addDerivedKinds( _vecKinds );
01157 TBON4::addDerivedKinds( _vecKinds );
01158 TBON5::addDerivedKinds( _vecKinds );
01159 TBON6::addDerivedKinds( _vecKinds );
01160 inheritance_level = max( max( max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1), TBON5::inheritance_level + 1), TBON6::inheritance_level + 1);
01161 }
01162 return _vecKinds;
01163 }
01164
01165 protected :
01166 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
01167 {
01168 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
01169 vecDerivedKinds.push_back( *it );
01170 TBON1::addDerivedKinds( _vecKinds );
01171 TBON2::addDerivedKinds( _vecKinds );
01172 TBON3::addDerivedKinds( _vecKinds );
01173 TBON4::addDerivedKinds( _vecKinds );
01174 TBON5::addDerivedKinds( _vecKinds );
01175 TBON6::addDerivedKinds( _vecKinds );
01176 }
01177
01178
01179 public :
01180 Extension6()
01181 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01182 {
01183 }
01184
01185 Extension6( TUserI* pObject )
01186 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01187 {
01188 setCounted( pObject );
01189 }
01190
01191 Extension6( const Object& object )
01192 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01193 {
01194 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01195 }
01196
01197 Extension6( const FCO& object )
01198 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01199 {
01200 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01201 }
01202
01203 Extension6( const ConnectionEnd& object )
01204 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01205 {
01206 if ( object && ! object->isReferencePort() )
01207 setCounted( object.getCounted( false ) );
01208 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01209 setCounted( NULL );
01210 }
01211
01212 Extension6( const TBON1& object )
01213 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01214 {
01215 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01216 }
01217
01218 Extension6( const TBON2& object )
01219 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01220 {
01221 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01222 }
01223
01224 Extension6( const TBON3& object )
01225 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01226 {
01227 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01228 }
01229
01230 Extension6( const TBON4& object )
01231 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01232 {
01233 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01234 }
01235
01236 Extension6( const TBON5& object )
01237 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01238 {
01239 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01240 }
01241
01242 Extension6( const TBON6& object )
01243 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01244 {
01245 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01246 }
01247
01248 Extension6( const Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& object )
01249 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
01250 {
01251 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01252 }
01253
01254 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const Object& object )
01255 {
01256 if ( this != &object ) {
01257 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01258 }
01259 return *this;
01260 }
01261
01262 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const FCO& object )
01263 {
01264 if ( this != &object ) {
01265 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01266 }
01267 return *this;
01268 }
01269
01270 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const ConnectionEnd& object )
01271 {
01272 if ( this != &object ) {
01273 if ( object && ! object->isReferencePort() )
01274 setCounted( object.getCounted( false ) );
01275 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01276 setCounted( NULL );
01277 }
01278 return *this;
01279 }
01280
01281 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON1& object )
01282 {
01283 if ( this != &object ) {
01284 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01285 }
01286 return *this;
01287 }
01288
01289 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON2& object )
01290 {
01291 if ( this != &object ) {
01292 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01293 }
01294 return *this;
01295 }
01296
01297 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON3& object )
01298 {
01299 if ( this != &object ) {
01300 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01301 }
01302 return *this;
01303 }
01304
01305 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON4& object )
01306 {
01307 if ( this != &object ) {
01308 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01309 }
01310 return *this;
01311 }
01312
01313 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON5& object )
01314 {
01315 if ( this != &object ) {
01316 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01317 }
01318 return *this;
01319 }
01320
01321 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON6& object )
01322 {
01323 if ( this != &object ) {
01324 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01325 }
01326 return *this;
01327 }
01328
01329 Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const Extension6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& object )
01330 {
01331 if ( this != &object ) {
01332 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01333 }
01334 return *this;
01335 }
01336
01337 operator bool () const
01338 {
01339 return getCounted( false ) != NULL;
01340 }
01341
01342 TUserI* operator -> () const
01343 {
01344 return dynamic_cast<TUserI*>( getCounted() );
01345 }
01346
01347
01348 friend ExtensionManager;
01349 };
01350
01351
01352
01353
01354
01355
01356
01357 template < class TBON , class TUserI>
01358 class ExtensionA
01359 : virtual public TBON
01360 {
01361
01362 public :
01363 static std::vector<std::string> vecKinds;
01364 static const ExtensionManager extensionFactory;
01365 static std::vector<std::string> vecDerivedKinds;
01366 protected :
01367 static int inheritance_level;
01368 static std::string string_type;
01369 static ObjectType type;
01370 public :
01371
01372
01373 public :
01374 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
01375 {
01376 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
01377 }
01378
01379 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
01380 {
01381 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
01382 }
01383
01384 static ObjectImpl* createImpl()
01385 {
01386 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
01387 return NULL;
01388 }
01389
01390 static std::vector<std::string> setKinds( const std::string& strKinds )
01391 {
01392 std::vector<std::string> _vecKinds;
01393 splitKinds( strKinds, _vecKinds );
01394 TBON::addDerivedKinds( _vecKinds );
01395 inheritance_level = TBON::inheritance_level + 1;
01396 string_type = TBON::string_type;
01397 type = TBON::type;
01398 return _vecKinds;
01399 }
01400
01401 protected :
01402 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
01403 {
01404 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
01405 vecDerivedKinds.push_back( *it );
01406 TBON::addDerivedKinds( _vecKinds );
01407 }
01408
01409
01410 public :
01411 ExtensionA()
01412 : TBON()
01413 {
01414 }
01415
01416 ExtensionA( TUserI* pObject )
01417 : TBON( pObject )
01418 {
01419 }
01420
01421 ExtensionA( const Object& object )
01422 : TBON()
01423 {
01424 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01425 }
01426
01427 ExtensionA( const FCO& object )
01428 : TBON()
01429 {
01430 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01431 }
01432
01433 ExtensionA( const ConnectionEnd& object )
01434 : TBON()
01435 {
01436 if ( object && ! object->isReferencePort() )
01437 setCounted( object.getCounted( false ) );
01438 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01439 setCounted( NULL );
01440 }
01441
01442
01443 ExtensionA( const ExtensionA<TBON,TUserI>& object )
01444 : TBON()
01445 {
01446 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01447 }
01448
01449 ExtensionA<TBON,TUserI>& operator = ( const Object& object )
01450 {
01451 if ( this != &object ) {
01452 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01453 }
01454 return *this;
01455 }
01456
01457 ExtensionA<TBON,TUserI>& operator = ( const FCO& object )
01458 {
01459 if ( this != &object ) {
01460 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01461 }
01462 return *this;
01463 }
01464
01465 ExtensionA<TBON,TUserI>& operator = ( const ConnectionEnd& object )
01466 {
01467 if ( this != &object ) {
01468 if ( object && ! object->isReferencePort() )
01469 setCounted( object.getCounted( false ) );
01470 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01471 setCounted( NULL );
01472 }
01473 return *this;
01474 }
01475
01476 TUserI* operator -> () const
01477 {
01478 return dynamic_cast<TUserI*>( getCounted() );
01479 }
01480
01481
01482 friend ExtensionManager;
01483 };
01484
01485
01486
01487
01488
01489
01490
01491 template < class TBON1, class TBON2, class TUserI>
01492 class ExtensionA2
01493 : virtual public TBON1, virtual public TBON2
01494 {
01495
01496 public :
01497 static std::vector<std::string> vecKinds;
01498 static const ExtensionManager extensionFactory;
01499 static std::vector<std::string> vecDerivedKinds;
01500 protected :
01501 static int inheritance_level;
01502 static std::string string_type;
01503 static ObjectType type;
01504
01505
01506 public :
01507 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
01508 {
01509 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
01510 }
01511
01512 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
01513 {
01514 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
01515 }
01516
01517 static ObjectImpl* createImpl()
01518 {
01519 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
01520 return NULL;
01521 }
01522
01523 static std::vector<std::string> setKinds( const std::string& strKinds )
01524 {
01525 std::vector<std::string> _vecKinds;
01526 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
01527 if ( ! string_type.empty() ) {
01528 splitKinds( strKinds, _vecKinds );
01529 TBON1::addDerivedKinds( _vecKinds );
01530 TBON2::addDerivedKinds( _vecKinds );
01531 inheritance_level = max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 );
01532 }
01533 return _vecKinds;
01534 }
01535
01536 protected :
01537 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
01538 {
01539 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
01540 vecDerivedKinds.push_back( *it );
01541 TBON1::addDerivedKinds( _vecKinds );
01542 TBON2::addDerivedKinds( _vecKinds );
01543 }
01544
01545
01546 public :
01547 ExtensionA2()
01548 : TBON1(), TBON2()
01549 {
01550 }
01551
01552 ExtensionA2( TUserI* pObject )
01553 : TBON1(), TBON2()
01554 {
01555 setCounted( pObject );
01556 }
01557
01558 ExtensionA2( const Object& object )
01559 : TBON1(), TBON2()
01560 {
01561 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01562 }
01563
01564 ExtensionA2( const FCO& object )
01565 : TBON1(), TBON2()
01566 {
01567 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01568 }
01569
01570 ExtensionA2( const ConnectionEnd& object )
01571 : TBON1(), TBON2()
01572 {
01573 if ( object && ! object->isReferencePort() )
01574 setCounted( object.getCounted( false ) );
01575 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01576 setCounted( NULL );
01577 }
01578
01579 ExtensionA2( const TBON1& object )
01580 : TBON1(), TBON2()
01581 {
01582 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01583 }
01584
01585 ExtensionA2( const TBON2& object )
01586 : TBON1(), TBON2()
01587 {
01588 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01589 }
01590
01591 ExtensionA2( const ExtensionA2<TBON1,TBON2,TUserI>& object )
01592 : TBON1(), TBON2()
01593 {
01594 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01595 }
01596
01597 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const Object& object )
01598 {
01599 if ( this != &object ) {
01600 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01601 }
01602 return *this;
01603 }
01604
01605 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const FCO& object )
01606 {
01607 if ( this != &object ) {
01608 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01609 }
01610 return *this;
01611 }
01612
01613 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const ConnectionEnd& object )
01614 {
01615 if ( this != &object ) {
01616 if ( object && ! object->isReferencePort() )
01617 setCounted( object.getCounted( false ) );
01618 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01619 setCounted( NULL );
01620 }
01621 return *this;
01622 }
01623
01624 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const TBON1& object )
01625 {
01626 if ( this != &object ) {
01627 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01628 }
01629 return *this;
01630 }
01631
01632 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const TBON2& object )
01633 {
01634 if ( this != &object ) {
01635 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01636 }
01637 return *this;
01638 }
01639
01640 ExtensionA2<TBON1,TBON2,TUserI>& operator = ( const ExtensionA2<TBON1,TBON2,TUserI>& object )
01641 {
01642 if ( this != &object ) {
01643 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01644 }
01645 return *this;
01646 }
01647
01648 operator bool () const
01649 {
01650 return getCounted( false ) != NULL;
01651 }
01652
01653 TUserI* operator -> () const
01654 {
01655 return dynamic_cast<TUserI*>( getCounted() );
01656 }
01657
01658
01659 friend ExtensionManager;
01660 };
01661
01662
01663
01664
01665
01666
01667
01668 template < class TBON1, class TBON2, class TBON3, class TUserI>
01669 class ExtensionA3
01670 : virtual public TBON1, virtual public TBON2, virtual public TBON3
01671 {
01672
01673 public :
01674 static std::vector<std::string> vecKinds;
01675 static const ExtensionManager extensionFactory;
01676 static std::vector<std::string> vecDerivedKinds;
01677 protected :
01678 static int inheritance_level;
01679 static std::string string_type;
01680 static ObjectType type;
01681
01682
01683 public :
01684 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
01685 {
01686 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
01687 }
01688
01689 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
01690 {
01691 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
01692 }
01693
01694 static ObjectImpl* createImpl()
01695 {
01696 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
01697 return NULL;
01698 }
01699
01700 static std::vector<std::string> setKinds( const std::string& strKinds )
01701 {
01702 std::vector<std::string> _vecKinds;
01703 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
01704 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
01705 if ( ! string_type.empty() ) {
01706 splitKinds( strKinds, _vecKinds );
01707 TBON1::addDerivedKinds( _vecKinds );
01708 TBON2::addDerivedKinds( _vecKinds );
01709 TBON3::addDerivedKinds( _vecKinds );
01710 inheritance_level = max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1);
01711 }
01712 return _vecKinds;
01713 }
01714
01715 protected :
01716 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
01717 {
01718 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
01719 vecDerivedKinds.push_back( *it );
01720 TBON1::addDerivedKinds( _vecKinds );
01721 TBON2::addDerivedKinds( _vecKinds );
01722 TBON3::addDerivedKinds( _vecKinds );
01723 }
01724
01725
01726 public :
01727 ExtensionA3()
01728 : TBON1(), TBON2(), TBON3()
01729 {
01730 }
01731
01732 ExtensionA3( TUserI* pObject )
01733 : TBON1(), TBON2(), TBON3()
01734 {
01735 setCounted( pObject );
01736 }
01737
01738 ExtensionA3( const Object& object )
01739 : TBON1(), TBON2(), TBON3()
01740 {
01741 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01742 }
01743
01744 ExtensionA3( const FCO& object )
01745 : TBON1(), TBON2(), TBON3()
01746 {
01747 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01748 }
01749
01750 ExtensionA3( const ConnectionEnd& object )
01751 : TBON1(), TBON2(), TBON3()
01752 {
01753 if ( object && ! object->isReferencePort() )
01754 setCounted( object.getCounted( false ) );
01755 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01756 setCounted( NULL );
01757 }
01758
01759 ExtensionA3( const TBON1& object )
01760 : TBON1(), TBON2(), TBON3()
01761 {
01762 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01763 }
01764
01765 ExtensionA3( const TBON2& object )
01766 : TBON1(), TBON2(), TBON3()
01767 {
01768 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01769 }
01770
01771 ExtensionA3( const TBON3& object )
01772 : TBON1(), TBON2(), TBON3()
01773 {
01774 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01775 }
01776
01777 ExtensionA3( const ExtensionA3<TBON1,TBON2,TBON3,TUserI>& object )
01778 : TBON1(), TBON2(), TBON3()
01779 {
01780 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01781 }
01782
01783 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const Object& object )
01784 {
01785 if ( this != &object ) {
01786 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01787 }
01788 return *this;
01789 }
01790
01791 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const FCO& object )
01792 {
01793 if ( this != &object ) {
01794 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01795 }
01796 return *this;
01797 }
01798
01799 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const ConnectionEnd& object )
01800 {
01801 if ( this != &object ) {
01802 if ( object && ! object->isReferencePort() )
01803 setCounted( object.getCounted( false ) );
01804 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01805 setCounted( NULL );
01806 }
01807 return *this;
01808 }
01809
01810 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON1& object )
01811 {
01812 if ( this != &object ) {
01813 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01814 }
01815 return *this;
01816 }
01817
01818 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON2& object )
01819 {
01820 if ( this != &object ) {
01821 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01822 }
01823 return *this;
01824 }
01825
01826 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const TBON3& object )
01827 {
01828 if ( this != &object ) {
01829 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01830 }
01831 return *this;
01832 }
01833
01834 ExtensionA3<TBON1,TBON2,TBON3,TUserI>& operator = ( const ExtensionA3<TBON1,TBON2,TBON3,TUserI>& object )
01835 {
01836 if ( this != &object ) {
01837 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01838 }
01839 return *this;
01840 }
01841
01842 operator bool () const
01843 {
01844 return getCounted( false ) != NULL;
01845 }
01846
01847 TUserI* operator -> () const
01848 {
01849 return dynamic_cast<TUserI*>( getCounted() );
01850 }
01851
01852
01853 friend ExtensionManager;
01854 };
01855
01856
01857
01858
01859
01860
01861
01862 template < class TBON1, class TBON2, class TBON3, class TBON4, class TUserI>
01863 class ExtensionA4
01864 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4
01865 {
01866
01867 public :
01868 static std::vector<std::string> vecKinds;
01869 static const ExtensionManager extensionFactory;
01870 static std::vector<std::string> vecDerivedKinds;
01871 protected :
01872 static int inheritance_level;
01873 static std::string string_type;
01874 static ObjectType type;
01875
01876
01877 public :
01878 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
01879 {
01880 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
01881 }
01882
01883 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
01884 {
01885 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
01886 }
01887
01888 static ObjectImpl* createImpl()
01889 {
01890 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
01891 return NULL;
01892 }
01893
01894 static std::vector<std::string> setKinds( const std::string& strKinds )
01895 {
01896 std::vector<std::string> _vecKinds;
01897 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
01898 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
01899 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
01900 if ( ! string_type.empty() ) {
01901 splitKinds( strKinds, _vecKinds );
01902 TBON1::addDerivedKinds( _vecKinds );
01903 TBON2::addDerivedKinds( _vecKinds );
01904 TBON3::addDerivedKinds( _vecKinds );
01905 TBON4::addDerivedKinds( _vecKinds );
01906 inheritance_level = max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1);
01907 }
01908 return _vecKinds;
01909 }
01910
01911 protected :
01912 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
01913 {
01914 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
01915 vecDerivedKinds.push_back( *it );
01916 TBON1::addDerivedKinds( _vecKinds );
01917 TBON2::addDerivedKinds( _vecKinds );
01918 TBON3::addDerivedKinds( _vecKinds );
01919 TBON4::addDerivedKinds( _vecKinds );
01920 }
01921
01922
01923 public :
01924 ExtensionA4()
01925 : TBON1(), TBON2(), TBON3(), TBON4()
01926 {
01927 }
01928
01929 ExtensionA4( TUserI* pObject )
01930 : TBON1(), TBON2(), TBON3(), TBON4()
01931 {
01932 setCounted( pObject );
01933 }
01934
01935 ExtensionA4( const Object& object )
01936 : TBON1(), TBON2(), TBON3(), TBON4()
01937 {
01938 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01939 }
01940
01941 ExtensionA4( const FCO& object )
01942 : TBON1(), TBON2(), TBON3(), TBON4()
01943 {
01944 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01945 }
01946
01947 ExtensionA4( const ConnectionEnd& object )
01948 : TBON1(), TBON2(), TBON3(), TBON4()
01949 {
01950 if ( object && ! object->isReferencePort() )
01951 setCounted( object.getCounted( false ) );
01952 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
01953 setCounted( NULL );
01954 }
01955
01956 ExtensionA4( const TBON1& object )
01957 : TBON1(), TBON2(), TBON3(), TBON4()
01958 {
01959 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01960 }
01961
01962 ExtensionA4( const TBON2& object )
01963 : TBON1(), TBON2(), TBON3(), TBON4()
01964 {
01965 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01966 }
01967
01968 ExtensionA4( const TBON3& object )
01969 : TBON1(), TBON2(), TBON3(), TBON4()
01970 {
01971 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01972 }
01973
01974 ExtensionA4( const TBON4& object )
01975 : TBON1(), TBON2(), TBON3(), TBON4()
01976 {
01977 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01978 }
01979
01980 ExtensionA4( const ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& object )
01981 : TBON1(), TBON2(), TBON3(), TBON4()
01982 {
01983 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01984 }
01985
01986 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const Object& object )
01987 {
01988 if ( this != &object ) {
01989 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01990 }
01991 return *this;
01992 }
01993
01994 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const FCO& object )
01995 {
01996 if ( this != &object ) {
01997 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
01998 }
01999 return *this;
02000 }
02001
02002 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const ConnectionEnd& object )
02003 {
02004 if ( this != &object ) {
02005 if ( object && ! object->isReferencePort() )
02006 setCounted( object.getCounted( false ) );
02007 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
02008 setCounted( NULL );
02009 }
02010 return *this;
02011 }
02012
02013 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON1& object )
02014 {
02015 if ( this != &object ) {
02016 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02017 }
02018 return *this;
02019 }
02020
02021 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON2& object )
02022 {
02023 if ( this != &object ) {
02024 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02025 }
02026 return *this;
02027 }
02028
02029 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON3& object )
02030 {
02031 if ( this != &object ) {
02032 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02033 }
02034 return *this;
02035 }
02036
02037 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const TBON4& object )
02038 {
02039 if ( this != &object ) {
02040 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02041 }
02042 return *this;
02043 }
02044
02045 ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& operator = ( const ExtensionA4<TBON1,TBON2,TBON3,TBON4,TUserI>& object )
02046 {
02047 if ( this != &object ) {
02048 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02049 }
02050 return *this;
02051 }
02052
02053 operator bool () const
02054 {
02055 return getCounted( false ) != NULL;
02056 }
02057
02058 TUserI* operator -> () const
02059 {
02060 return dynamic_cast<TUserI*>( getCounted() );
02061 }
02062
02063
02064 friend ExtensionManager;
02065 };
02066
02067
02068
02069
02070
02071
02072
02073 template < class TBON1, class TBON2, class TBON3, class TBON4, class TBON5, class TUserI>
02074 class ExtensionA5
02075 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4, virtual public TBON5
02076 {
02077
02078 public :
02079 static std::vector<std::string> vecKinds;
02080 static const ExtensionManager extensionFactory;
02081 static std::vector<std::string> vecDerivedKinds;
02082 protected :
02083 static int inheritance_level;
02084 static std::string string_type;
02085 static ObjectType type;
02086
02087
02088 public :
02089 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
02090 {
02091 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
02092 }
02093
02094 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
02095 {
02096 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
02097 }
02098
02099 static ObjectImpl* createImpl()
02100 {
02101 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
02102 return NULL;
02103 }
02104
02105 static std::vector<std::string> setKinds( const std::string& strKinds )
02106 {
02107 std::vector<std::string> _vecKinds;
02108 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
02109 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
02110 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
02111 mergeTypes( string_type, type, TBON5::string_type, TBON5::type, string_type, type );
02112 if ( ! string_type.empty() ) {
02113 splitKinds( strKinds, _vecKinds );
02114 TBON1::addDerivedKinds( _vecKinds );
02115 TBON2::addDerivedKinds( _vecKinds );
02116 TBON3::addDerivedKinds( _vecKinds );
02117 TBON4::addDerivedKinds( _vecKinds );
02118 TBON5::addDerivedKinds( _vecKinds );
02119 inheritance_level = max( max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1), TBON5::inheritance_level + 1);
02120 }
02121 return _vecKinds;
02122 }
02123
02124 protected :
02125 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
02126 {
02127 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
02128 vecDerivedKinds.push_back( *it );
02129 TBON1::addDerivedKinds( _vecKinds );
02130 TBON2::addDerivedKinds( _vecKinds );
02131 TBON3::addDerivedKinds( _vecKinds );
02132 TBON4::addDerivedKinds( _vecKinds );
02133 TBON5::addDerivedKinds( _vecKinds );
02134 }
02135
02136
02137 public :
02138 ExtensionA5()
02139 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02140 {
02141 }
02142
02143 ExtensionA5( TUserI* pObject )
02144 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02145 {
02146 setCounted( pObject );
02147 }
02148
02149 ExtensionA5( const Object& object )
02150 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02151 {
02152 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02153 }
02154
02155 ExtensionA5( const FCO& object )
02156 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02157 {
02158 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02159 }
02160
02161 ExtensionA5( const ConnectionEnd& object )
02162 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02163 {
02164 if ( object && ! object->isReferencePort() )
02165 setCounted( object.getCounted( false ) );
02166 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
02167 setCounted( NULL );
02168 }
02169
02170 ExtensionA5( const TBON1& object )
02171 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02172 {
02173 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02174 }
02175
02176 ExtensionA5( const TBON2& object )
02177 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02178 {
02179 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02180 }
02181
02182 ExtensionA5( const TBON3& object )
02183 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02184 {
02185 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02186 }
02187
02188 ExtensionA5( const TBON4& object )
02189 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02190 {
02191 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02192 }
02193
02194 ExtensionA5( const TBON5& object )
02195 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02196 {
02197 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02198 }
02199
02200 ExtensionA5( const ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& object )
02201 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5()
02202 {
02203 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02204 }
02205
02206 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const Object& object )
02207 {
02208 if ( this != &object ) {
02209 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02210 }
02211 return *this;
02212 }
02213
02214 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const FCO& object )
02215 {
02216 if ( this != &object ) {
02217 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02218 }
02219 return *this;
02220 }
02221
02222 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const ConnectionEnd& object )
02223 {
02224 if ( this != &object ) {
02225 if ( object && ! object->isReferencePort() )
02226 setCounted( object.getCounted( false ) );
02227 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
02228 setCounted( NULL );
02229 }
02230 return *this;
02231 }
02232
02233 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON1& object )
02234 {
02235 if ( this != &object ) {
02236 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02237 }
02238 return *this;
02239 }
02240
02241 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON2& object )
02242 {
02243 if ( this != &object ) {
02244 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02245 }
02246 return *this;
02247 }
02248
02249 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON3& object )
02250 {
02251 if ( this != &object ) {
02252 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02253 }
02254 return *this;
02255 }
02256
02257 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON4& object )
02258 {
02259 if ( this != &object ) {
02260 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02261 }
02262 return *this;
02263 }
02264
02265 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const TBON5& object )
02266 {
02267 if ( this != &object ) {
02268 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02269 }
02270 return *this;
02271 }
02272
02273 ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& operator = ( const ExtensionA5<TBON1,TBON2,TBON3,TBON4,TBON5,TUserI>& object )
02274 {
02275 if ( this != &object ) {
02276 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02277 }
02278 return *this;
02279 }
02280
02281 operator bool () const
02282 {
02283 return getCounted( false ) != NULL;
02284 }
02285
02286 TUserI* operator -> () const
02287 {
02288 return dynamic_cast<TUserI*>( getCounted() );
02289 }
02290
02291
02292 friend ExtensionManager;
02293 };
02294
02295
02296
02297
02298
02299
02300
02301 template < class TBON1, class TBON2, class TBON3, class TBON4, class TBON5, class TBON6, class TUserI>
02302 class ExtensionA6
02303 : virtual public TBON1, virtual public TBON2, virtual public TBON3, virtual public TBON4, virtual public TBON5, virtual public TBON6
02304 {
02305
02306 public :
02307 static std::vector<std::string> vecKinds;
02308 static const ExtensionManager extensionFactory;
02309 static std::vector<std::string> vecDerivedKinds;
02310 protected :
02311 static int inheritance_level;
02312 static std::string string_type;
02313 static ObjectType type;
02314
02315
02316 public :
02317 static ObjectImpl* castObjectImpl( ObjectImpl* pObject )
02318 {
02319 return BON::castObjectImpl( pObject, string_type, type, vecKinds, vecDerivedKinds );
02320 }
02321
02322 static ExtensionInfo castImpl( ObjectType eOType, const std::string& strKind, const std::string& strRole )
02323 {
02324 return ExtensionInfo( BON::castImpl( eOType, strKind, strRole, string_type, type, vecKinds ), inheritance_level );
02325 }
02326
02327 static ObjectImpl* createImpl()
02328 {
02329 ASSERTTHROW( BON::Exception( "Class is abstract!, It cannot be instantiated!" ) );
02330 return NULL;
02331 }
02332
02333 static std::vector<std::string> setKinds( const std::string& strKinds )
02334 {
02335 std::vector<std::string> _vecKinds;
02336 mergeTypes( TBON1::string_type, TBON1::type, TBON2::string_type, TBON2::type, string_type, type );
02337 mergeTypes( string_type, type, TBON3::string_type, TBON3::type, string_type, type );
02338 mergeTypes( string_type, type, TBON4::string_type, TBON4::type, string_type, type );
02339 mergeTypes( string_type, type, TBON5::string_type, TBON5::type, string_type, type );
02340 mergeTypes( string_type, type, TBON6::string_type, TBON6::type, string_type, type );
02341 if ( ! string_type.empty() ) {
02342 splitKinds( strKinds, _vecKinds );
02343 TBON1::addDerivedKinds( _vecKinds );
02344 TBON2::addDerivedKinds( _vecKinds );
02345 TBON3::addDerivedKinds( _vecKinds );
02346 TBON4::addDerivedKinds( _vecKinds );
02347 TBON5::addDerivedKinds( _vecKinds );
02348 TBON6::addDerivedKinds( _vecKinds );
02349 inheritance_level = max( max( max( max( max( TBON1::inheritance_level + 1, TBON2::inheritance_level + 1 ), TBON3::inheritance_level + 1), TBON4::inheritance_level + 1), TBON5::inheritance_level + 1), TBON6::inheritance_level + 1);
02350 }
02351 return _vecKinds;
02352 }
02353
02354 protected :
02355 static void addDerivedKinds( const std::vector<std::string>& _vecKinds )
02356 {
02357 for ( std::vector<std::string>::const_iterator it = _vecKinds.begin() ; it != _vecKinds.end() ; it++ )
02358 vecDerivedKinds.push_back( *it );
02359 TBON1::addDerivedKinds( _vecKinds );
02360 TBON2::addDerivedKinds( _vecKinds );
02361 TBON3::addDerivedKinds( _vecKinds );
02362 TBON4::addDerivedKinds( _vecKinds );
02363 TBON5::addDerivedKinds( _vecKinds );
02364 TBON6::addDerivedKinds( _vecKinds );
02365 }
02366
02367
02368 public :
02369 ExtensionA6()
02370 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02371 {
02372 }
02373
02374 ExtensionA6( TUserI* pObject )
02375 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02376 {
02377 setCounted( pObject );
02378 }
02379
02380 ExtensionA6( const Object& object )
02381 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02382 {
02383 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02384 }
02385
02386 ExtensionA6( const FCO& object )
02387 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02388 {
02389 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02390 }
02391
02392 ExtensionA6( const ConnectionEnd& object )
02393 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02394 {
02395 if ( object && ! object->isReferencePort() )
02396 setCounted( object.getCounted( false ) );
02397 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
02398 setCounted( NULL );
02399 }
02400
02401 ExtensionA6( const TBON1& object )
02402 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02403 {
02404 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02405 }
02406
02407 ExtensionA6( const TBON2& object )
02408 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02409 {
02410 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02411 }
02412
02413 ExtensionA6( const TBON3& object )
02414 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02415 {
02416 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02417 }
02418
02419 ExtensionA6( const TBON4& object )
02420 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02421 {
02422 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02423 }
02424
02425 ExtensionA6( const TBON5& object )
02426 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02427 {
02428 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02429 }
02430
02431 ExtensionA6( const TBON6& object )
02432 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02433 {
02434 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02435 }
02436
02437 ExtensionA6( const ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& object )
02438 : TBON1(), TBON2(), TBON3(), TBON4(), TBON5(), TBON6()
02439 {
02440 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02441 }
02442
02443 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const Object& object )
02444 {
02445 if ( this != &object ) {
02446 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02447 }
02448 return *this;
02449 }
02450
02451 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const FCO& object )
02452 {
02453 if ( this != &object ) {
02454 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02455 }
02456 return *this;
02457 }
02458
02459 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const ConnectionEnd& object )
02460 {
02461 if ( this != &object ) {
02462 if ( object && ! object->isReferencePort() )
02463 setCounted( object.getCounted( false ) );
02464 if ( ! castObjectImpl( dynamic_cast<ObjectImpl*>( getCounted( false ) ) ) )
02465 setCounted( NULL );
02466 }
02467 return *this;
02468 }
02469
02470 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON1& object )
02471 {
02472 if ( this != &object ) {
02473 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02474 }
02475 return *this;
02476 }
02477
02478 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON2& object )
02479 {
02480 if ( this != &object ) {
02481 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02482 }
02483 return *this;
02484 }
02485
02486 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON3& object )
02487 {
02488 if ( this != &object ) {
02489 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02490 }
02491 return *this;
02492 }
02493
02494 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON4& object )
02495 {
02496 if ( this != &object ) {
02497 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02498 }
02499 return *this;
02500 }
02501
02502 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON5& object )
02503 {
02504 if ( this != &object ) {
02505 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02506 }
02507 return *this;
02508 }
02509
02510 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const TBON6& object )
02511 {
02512 if ( this != &object ) {
02513 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02514 }
02515 return *this;
02516 }
02517
02518 ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& operator = ( const ExtensionA6<TBON1,TBON2,TBON3,TBON4,TBON5,TBON6,TUserI>& object )
02519 {
02520 if ( this != &object ) {
02521 setCounted( castObjectImpl( dynamic_cast<ObjectImpl*>( object.getCounted( false ) ) ) );
02522 }
02523 return *this;
02524 }
02525
02526 operator bool () const
02527 {
02528 return getCounted( false ) != NULL;
02529 }
02530
02531 TUserI* operator -> () const
02532 {
02533 return dynamic_cast<TUserI*>( getCounted() );
02534 }
02535
02536
02537 friend ExtensionManager;
02538 };
02539
02540 };
02541
02542 #endif // Extensions_h