(kv.second)->destroy();
delete links;
}
-
- /*************
- * Callbacks *
- *************/
-
- simgrid::xbt::signal<void(LinkImpl*)> LinkImpl::onCreation;
- simgrid::xbt::signal<void(LinkImpl*)> LinkImpl::onDestruction;
- simgrid::xbt::signal<void(LinkImpl*)> LinkImpl::onStateChange;
-
- simgrid::xbt::signal<void(NetworkAction*, Action::State, Action::State)> networkActionStateChangedCallbacks;
- simgrid::xbt::signal<void(NetworkAction*, s4u::Host* src, s4u::Host* dst)> LinkImpl::onCommunicate;
}
}
************/
LinkImpl::LinkImpl(simgrid::surf::NetworkModel* model, const char* name, lmm_constraint_t constraint)
- : Resource(model, name, constraint), piface_(Link(this))
+ : Resource(model, name, constraint), piface_(this)
{
if (strcmp(name,"__loopback__"))
{
if (!currentlyDestroying_) {
currentlyDestroying_ = true;
- onDestruction(this);
+ s4u::Link::onDestruction(this->piface_);
delete this;
}
}
{
if (isOff()) {
Resource::turnOn();
- onStateChange(this);
+ s4u::Link::onStateChange(this->piface_);
}
}
void LinkImpl::turnOff()
{
if (isOn()) {
Resource::turnOff();
- onStateChange(this);
+ s4u::Link::onStateChange(this->piface_);
}
}
void LinkImpl::setStateTrace(tmgr_trace_t trace)
* Action *
**********/
- void NetworkAction::setState(Action::State state){
- Action::State old = getState();
+ void NetworkAction::setState(Action::State state)
+ {
Action::setState(state);
- networkActionStateChangedCallbacks(this, old, state);
+ s4u::Link::onCommunicationStateChange(this);
}
+ /** @brief returns a list of all Links that this action is using */
+ std::list<LinkImpl*> NetworkAction::links()
+ {
+ std::list<LinkImpl*> retlist;
+ lmm_system_t sys = getModel()->getMaxminSystem();
+ int llen = lmm_get_number_of_cnst_from_var(sys, getVariable());
+
+ for (int i = 0; i < llen; i++) {
+ /* Beware of composite actions: ptasks put links and cpus together */
+ // extra pb: we cannot dynamic_cast from void*...
+ Resource* resource = static_cast<Resource*>(lmm_constraint_id(lmm_get_cnst_from_var(sys, getVariable(), i)));
+ LinkImpl* link = dynamic_cast<LinkImpl*>(resource);
+ if (link != nullptr)
+ retlist.push_back(link);
+ }
+
+ return retlist;
+ }
}
}