00001 #include "stdafx.h"
00002
00003 #include "BON.h"
00004 #include "BONImpl.h"
00005
00006
00007 #include "ConnJoint.h"
00008 #include "ConnectionRep.h"
00009 #include "logger.h"
00010 #include "ModelRep.h"
00011 #include "ReferenceRep.h"
00012 #include "Dumper.h"
00013 #include "CodeGen.h"
00014
00015 #include "algorithm"
00016
00017 #include "globals.h"
00018 extern Globals global_vars;
00019 extern int ind;
00020
00021 std::string ConnJoint::m_srcLabel = "src";
00022 std::string ConnJoint::m_dstLabel = "dst";
00023
00024
00025 ConnJoint::ConnJoint
00026 ( ConnectionRep * ptr,
00027 const SDList& op1,
00028 const SDList& op2,
00029 bool bidirect,
00030 std::string card1 ,
00031 std::string card2
00032 )
00033 : m_connPtr( ptr)
00034
00035 , m_oper1( op1)
00036 , m_oper2( op2)
00037
00038 , m_oper1TargetMap()
00039 , m_oper2TargetMap()
00040
00041 , m_bidirect( bidirect)
00042
00043 , m_oper1Card( card1)
00044 , m_oper2Card( card2)
00045
00046 , m_srcLCD()
00047 , m_dstLCD()
00048
00049 , m_oper1IsAnyReferencePort( false)
00050 , m_oper2IsAnyReferencePort( false)
00051 { }
00052
00053
00054 ConnJoint::ConnJoint( const ConnJoint& peer)
00055 : m_connPtr( peer.m_connPtr)
00056
00057 , m_oper1( peer.m_oper1)
00058 , m_oper2( peer.m_oper2)
00059
00060 , m_oper1TargetMap( peer.m_oper1TargetMap)
00061 , m_oper2TargetMap( peer.m_oper2TargetMap)
00062
00063 , m_bidirect( peer.m_bidirect)
00064
00065 , m_oper1Card( peer.m_oper1Card)
00066 , m_oper2Card( peer.m_oper2Card)
00067
00068 , m_srcLCD( peer.m_srcLCD)
00069 , m_dstLCD( peer.m_dstLCD)
00070
00071 , m_oper1IsAnyReferencePort( peer.m_oper1IsAnyReferencePort)
00072 , m_oper2IsAnyReferencePort( peer.m_oper2IsAnyReferencePort)
00073 { }
00074
00075
00076 const ConnJoint& ConnJoint::operator=( const ConnJoint& peer)
00077 {
00078 if ( this == &peer ) return *this;
00079 m_connPtr = peer.m_connPtr;
00080
00081 m_oper1 = peer.m_oper1;
00082 m_oper2 = peer.m_oper2;
00083
00084 m_oper1TargetMap = peer.m_oper1TargetMap;
00085 m_oper2TargetMap = peer.m_oper2TargetMap;
00086
00087 m_bidirect = peer.m_bidirect;
00088
00089 m_oper1Card = peer.m_oper1Card;
00090 m_oper2Card = peer.m_oper2Card;
00091
00092 m_srcLCD = peer.m_srcLCD;
00093 m_dstLCD = peer.m_dstLCD;
00094
00095 m_oper1IsAnyReferencePort = peer.m_oper1IsAnyReferencePort;
00096 m_oper2IsAnyReferencePort = peer.m_oper2IsAnyReferencePort;
00097
00098 return *this;
00099 }
00100
00101
00102 ConnJoint::~ConnJoint()
00103 {
00104 m_connPtr = 0;
00105
00106 m_oper1.clear();
00107 m_oper2.clear();
00108
00109 m_oper1TargetMap.clear();
00110 m_oper2TargetMap.clear();
00111
00112 m_srcLCD.clear();
00113 m_dstLCD.clear();
00114 }
00115
00116
00117
00118 void ConnJoint::setConnectionPtr( ConnectionRep * conn_ptr)
00119 {
00120 m_connPtr = conn_ptr;
00121 }
00122
00123
00124 const ConnJoint::SDList& ConnJoint::getOp1() const { return m_oper1; }
00125 const ConnJoint::SDList& ConnJoint::getOp2() const { return m_oper2; }
00126
00127
00128 bool ConnJoint::isBidirect() const { return m_bidirect; }
00129
00130
00131 void ConnJoint::addTargetItem( int i, const ModelRep * model, const PointerItem & item)
00132 {
00133 PointerItemSeries * series;
00134 if (i==0) series = &m_oper1TargetMap[model];
00135 else series = &m_oper2TargetMap[model];
00136
00137 if ( std::find( series->begin(), series->end(), item)
00138 == series->end())
00139 series->push_back( item);
00140
00141
00142 }
00143
00144
00145 void ConnJoint::addTargetItem( int i, const ModelRep * model, const RoleRep & new_role)
00146 {
00147 PointerItem item (new_role.getSmartRoleName(), new_role.getFCOPtr());
00148 addTargetItem( i, model, item);
00149 }
00150
00151
00152 void ConnJoint::addTargetItem( int i, const ModelRep * model, const RoleRep::RoleRepSeries & new_role_series)
00153 {
00154 RoleRep::RoleRepSeries_ConstIterator r_it = new_role_series.begin();
00155 for( ; r_it != new_role_series.end(); ++r_it)
00156 addTargetItem( i, model, *r_it);
00157 }
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188 void ConnJoint::intInherit( ModelRep * mod_ptr)
00189 {
00190 std::string con_name = m_connPtr->getName();
00191 std::string mod_name = mod_ptr->getName();
00192
00193 const int number_of_endpoints = 2;
00194 bool reference_ports_also[ number_of_endpoints] = { false, false };
00195
00196 TargetMap * target_map[ number_of_endpoints] = { &m_oper1TargetMap, &m_oper2TargetMap };
00197
00198 std::vector<ModelRep*> inner_models1 = mod_ptr->getInnerModelsFinal();
00199
00200 std::vector< const ModelRep*> inner_models( inner_models1.size());
00201 std::copy( inner_models1.begin(), inner_models1.end(), inner_models.begin());
00202
00203 std::vector<ReferenceRep*> inner_modelreferences = mod_ptr->getInnerModelReferencesFinal();
00204 std::vector<ReferenceRep*>::iterator model_ref_it = inner_modelreferences.begin();
00205 for( ; model_ref_it != inner_modelreferences.end(); ++model_ref_it)
00206 {
00207 std::string m_r_n = (*model_ref_it)->getName();
00208
00209 std::vector<const ModelRep *> models_ref_refers = (*model_ref_it)->getModelRefVector();
00210 std::vector<const ModelRep *>::iterator ref_model_it = models_ref_refers.begin();
00211 for( ; ref_model_it != models_ref_refers.end(); ++ref_model_it)
00212 {
00213 std::string r_m_n = (*ref_model_it)->getName();
00214 if ( std::find( inner_models.begin(), inner_models.end(), *ref_model_it) == inner_models.end())
00215 inner_models.push_back( *ref_model_it);
00216 }
00217 }
00218
00219
00220
00221
00222 SDList* targets[ number_of_endpoints] = { &m_oper1, &m_oper2 };
00223
00224 for( int i = 0; i < number_of_endpoints; ++i)
00225 {
00226 SDList_Iterator op_it = targets[i]->begin();
00227 for( ; op_it != targets[i]->end(); ++op_it)
00228 {
00229 FCO* target_ptr = *op_it;
00230
00231 std::vector<FCO*> descendants;
00232
00233
00234 target_ptr->getIntDescendants( descendants);
00235 descendants.push_back( target_ptr);
00236
00237 std::vector<FCO*>::reverse_iterator desc_it = descendants.rbegin();
00238
00239 for( ; desc_it != descendants.rend(); ++desc_it)
00240 {
00241 FCO * fco = *desc_it;
00242 std::string fco_name = fco->getName();
00243
00244
00245 if ( !fco->isAbstract() )
00246 {
00247
00248
00249 RoleRep::RoleRepSeries series;
00250 bool has_some = mod_ptr->getFinalRoles( fco, series);
00251 if ( has_some && !series.empty())
00252 {
00253
00254 this->addTargetItem( i, mod_ptr, series);
00255 }
00256
00257 std::vector<const ModelRep*>::iterator sub_mod_it = inner_models.begin();
00258 for(; sub_mod_it != inner_models.end(); ++sub_mod_it)
00259 {
00260 const ModelRep * sub_model = *sub_mod_it;
00261 std::string sm_name = sub_model->getName();
00262
00263 RoleRep::RoleRepSeries roles_in_sub_model;
00264 bool has_some = sub_model->getFinalRoles( fco, roles_in_sub_model);
00265 RoleRep::RoleRepSeries_ConstIterator r_it = roles_in_sub_model.begin();
00266 for( ; has_some && r_it != roles_in_sub_model.end(); ++r_it)
00267 {
00268 RoleRep sub_role = *r_it;
00269
00270 if ( sub_role.isPort())
00271 {
00272 if ( sub_model->getMyKind() == Any::MODEL && !sub_model->isAbstract())
00273 {
00274
00275 RoleRep::RoleRepSeries sub_model_roles_in_model;
00276 bool has_some_subm = mod_ptr->getFinalRoles( sub_model, sub_model_roles_in_model );
00277 RoleRep::RoleRepSeries_ConstIterator r_it_sm = sub_model_roles_in_model.begin();
00278 for( ; has_some_subm && r_it_sm != sub_model_roles_in_model.end(); ++r_it_sm )
00279 {
00280 std::string desc_sub_model_role_name = r_it_sm->getSmartRoleName();
00281 PointerItem item = desc_sub_model_role_name + " " + sub_role.getSmartRoleName();
00282 this->addTargetItem( i, mod_ptr, item);
00283 }
00284
00285 const FCO::ReferenceRepList &ref_list = sub_model->getTransitiveReferencesToMe();
00286 FCO::ReferenceRepList_ConstIterator ref_it = ref_list.begin();
00287 for( ; ref_it != ref_list.end(); ++ref_it)
00288 {
00289 if( !(*ref_it)->isAbstract() && (*ref_it)->amIPartOfFinal( mod_ptr) )
00290 {
00291 RoleRep::RoleRepSeries sub_ref_roles_in_model;
00292 bool ref_has_roles = mod_ptr->getFinalRoles( *ref_it, sub_ref_roles_in_model );
00293 RoleRep::RoleRepSeries_ConstIterator r_it_ref = sub_ref_roles_in_model.begin();
00294 for( ; ref_has_roles && r_it_ref != sub_ref_roles_in_model.end(); ++r_it_ref )
00295 {
00296 std::string desc_sub_ref_role_name = r_it_ref->getSmartRoleName();
00297 PointerItem item = desc_sub_ref_role_name + " " + sub_role.getSmartRoleName();
00298 this->addTargetItem( i, mod_ptr, item);
00299 reference_ports_also[i] = true;
00300 }
00301
00302
00303
00304
00305
00306 }
00307 }
00308 }
00309 }
00310 }
00311 }
00312 }
00313 }
00314 }
00315 }
00316
00317 m_oper1IsAnyReferencePort = m_oper1IsAnyReferencePort || reference_ports_also[0];
00318 m_oper2IsAnyReferencePort = m_oper2IsAnyReferencePort || reference_ports_also[1];
00319 }
00320
00321
00322 bool ConnJoint::checkElements( std::string connection_name)
00323 {
00324 bool res = true;
00325 const int number_of_lists = 2;
00326 const int number_of_endpoints = 2;
00327
00328 const SDList* lists [ number_of_endpoints]=
00329 {
00330 &m_oper1, &m_oper2
00331 };
00332
00333 for( int i = 0; i < number_of_endpoints; ++i)
00334 {
00335 SDList_ConstIterator fco_it = lists[i]->begin();
00336
00337 for( ; fco_it != lists[i]->end(); ++fco_it)
00338 {
00339 FCO * member_ptr = *fco_it;
00340
00341 if ( !member_ptr->checkIsPartOfFinal() && !member_ptr->isAbstract())
00342 {
00343 global_vars.err << "CHECK: \"" << member_ptr->getName() << "\" fco in connection \"" << connection_name << "\" is not contained by any model.\n";
00344 res = false;
00345 }
00346 }
00347 }
00348 return res;
00349 }
00350
00351
00352 bool ConnJoint::calcLCD()
00353 {
00354 if (!m_bidirect && !m_oper1.empty())
00355 {
00356 m_srcLCD = FCO::lcdIntersect( m_oper1);
00357 }
00358 if (!m_bidirect && !m_oper2.empty())
00359 {
00360 m_dstLCD = FCO::lcdIntersect( m_oper2);
00361 }
00362 if (!m_bidirect)
00363 {
00364 std::string mmm = "Src lcd: ";
00365 std::vector<FCO*>::iterator it = m_srcLCD.begin();
00366 for(; it != m_srcLCD.end(); ++it)
00367 {
00368 mmm += (*it)->getName() + "\t";
00369 }
00370 mmm += "\nDst lcd: ";
00371 it = m_dstLCD.begin();
00372 for(; it != m_dstLCD.end(); ++it)
00373 {
00374 mmm += (*it)->getName() + "\t";
00375 }
00376
00377 }
00378 if (m_bidirect)
00379 {
00380 SDList union_list = m_oper1;
00381 union_list.insert( union_list.end(), m_oper2.begin(), m_oper2.end());
00382 m_srcLCD = FCO::lcdIntersect( union_list);
00383
00384 std::string mmm = "Src/dst lcd: ";
00385 SDList_Iterator it = m_srcLCD.begin();
00386 for(; it != m_srcLCD.end(); ++it)
00387 {
00388 mmm += (*it)->getName() + "\t";
00389 }
00390
00391 }
00392 return true;
00393 }
00394
00395
00396 bool ConnJoint::createLinkGetters()
00397 {
00398
00399
00400
00401 if ( !m_bidirect)
00402 {
00403 if ( FCO::equal( m_oper1, m_oper2))
00404 {
00405 SDList_Iterator op1_it = m_oper1.begin();
00406 for( ; op1_it != m_oper1.end(); ++op1_it)
00407 {
00408 if ( (*op1_it)->isToBeEx())
00409 {
00410 if ( Dumper::m_bGenTemplates)
00411 {
00412 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionLinksGeneric( *op1_it, m_connPtr));
00413 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionLinksGeneric( *op1_it, m_connPtr));
00414 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinksGeneric( *op1_it, m_connPtr));
00415 }
00416
00417 if ( Dumper::m_bGenRegular)
00418 {
00419 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionLinks( *op1_it, m_connPtr));
00420 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionLinks( *op1_it, m_connPtr));
00421 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinks( *op1_it, m_connPtr));
00422 }
00423 }
00424 }
00425 }
00426 else
00427 {
00428 SDList_Iterator op1_it = m_oper1.begin();
00429 for( ; op1_it != m_oper1.end(); ++op1_it)
00430 {
00431 if ( (*op1_it)->isToBeEx())
00432 {
00433 if ( Dumper::m_bGenTemplates)
00434 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionLinksGeneric( *op1_it, m_connPtr));
00435
00436 if ( Dumper::m_bGenRegular)
00437 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionLinks( *op1_it, m_connPtr));
00438 }
00439 }
00440 SDList_Iterator op2_it = m_oper2.begin();
00441 for( ; op2_it != m_oper2.end(); ++op2_it)
00442 {
00443 if ( (*op2_it)->isToBeEx())
00444 {
00445 if ( Dumper::m_bGenTemplates)
00446 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionLinksGeneric( *op2_it, m_connPtr));
00447
00448 if ( Dumper::m_bGenRegular)
00449 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionLinks( *op2_it, m_connPtr));
00450 }
00451 }
00452 }
00453 }
00454 else
00455 {
00456 if ( FCO::equal( m_oper1, m_oper2))
00457 {
00458 SDList_Iterator op1_it = m_oper1.begin();
00459 for( ; op1_it != m_oper1.end(); ++op1_it)
00460 if ( (*op1_it)->isToBeEx())
00461 {
00462 if ( Dumper::m_bGenTemplates)
00463 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinksGeneric( *op1_it, m_connPtr));
00464
00465 if ( Dumper::m_bGenRegular)
00466 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinks( *op1_it, m_connPtr));
00467 }
00468 }
00469 else
00470 {
00471 SDList_Iterator op1_it = m_oper1.begin();
00472 for( ; op1_it != m_oper1.end(); ++op1_it)
00473 if ( (*op1_it)->isToBeEx())
00474 {
00475 if ( Dumper::m_bGenTemplates)
00476 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinksGeneric( *op1_it, m_connPtr));
00477
00478 if ( Dumper::m_bGenRegular)
00479 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinks( *op1_it, m_connPtr));
00480 }
00481
00482 SDList_Iterator op2_it = m_oper2.begin();
00483 for( ; op2_it != m_oper2.end(); ++op2_it)
00484 if ( (*op2_it)->isToBeEx())
00485 {
00486 if ( Dumper::m_bGenTemplates)
00487 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinksGeneric( *op2_it, m_connPtr));
00488
00489 if ( Dumper::m_bGenRegular)
00490 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionLinks( *op2_it, m_connPtr));
00491 }
00492 }
00493 }
00494 return true;
00495 }
00496
00497
00498 bool ConnJoint::createSrcDstGetters()
00499 {
00500
00501
00502
00503
00504 if ( !m_bidirect)
00505 {
00506 SDList_Iterator op1_it = m_oper1.begin();
00507 for( ; op1_it != m_oper1.end(); ++op1_it)
00508 m_connPtr->addMethod( CodeGen::dumpGetSrc( *op1_it, m_connPtr, m_oper1IsAnyReferencePort));
00509
00510 SDList_Iterator op2_it = m_oper2.begin();
00511 for( ; op2_it != m_oper2.end(); ++op2_it)
00512 m_connPtr->addMethod( CodeGen::dumpGetDst( *op2_it, m_connPtr, m_oper2IsAnyReferencePort));
00513 }
00514 else
00515 {
00516 if ( !m_srcLCD.empty())
00517 {
00518 std::vector<FCO*>::iterator return_value_it = m_srcLCD.begin();
00519 for( ; return_value_it != m_srcLCD.end(); ++return_value_it)
00520 {
00521 m_connPtr->addMethod( CodeGen::dumpGetSrc( *return_value_it, m_connPtr, m_oper1IsAnyReferencePort));
00522 m_connPtr->addMethod( CodeGen::dumpGetDst( *return_value_it, m_connPtr, m_oper2IsAnyReferencePort));
00523 }
00524 }
00525 else
00526 {
00527 m_connPtr->addMethod( CodeGen::dumpGetSrc( 0, m_connPtr, m_oper1IsAnyReferencePort));
00528 m_connPtr->addMethod( CodeGen::dumpGetDst( 0, m_connPtr, m_oper2IsAnyReferencePort));
00529 }
00530 }
00531 return true;
00532 }
00533
00534
00535 bool ConnJoint::createEndGetters()
00536 {
00537
00538
00539
00540
00541 if ( !m_bidirect)
00542 {
00543
00544 SDList_Iterator op1_it = m_oper1.begin();
00545 for( ; op1_it != m_oper1.end(); ++op1_it)
00546 {
00547 if ( (*op1_it)->isToBeEx())
00548 {
00549 if ( !m_dstLCD.empty())
00550 {
00551 SDList_Iterator peer_it = m_dstLCD.begin();
00552 for( ; peer_it != m_dstLCD.end(); ++peer_it)
00553 {
00554 FCO* peer_ptr = 0;
00555 if ( (*peer_it)->isToBeEx())
00556 peer_ptr = *peer_it;
00557 else if ( (*peer_it)->getExtedAnc())
00558 peer_ptr = (*peer_it)->getExtedAnc();
00559
00560 if ( Dumper::m_bGenTemplates)
00561 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00562
00563 if ( Dumper::m_bGenRegular)
00564 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00565 }
00566 }
00567 else
00568 {
00569 if ( Dumper::m_bGenTemplates)
00570 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00571
00572 if ( Dumper::m_bGenRegular)
00573 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00574 }
00575 }
00576 }
00577
00578 SDList_Iterator op2_it = m_oper2.begin();
00579 for( ; op2_it != m_oper2.end(); ++op2_it)
00580 {
00581 if ( (*op2_it)->isToBeEx())
00582 {
00583 if ( !m_srcLCD.empty())
00584 {
00585 std::vector<FCO*>::iterator peer_it = m_srcLCD.begin();
00586 for( ; peer_it != m_srcLCD.end(); ++peer_it)
00587 {
00588 FCO* peer_ptr = 0;
00589 if ( (*peer_it)->isToBeEx())
00590 peer_ptr = *peer_it;
00591 else if ( (*peer_it)->getExtedAnc())
00592 peer_ptr = (*peer_it)->getExtedAnc();
00593
00594 if ( Dumper::m_bGenTemplates)
00595 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00596
00597 if ( Dumper::m_bGenRegular)
00598 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00599 }
00600 }
00601 else
00602 {
00603 if ( Dumper::m_bGenTemplates)
00604 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00605
00606 if ( Dumper::m_bGenRegular)
00607 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00608 }
00609 }
00610 }
00611 }
00612 else if ( m_bidirect)
00613 {
00614 if ( !m_srcLCD.empty())
00615 {
00616 if ( FCO::equal( m_oper1, m_oper2))
00617 {
00618 std::vector<FCO*>::iterator it = m_srcLCD.begin();
00619 for( ; it != m_srcLCD.end(); ++it)
00620 {
00621 FCO * peer_ptr = 0;
00622 if ( (*it)->isToBeEx())
00623 peer_ptr = *it;
00624 else if ( (*it)->getExtedAnc())
00625 peer_ptr = (*it)->getExtedAnc();
00626
00627 SDList_Iterator op1_it = m_oper1.begin();
00628 for( ; op1_it != m_oper1.end(); ++op1_it)
00629 {
00630 if ( (*op1_it)->isToBeEx())
00631 {
00632 if ( Dumper::m_bGenTemplates)
00633 {
00634 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00635
00636 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00637 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00638 }
00639
00640 if ( Dumper::m_bGenRegular)
00641 {
00642 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00643
00644 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00645 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00646 }
00647 }
00648 }
00649 }
00650 }
00651 else
00652 {
00653 std::vector<FCO*>::iterator it = m_srcLCD.begin();
00654 for( ; it != m_srcLCD.end(); ++it)
00655 {
00656 FCO * peer_ptr = 0;
00657 if ( (*it)->isToBeEx())
00658 peer_ptr = *it;
00659 else if ( (*it)->getExtedAnc())
00660 peer_ptr = (*it)->getExtedAnc();
00661
00662 SDList_Iterator op1_it = m_oper1.begin();
00663 for( ; op1_it != m_oper1.end(); ++op1_it)
00664 {
00665 if ( (*op1_it)->isToBeEx())
00666 {
00667 if ( Dumper::m_bGenTemplates)
00668 {
00669 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00670
00671 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00672 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00673 }
00674
00675 if ( Dumper::m_bGenRegular)
00676 {
00677 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00678
00679 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00680 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op1_it, peer_ptr, m_connPtr, m_oper2IsAnyReferencePort));
00681 }
00682 }
00683 }
00684
00685 SDList_Iterator op2_it = m_oper2.begin();
00686 for( ; op2_it != m_oper2.end(); ++op2_it)
00687 {
00688 if ( (*op2_it)->isToBeEx())
00689 {
00690 if ( Dumper::m_bGenTemplates)
00691 {
00692 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionEndGeneric( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00693
00694 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00695 (*op2_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00696 }
00697
00698 if ( Dumper::m_bGenRegular)
00699 {
00700 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionEnd( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00701
00702 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00703 (*op2_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op2_it, peer_ptr, m_connPtr, m_oper1IsAnyReferencePort));
00704 }
00705 }
00706 }
00707 }
00708 }
00709 }
00710 else
00711 {
00712 SDList_Iterator op1_it = m_oper1.begin();
00713 for( ; op1_it != m_oper1.end(); ++op1_it)
00714 {
00715 if ( (*op1_it)->isToBeEx())
00716 {
00717 if ( Dumper::m_bGenTemplates)
00718 {
00719 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEndGeneric( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00720 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00721 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00722 }
00723
00724 if ( Dumper::m_bGenRegular)
00725 {
00726 (*op1_it)->addConnMethod( CodeGen::dumpGetBothConnectionEnd( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00727 (*op1_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00728 (*op1_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op1_it, 0, m_connPtr, m_oper2IsAnyReferencePort));
00729 }
00730 }
00731 }
00732
00733 SDList_Iterator op2_it = m_oper2.begin();
00734 for( ; op2_it != m_oper2.end(); ++op2_it)
00735 {
00736 if ( (*op2_it)->isToBeEx())
00737 {
00738 if ( Dumper::m_bGenTemplates)
00739 {
00740 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionEndGeneric( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00741 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEndGeneric( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00742 (*op2_it)->addConnMethod( CodeGen::dumpGetOutConnectionEndGeneric( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00743 }
00744
00745 if ( Dumper::m_bGenRegular)
00746 {
00747 (*op2_it)->addConnMethod( CodeGen::dumpGetBothConnectionEnd( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00748 (*op2_it)->addConnMethod( CodeGen::dumpGetInConnectionEnd( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00749 (*op2_it)->addConnMethod( CodeGen::dumpGetOutConnectionEnd( *op2_it, 0, m_connPtr, m_oper1IsAnyReferencePort));
00750 }
00751 }
00752 }
00753 }
00754 }
00755 return true;
00756 }
00757