Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://github.com/mpoquet/simgrid
[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/fifo.h"
14 #include "xbt/graph.h"
15
16
17
18 /***********
19  * Classes *
20  ***********/
21
22 namespace simgrid {
23   namespace surf {
24
25     class XBT_PRIVATE NetworkCm02Model;
26     class XBT_PRIVATE NetworkCm02Action;
27     class XBT_PRIVATE NetworkSmpiModel;
28
29   }
30 }
31
32 /*********
33  * Model *
34  *********/
35
36 namespace simgrid {
37   namespace surf {
38
39     class NetworkCm02Model : public NetworkModel {
40     public:
41       NetworkCm02Model();
42       explicit NetworkCm02Model(void (*solve_fun)(lmm_system_t self));
43       virtual ~NetworkCm02Model();
44       Link* createLink(const char* name, double bandwidth, double latency,
45                        e_surf_link_sharing_policy_t policy) override;
46       void updateActionsStateLazy(double now, double delta) override;
47       void updateActionsStateFull(double now, double delta) override;
48       Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
49       virtual void gapAppend(double size, const Link* link, NetworkAction* action);
50     protected:
51       bool haveGap_ = false;
52     };
53
54     /************
55      * Resource *
56      ************/
57
58     class NetworkCm02Link : public Link {
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 Link* 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_ */