8#ifndef model_NetworkLink_H_
9#define model_NetworkLink_H_
22#define VerboseNetworkLink(N,x) if(verboseLevel>=N){std::cout<<magentaColor<<x<<defaultColor;}
24#define VerboseNetworkLink(N,x)
29 template<
typename Derived>
32 ,
public NetworkBase<Derived,std::pair<size_t,size_t>>
33 ,
private std::set<typename TypeTraits<Derived>::LoopLinkType*>
124 const std::shared_ptr<NetworkNodeType>
source;
125 const std::shared_ptr<NetworkNodeType>
sink;
132 const std::shared_ptr<NetworkNodeType>& nI,
133 const std::shared_ptr<NetworkNodeType>& nJ) :
138 VerboseNetworkLink(1,
"Constructing NetworkLink "<<
tag()<<std::endl);
142 throw std::runtime_error(
" Source and Sinks are equal for the node "+std::to_string(
source->sID));
147 sink->addToNeighborhood(this->
p_derived());
155 VerboseNetworkLink(1,
"Destroying NetworkLink "<<
tag()<<std::endl);
160 sink->removeFromNeighborhood(this->
p_derived());
181 std::set<LoopType *>
temp;
184 temp.insert(ll->loop.get());
191 std::set<size_t>
temp;
192 for (
const auto &loopIter :
loops())
194 temp.insert(loopIter->sID);
202 return getKey(pL->source->networkNode,pL->sink->networkNode);
207 const std::shared_ptr<NetworkNodeType>& Nj)
209 return getKey(Ni->sID,Nj->sID);
238 throw std::runtime_error(
"Could not insert LoopLink in NetworkLink");
245 const size_t erased=
loopLinks().erase(pL);
248 throw std::runtime_error(
"Could not erase LoopLink from NetworkLink");
255 return std::to_string(
source->sID)+
"->"+std::to_string(
sink->sID);
260 template<
typename Derived>
Derived * p_derived()
A pointer to the derived object.
CRTP()
The default constructor.
NetworkBase(const NetworkBase< LoopNetworkType, KeyType > &)=delete
std::pair< size_t, size_t > KeyType
const LoopLinkContainerType & loopLinks() const
std::set< size_t > loopIDs() const
NetworkBase< Derived, std::pair< size_t, size_t > > NetworkBaseType
void removeLoopLink(LoopLinkType *const pL)
TypeTraits< Derived >::LoopType LoopType
std::set< LoopType * > loops() const
const std::shared_ptr< NetworkNodeType > source
NetworkLink(LoopNetworkType *const loopNetwork, const std::shared_ptr< NetworkNodeType > &nI, const std::shared_ptr< NetworkNodeType > &nJ)
std::set< LoopLinkType * > LoopLinkContainerType
const std::shared_ptr< NetworkNodeType > sink
TypeTraits< Derived >::LoopNetworkType LoopNetworkType
LoopLinkContainerType & loopLinks()
TypeTraits< Derived >::LoopNodeType LoopNodeType
TypeTraits< Derived >::NetworkNodeType NetworkNodeType
static NetworkBaseType::KeyType getKey(const size_t &i, const size_t &j)
void addLoopLink(LoopLinkType *const pL)
static NetworkBaseType::KeyType getKey(const std::shared_ptr< NetworkNodeType > &Ni, const std::shared_ptr< NetworkNodeType > &Nj)
static NetworkBaseType::KeyType getKey(const LoopLinkType *const pL)
TypeTraits< Derived >::LoopLinkType LoopLinkType
const size_t sID
The static ID of this.
enum insertvertexresult success