Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug (massive) leak with ptaskL07
[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 /***********
18  * Classes *
19  ***********/
20
21 namespace simgrid {
22   namespace surf {
23
24     class XBT_PRIVATE NetworkCm02Model;
25     class XBT_PRIVATE NetworkCm02Action;
26     class XBT_PRIVATE NetworkSmpiModel;
27
28   }
29 }
30
31 /*********
32  * Model *
33  *********/
34
35 namespace simgrid {
36   namespace surf {
37
38     class NetworkCm02Model : public NetworkModel {
39     public:
40       NetworkCm02Model();
41       explicit NetworkCm02Model(void (*solve_fun)(lmm_system_t self));
42       virtual ~NetworkCm02Model();
43       LinkImpl* createLink(const char* name, double bandwidth, double latency,
44                            e_surf_link_sharing_policy_t policy) override;
45       void updateActionsStateLazy(double now, double delta) override;
46       void updateActionsStateFull(double now, double delta) override;
47       Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
48       virtual void gapAppend(double size, const LinkImpl* link, NetworkAction* action);
49
50     protected:
51       bool haveGap_ = false;
52     };
53
54     /************
55      * Resource *
56      ************/
57
58     class NetworkCm02Link : public LinkImpl {
59     public:
60       NetworkCm02Link(NetworkCm02Model* model, const char* name, double bandwidth, double latency,
61                       e_surf_link_sharing_policy_t policy, lmm_system_t system);
62       ~NetworkCm02Link() override;
63       void apply_event(tmgr_trace_iterator_t event, double value) override;
64       void setBandwidth(double value) override;
65       void setLatency(double value) override;
66       virtual void gapAppend(double size, const LinkImpl* link, NetworkAction* action);
67     };
68
69
70     /**********
71      * Action *
72      **********/
73     class NetworkCm02Action : public NetworkAction {
74       friend Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate);
75       friend NetworkSmpiModel;
76     public:
77       NetworkCm02Action(Model *model, double cost, bool failed)
78       : NetworkAction(model, cost, failed) {};
79       ~NetworkCm02Action() override;
80       void updateRemainingLazy(double now) override;
81     protected:
82       double senderGap_;
83     };
84
85   }
86 }
87
88 #endif /* SURF_NETWORK_CM02_HPP_ */