Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Action::links() cannot be used for NS3Actions
[simgrid.git] / src / surf / network_cm02.hpp
1 /* Copyright (c) 2013-2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef SURF_NETWORK_CM02_HPP_
8 #define SURF_NETWORK_CM02_HPP_
9
10 #include <xbt/base.h>
11
12 #include "network_interface.hpp"
13 #include "xbt/graph.h"
14
15
16 /***********
17  * Classes *
18  ***********/
19
20 namespace simgrid {
21   namespace surf {
22
23     class XBT_PRIVATE NetworkCm02Model;
24     class XBT_PRIVATE NetworkCm02Action;
25     class XBT_PRIVATE NetworkSmpiModel;
26
27   }
28 }
29
30 /*********
31  * Model *
32  *********/
33
34 namespace simgrid {
35   namespace surf {
36
37     class NetworkCm02Model : public NetworkModel {
38     public:
39       NetworkCm02Model();
40       explicit NetworkCm02Model(void (*solve_fun)(lmm_system_t self));
41       virtual ~NetworkCm02Model() = default;
42       LinkImpl* createLink(const char* name, double bandwidth, double latency,
43                            e_surf_link_sharing_policy_t policy) override;
44       void updateActionsStateLazy(double now, double delta) override;
45       void updateActionsStateFull(double now, double delta) override;
46       Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
47       virtual void gapAppend(double size, const LinkImpl* link, NetworkAction* action);
48
49     protected:
50       bool haveGap_ = false;
51     };
52
53     /************
54      * Resource *
55      ************/
56
57     class NetworkCm02Link : public LinkImpl {
58     public:
59       NetworkCm02Link(NetworkCm02Model* model, const char* name, double bandwidth, double latency,
60                       e_surf_link_sharing_policy_t policy, lmm_system_t system);
61       virtual ~NetworkCm02Link() = default;
62       void apply_event(tmgr_trace_event_t event, double value) override;
63       void setBandwidth(double value) override;
64       void setLatency(double value) override;
65       virtual void gapAppend(double size, const LinkImpl* link, NetworkAction* action);
66     };
67
68
69     /**********
70      * Action *
71      **********/
72     class NetworkCm02Action : public NetworkAction {
73       friend Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate);
74       friend NetworkSmpiModel;
75     public:
76       NetworkCm02Action(Model *model, double cost, bool failed)
77       : NetworkAction(model, cost, failed) {};
78       virtual ~NetworkCm02Action() = default;
79       void updateRemainingLazy(double now) override;
80     protected:
81       double senderGap_;
82     };
83
84   }
85 }
86
87 #endif /* SURF_NETWORK_CM02_HPP_ */