X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a8b29f2bc452ad2be0c7285e98f3bf7026d0ce6d..b356ce9a510410f879eb3cd1b16b33856aebfdbe:/src/surf/network_interface.cpp diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 5a2e56d3c6..f88f52b66e 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -14,66 +14,27 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network, surf, "Logging specific to the SURF network module"); -/********* - * C API * - *********/ - -extern "C" { - - const char* sg_link_name(Link *link) { - return link->getName(); - } - Link * sg_link_by_name(const char* name) { - return Link::byName(name); - } - - int sg_link_is_shared(Link *link){ - return link->sharingPolicy(); - } - double sg_link_bandwidth(Link *link){ - return link->bandwidth(); - } - double sg_link_latency(Link *link){ - return link->latency(); - } - void* sg_link_data(Link *link) { - return link->getData(); - } - void sg_link_data_set(Link *link,void *data) { - link->setData(data); - } - int sg_link_count() { - return Link::linksCount(); - } - Link** sg_link_list() { - return Link::linksList(); - } - void sg_link_exit() { - Link::linksExit(); - } - -} - -/***************** - * List of links * - *****************/ - namespace simgrid { namespace surf { - std::unordered_map *Link::links = new std::unordered_map(); - Link *Link::byName(const char* name) { - if (links->find(name) == links->end()) - return nullptr; - return links->at(name); - } - /** @brief Returns the amount of links in the platform */ - int Link::linksCount() { - return links->size(); + /* List of links */ + std::unordered_map* LinkImpl::links = new std::unordered_map(); + + LinkImpl* LinkImpl::byName(const char* name) + { + if (links->find(name) == links->end()) + return nullptr; + return links->at(name); + } + /** @brief Returns the amount of links in the platform */ + int LinkImpl::linksCount() + { + return links->size(); } /** @brief Returns a list of all existing links */ - Link **Link::linksList() { - Link **res = xbt_new(Link*, (int)links->size()); + LinkImpl** LinkImpl::linksList() + { + LinkImpl** res = xbt_new(LinkImpl*, (int)links->size()); int i=0; for (auto kv : *links) { res[i++] = kv.second; @@ -81,7 +42,8 @@ namespace simgrid { return res; } /** @brief destructor of the static data */ - void Link::linksExit() { + void LinkImpl::linksExit() + { for (auto kv : *links) (kv.second)->destroy(); delete links; @@ -91,12 +53,12 @@ namespace simgrid { * Callbacks * *************/ - simgrid::xbt::signal Link::onCreation; - simgrid::xbt::signal Link::onDestruction; - simgrid::xbt::signal Link::onStateChange; + simgrid::xbt::signal LinkImpl::onCreation; + simgrid::xbt::signal LinkImpl::onDestruction; + simgrid::xbt::signal LinkImpl::onStateChange; simgrid::xbt::signal networkActionStateChangedCallbacks; - simgrid::xbt::signal Link::onCommunicate; + simgrid::xbt::signal LinkImpl::onCommunicate; } } @@ -147,11 +109,12 @@ namespace simgrid { * Resource * ************/ - Link::Link(simgrid::surf::NetworkModel* model, const char* name, lmm_constraint_t constraint) - : Resource(model, name, constraint) + LinkImpl::LinkImpl(simgrid::surf::NetworkModel* model, const char* name, lmm_constraint_t constraint) + : Resource(model, name, constraint), piface_(Link(this)) { + if (strcmp(name,"__loopback__")) - xbt_assert(!Link::byName(name), "Link '%s' declared several times in the platform.", name); + xbt_assert(!LinkImpl::byName(name), "Link '%s' declared several times in the platform.", name); latency_.scale = 1; bandwidth_.scale = 1; @@ -162,14 +125,15 @@ namespace simgrid { } /** @brief use destroy() instead of this destructor */ - Link::~Link() { + LinkImpl::~LinkImpl() + { xbt_assert(currentlyDestroying_, "Don't delete Links directly. Call destroy() instead."); } /** @brief Fire the required callbacks and destroy the object * * Don't delete directly a Link, call l->destroy() instead. */ - void Link::destroy() + void LinkImpl::destroy() { if (!currentlyDestroying_) { currentlyDestroying_ = true; @@ -178,50 +142,53 @@ namespace simgrid { } } - bool Link::isUsed() + bool LinkImpl::isUsed() { - return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); + return lmm_constraint_used(model()->getMaxminSystem(), constraint()); } - double Link::latency() + double LinkImpl::latency() { return latency_.peak * latency_.scale; } - double Link::bandwidth() + double LinkImpl::bandwidth() { return bandwidth_.peak * bandwidth_.scale; } - int Link::sharingPolicy() + int LinkImpl::sharingPolicy() { - return lmm_constraint_sharing_policy(getConstraint()); + return lmm_constraint_sharing_policy(constraint()); } - void Link::turnOn(){ + void LinkImpl::turnOn() + { if (isOff()) { Resource::turnOn(); onStateChange(this); } } - void Link::turnOff(){ + void LinkImpl::turnOff() + { if (isOn()) { Resource::turnOff(); onStateChange(this); } } - void Link::setStateTrace(tmgr_trace_t trace) { - xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Link %s", getName()); + void LinkImpl::setStateTrace(tmgr_trace_t trace) + { + xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Link %s", cname()); stateEvent_ = future_evt_set->add_trace(trace, 0.0, this); } - void Link::setBandwidthTrace(tmgr_trace_t trace) + void LinkImpl::setBandwidthTrace(tmgr_trace_t trace) { - xbt_assert(bandwidth_.event == nullptr, "Cannot set a second bandwidth trace to Link %s", getName()); + xbt_assert(bandwidth_.event == nullptr, "Cannot set a second bandwidth trace to Link %s", cname()); bandwidth_.event = future_evt_set->add_trace(trace, 0.0, this); } - void Link::setLatencyTrace(tmgr_trace_t trace) + void LinkImpl::setLatencyTrace(tmgr_trace_t trace) { - xbt_assert(latency_.event == nullptr, "Cannot set a second latency trace to Link %s", getName()); + xbt_assert(latency_.event == nullptr, "Cannot set a second latency trace to Link %s", cname()); latency_.event = future_evt_set->add_trace(trace, 0.0, this); }