Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add the capacicity to modify links' latency and bandwidth
[simgrid.git] / src / s4u / s4u_Link.cpp
index 742f062..4474227 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2019. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2013-2020. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -14,6 +14,9 @@
 #include "xbt/log.h"
 
 namespace simgrid {
+
+template class xbt::Extendable<s4u::Link>;
+
 namespace s4u {
 
 xbt::signal<void(Link&)> Link::on_creation;
@@ -42,7 +45,7 @@ const char* Link::get_cname() const
 {
   return this->pimpl_->get_cname();
 }
-bool Link::is_used()
+bool Link::is_used() const
 {
   return this->pimpl_->is_used();
 }
@@ -52,17 +55,27 @@ double Link::get_latency() const
   return this->pimpl_->get_latency();
 }
 
+void Link::set_latency(double value)
+{
+  kernel::actor::simcall([this, value] { pimpl_->set_latency(value); });
+}
+
 double Link::get_bandwidth() const
 {
   return this->pimpl_->get_bandwidth();
 }
 
-Link::SharingPolicy Link::get_sharing_policy()
+void Link::set_bandwidth(double value)
+{
+  kernel::actor::simcall([this, value] { pimpl_->set_bandwidth(value); });
+}
+
+Link::SharingPolicy Link::get_sharing_policy() const
 {
   return this->pimpl_->get_sharing_policy();
 }
 
-double Link::get_usage()
+double Link::get_usage() const
 {
   return this->pimpl_->get_constraint()->get_usage();
 }
@@ -107,7 +120,7 @@ void Link::set_property(const std::string& key, const std::string& value)
 
 /* **************************** Public C interface *************************** */
 
-const char* sg_link_name(sg_link_t link)
+const char* sg_link_name(const_sg_link_t link)
 {
   return link->get_cname();
 }
@@ -116,19 +129,29 @@ sg_link_t sg_link_by_name(const char* name)
   return simgrid::s4u::Link::by_name(name);
 }
 
-int sg_link_is_shared(sg_link_t link)
+int sg_link_is_shared(const_sg_link_t link)
 {
   return (int)link->get_sharing_policy();
 }
-double sg_link_bandwidth(sg_link_t link)
+double sg_link_bandwidth(const_sg_link_t link)
 {
   return link->get_bandwidth();
 }
-double sg_link_latency(sg_link_t link)
+
+void sg_link_bandwidth_set(sg_link_t link, double value)
+{
+  return link->set_bandwidth(value);
+}
+
+double sg_link_latency(const_sg_link_t link)
 {
   return link->get_latency();
 }
-void* sg_link_data(sg_link_t link)
+void sg_link_latency_set(sg_link_t link, double value)
+{
+  return link->set_latency(value);
+}
+void* sg_link_data(const_sg_link_t link)
 {
   return link->get_data();
 }