- namespace surf {
- /*********
- * Model *
- *********/
-
- /** @ingroup SURF_network_interface
- * @brief SURF network model interface class
- * @details A model is an object which handles the interactions between its Resources and its Actions
- */
- class NetworkModel : public Model {
- public:
- /** @brief Constructor */
- NetworkModel() : Model() { }
-
- /** @brief Destructor */
- ~NetworkModel() override;
-
- /**
- * @brief Create a Link
- *
- * @param name The name of the Link
- * @param bandwidth The initial bandwidth of the Link in bytes per second
- * @param latency The initial latency of the Link in seconds
- * @param policy The sharing policy of the Link
- */
- virtual LinkImpl* createLink(const char* name, double bandwidth, double latency,
- e_surf_link_sharing_policy_t policy) = 0;
-
- /**
- * @brief Create a communication between two hosts.
- * @details It makes calls to the routing part, and execute the communication
- * between the two end points.
- *
- * @param src The source of the communication
- * @param dst The destination of the communication
- * @param size The size of the communication in bytes
- * @param rate Allows to limit the transfer rate. Negative value means
- * unlimited.
- * @return The action representing the communication
- */
- virtual Action* communicate(simgrid::s4u::Host* src, simgrid::s4u::Host* dst, double size, double rate) = 0;
-
- /** @brief Function pointer to the function to use to solve the lmm_system_t
- *
- * @param system The lmm_system_t to solve
- */
- void (*f_networkSolve)(lmm_system_t) = lmm_solve;
-
- /**
- * @brief Get the right multiplicative factor for the latency.
- * @details Depending on the model, the effective latency when sending
- * a message might be different from the theoretical latency of the link,
- * in function of the message size. In order to account for this, this
- * function gets this factor.
- *
- * @param size The size of the message.
- * @return The latency factor.
- */
- virtual double latencyFactor(double size);
-
- /**
- * @brief Get the right multiplicative factor for the bandwidth.
- * @details Depending on the model, the effective bandwidth when sending
- * a message might be different from the theoretical bandwidth of the link,
- * in function of the message size. In order to account for this, this
- * function gets this factor.
- *
- * @param size The size of the message.
- * @return The bandwidth factor.
- */
- virtual double bandwidthFactor(double size);
-
- /**
- * @brief Get definitive bandwidth.
- * @details It gives the minimum bandwidth between the one that would
- * occur if no limitation was enforced, and the one arbitrary limited.
- * @param rate The desired maximum bandwidth.
- * @param bound The bandwidth with only the network taken into account.
- * @param size The size of the message.
- * @return The new bandwidth.
- */
- virtual double bandwidthConstraint(double rate, double bound, double size);
- double nextOccuringEventFull(double now) override;
-
- LinkImpl* loopback_ = nullptr;
- };
-
- /************
- * Resource *
- ************/
- /** @ingroup SURF_network_interface
- * @brief SURF network link interface class
- * @details A Link represents the link between two [hosts](\ref simgrid::surf::HostImpl)
- */
- class LinkImpl : public simgrid::surf::Resource, public simgrid::surf::PropertyHolder {
- protected:
- LinkImpl(simgrid::surf::NetworkModel* model, const char* name, lmm_constraint_t constraint);
- ~LinkImpl() override;
- public:
- void destroy(); // Must be called instead of the destructor
- private:
- bool currentlyDestroying_ = false;
-
- public:
- /** @brief Public interface */
- s4u::Link piface_;
-
- /** @brief Get the bandwidth in bytes per second of current Link */
- virtual double bandwidth();
-
- /** @brief Update the bandwidth in bytes per second of current Link */
- virtual void setBandwidth(double value) = 0;
-
- /** @brief Get the latency in seconds of current Link */
- virtual double latency();
-
- /** @brief Update the latency in seconds of current Link */
- virtual void setLatency(double value) = 0;
-
- /** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2:
- * FULLDUPLEX) */
- virtual int sharingPolicy();
-
- /** @brief Check if the Link is used */
- bool isUsed() override;
-
- void turnOn() override;
- void turnOff() override;
-
- virtual void setStateTrace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF).
+namespace surf {
+/*********
+ * Model *
+ *********/
+
+/** @ingroup SURF_network_interface
+ * @brief SURF network model interface class
+ * @details A model is an object which handles the interactions between its Resources and its Actions
+ */
+class NetworkModel : public Model {
+public:
+ /** @brief Constructor */
+ NetworkModel() : Model() {}
+
+ /** @brief Destructor */
+ ~NetworkModel() override;
+
+ /**
+ * @brief Create a Link
+ *
+ * @param name The name of the Link
+ * @param bandwidth The initial bandwidth of the Link in bytes per second
+ * @param latency The initial latency of the Link in seconds
+ * @param policy The sharing policy of the Link
+ */
+ virtual LinkImpl* createLink(const std::string& name, double bandwidth, double latency,
+ e_surf_link_sharing_policy_t policy) = 0;
+
+ /**
+ * @brief Create a communication between two hosts.
+ * @details It makes calls to the routing part, and execute the communication
+ * between the two end points.
+ *
+ * @param src The source of the communication
+ * @param dst The destination of the communication
+ * @param size The size of the communication in bytes
+ * @param rate Allows to limit the transfer rate. Negative value means
+ * unlimited.
+ * @return The action representing the communication
+ */
+ virtual Action* communicate(simgrid::s4u::Host* src, simgrid::s4u::Host* dst, double size, double rate) = 0;
+
+ /** @brief Function pointer to the function to use to solve the lmm_system_t
+ *
+ * @param system The lmm_system_t to solve
+ */
+ void (*f_networkSolve)(lmm_system_t) = simgrid::kernel::lmm::lmm_solve;
+
+ /**
+ * @brief Get the right multiplicative factor for the latency.
+ * @details Depending on the model, the effective latency when sending
+ * a message might be different from the theoretical latency of the link,
+ * in function of the message size. In order to account for this, this
+ * function gets this factor.
+ *
+ * @param size The size of the message.
+ * @return The latency factor.
+ */
+ virtual double latencyFactor(double size);
+
+ /**
+ * @brief Get the right multiplicative factor for the bandwidth.
+ * @details Depending on the model, the effective bandwidth when sending
+ * a message might be different from the theoretical bandwidth of the link,
+ * in function of the message size. In order to account for this, this
+ * function gets this factor.
+ *
+ * @param size The size of the message.
+ * @return The bandwidth factor.
+ */
+ virtual double bandwidthFactor(double size);
+
+ /**
+ * @brief Get definitive bandwidth.
+ * @details It gives the minimum bandwidth between the one that would
+ * occur if no limitation was enforced, and the one arbitrary limited.
+ * @param rate The desired maximum bandwidth.
+ * @param bound The bandwidth with only the network taken into account.
+ * @param size The size of the message.
+ * @return The new bandwidth.
+ */
+ virtual double bandwidthConstraint(double rate, double bound, double size);
+ double nextOccuringEventFull(double now) override;
+
+ LinkImpl* loopback_ = nullptr;
+};
+
+/************
+ * Resource *
+ ************/
+/** @ingroup SURF_network_interface
+ * @brief SURF network link interface class
+ * @details A Link represents the link between two [hosts](\ref simgrid::surf::HostImpl)
+ */
+class LinkImpl : public simgrid::surf::Resource, public simgrid::surf::PropertyHolder {
+protected:
+ LinkImpl(simgrid::surf::NetworkModel* model, const std::string& name, lmm_constraint_t constraint);
+ ~LinkImpl() override;
+
+public:
+ void destroy(); // Must be called instead of the destructor
+private:
+ bool currentlyDestroying_ = false;
+
+public:
+ /** @brief Public interface */
+ s4u::Link piface_;
+
+ /** @brief Get the bandwidth in bytes per second of current Link */
+ virtual double bandwidth();
+
+ /** @brief Update the bandwidth in bytes per second of current Link */
+ virtual void setBandwidth(double value) = 0;
+
+ /** @brief Get the latency in seconds of current Link */
+ virtual double latency();
+
+ /** @brief Update the latency in seconds of current Link */
+ virtual void setLatency(double value) = 0;
+
+ /** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2:
+ * FULLDUPLEX) */
+ virtual int sharingPolicy();
+
+ /** @brief Check if the Link is used */
+ bool isUsed() override;
+
+ void turnOn() override;
+ void turnOff() override;
+
+ virtual void setStateTrace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF).