torc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
torc::generic::_impl::Copier< class InterfaceJoinedInfo > Class Template Referenceabstract

#include <Cloning.hpp>

+ Inheritance diagram for torc::generic::_impl::Copier< class InterfaceJoinedInfo >:
+ Collaboration diagram for torc::generic::_impl::Copier< class InterfaceJoinedInfo >:

Public Types

typedef InterfaceJoinedInfo Type
 
typedef boost::shared_ptr< TypePointer
 

Public Member Functions

Pointer operator() (const Pointer &inSource, const ObjectFactorySharedPtr &inFactory, const ViewSharedPtr &inView) throw (Error)
 
void visit (InterfaceJoinedInfo &inInterfaceJoinedInfo) throw (Error)
 
 Copier ()
 
 ~Copier () throw ()
 
virtual void visit (_Tp &client)=0 throw (Error)
 

Private Attributes

ObjectFactorySharedPtr mFactory
 
Pointer mReturnVal
 
ViewSharedPtr mView
 

Detailed Description

template<>
class torc::generic::_impl::Copier< class InterfaceJoinedInfo >

Definition at line 2362 of file Cloning.hpp.

Member Typedef Documentation

typedef boost::shared_ptr<Type> torc::generic::_impl::Copier< class InterfaceJoinedInfo >::Pointer

Definition at line 2365 of file Cloning.hpp.

Constructor & Destructor Documentation

torc::generic::_impl::Copier< class InterfaceJoinedInfo >::~Copier ( )
throw (
)
inline

Definition at line 2437 of file Cloning.hpp.

2437  {
2438  }

Member Function Documentation

Pointer torc::generic::_impl::Copier< class InterfaceJoinedInfo >::operator() ( const Pointer inSource,
const ObjectFactorySharedPtr inFactory,
const ViewSharedPtr inView 
)
throw (Error
)
inline

Definition at line 2367 of file Cloning.hpp.

2368  {
2369  mFactory = inFactory;
2370  mView = inView;
2371  inSource->accept(*this);
2372  return mReturnVal;
2373  }
template<typename _Tp >
virtual void torc::generic::VisitorType< _Tp >::visit ( _Tp &  client)
throw (Error
)
pure virtualinherited

Visit the target object. This will typically be a derived leaf type.

Parameters
[in,out]clientA reference to the target object
Exceptions
ErrorException generated by any of the functions called from inside visit()

+ Here is the caller graph for this function:

void torc::generic::_impl::Copier< class InterfaceJoinedInfo >::visit ( InterfaceJoinedInfo inInterfaceJoinedInfo)
throw (Error
)
inline

Definition at line 2375 of file Cloning.hpp.

2375  {
2376  try {
2377  InterfaceJoinedInfoSharedPtr joinedInfoPtr;
2378  mFactory->create(joinedInfoPtr);
2379  joinedInfoPtr->setJoinedType(inInterfaceJoinedInfo.getJoinedType());
2380 
2381  std::list<PortSharedPtr> outPorts;
2382  inInterfaceJoinedInfo.getPorts(outPorts);
2383  std::list<PortSharedPtr>::iterator portIt = outPorts.begin();
2384  for(; portIt != outPorts.end(); ++portIt) {
2385  PortSharedPtr actualPort = *portIt;
2386  PortSharedPtr port = actualPort;
2387  std::vector < std::string > nestedNames;
2388  while(port) {
2389  if(eCompositionTypeVectorBit != port->getCompositionType())
2390  nestedNames.push_back(port->getName());
2391  port = port->getParentCollection();
2392  }
2393  std::string portName = *nestedNames.rbegin();
2394  PortSharedPtr targetPort = mView->findPort(portName);
2395  if(nestedNames.size() > 1) {
2396  findLeafConnectable(nestedNames, targetPort);
2397  }
2398  std::vector < size_t > indices;
2399  if(eCompositionTypeVectorBit == actualPort->getCompositionType()) {
2400  targetPort = targetPort->get(IndexFinder<Port, VectorPortBit>()(actualPort));
2401  indices = IndexFinder<Port, VectorNetBit>()(actualPort);
2402  }
2403  if(!indices.empty()) {
2404  targetPort = targetPort->get(indices);
2405  }
2406 
2407  joinedInfoPtr->addPort(targetPort);
2408  }
2409 
2410  std::list<PortListSharedPtr> outPortLists;
2411  inInterfaceJoinedInfo.getPortLists(outPortLists);
2412  std::list<PortListSharedPtr>::iterator portListIt = outPortLists.begin();
2413  for(; portListIt != outPortLists.end(); ++portListIt) {
2414  PortListSharedPtr newPortList = clone(*portListIt, mFactory);
2415  joinedInfoPtr->addPortList(newPortList);
2416  }
2417 
2418  std::vector<InterfaceJoinedInfoSharedPtr> outJoinedInfos;
2419  inInterfaceJoinedInfo.getChildren(outJoinedInfos);
2420  for(std::vector<InterfaceJoinedInfoSharedPtr>::iterator it = outJoinedInfos.begin();
2421  it != outJoinedInfos.end(); ++it) {
2422  InterfaceJoinedInfoSharedPtr childJoinedInfo = cloneJoinedInfo(*it, mFactory,
2423  mView);
2424  joinedInfoPtr->addChildJoinedInfo(childJoinedInfo);
2425  }
2426 
2427  mReturnVal = joinedInfoPtr;
2428  } catch(Error& e) {
2429  e.setCurrentLocation(__FUNCTION__, __FILE__, __LINE__);
2430  throw;
2431  }
2432  }
void findLeafConnectable(std::vector< std::string > &nestedNames, boost::shared_ptr< _Connectable > &conn)
std::string string
boost::shared_ptr< _Tp > clone(const boost::shared_ptr< _Tp > &inPointer, const ObjectFactorySharedPtr &inFactory)
Definition: Cloning.hpp:63
boost::shared_ptr< PortList > PortListSharedPtr
boost::shared_ptr< _Tp > cloneJoinedInfo(const boost::shared_ptr< _Tp > &inPointer, const ObjectFactorySharedPtr &inFactory, const ViewSharedPtr &inView)
Definition: Cloning.hpp:73
boost::shared_ptr< InterfaceJoinedInfo > InterfaceJoinedInfoSharedPtr
boost::shared_ptr< Port > PortSharedPtr

+ Here is the call graph for this function:

Field Documentation

Definition at line 2441 of file Cloning.hpp.

Definition at line 2442 of file Cloning.hpp.

Definition at line 2443 of file Cloning.hpp.


The documentation for this class was generated from the following file: