Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Replace surf by surf++ and make it compile
[simgrid.git] / src / surf / workstation.hpp
1 #include "surf.hpp"
2 #include "storage.hpp"
3 #include "cpu.hpp"
4 #include "network.hpp"
5
6 #ifndef WORKSTATION_HPP_
7 #define WORKSTATION_HPP_
8
9 /***********
10  * Classes *
11  ***********/
12
13 class WorkstationModel;
14 typedef WorkstationModel *WorkstationModelPtr;
15
16 class WorkstationCLM03;
17 typedef WorkstationCLM03 *WorkstationCLM03Ptr;
18
19 class WorkstationAction;
20 typedef WorkstationAction *WorkstationActionPtr;
21
22 /*FIXME:class WorkstationActionLmm;
23 typedef WorkstationActionLmm *WorkstationActionLmmPtr;*/
24
25 /*********
26  * Tools *
27  *********/
28 extern WorkstationModelPtr surf_workstation_model;
29
30 /*********
31  * Model *
32  *********/
33 class WorkstationModel : public Model {
34 public:
35   WorkstationModel(string name): Model(name) {};
36   WorkstationModel();
37   void parseInit(sg_platf_host_cbarg_t host);
38   WorkstationCLM03Ptr createResource(string name);
39   double shareResources(double now);
40   void updateActionsState(double now, double delta);
41
42   ActionPtr executeParallelTask(int workstation_nb,
43                                         void **workstation_list,
44                                         double *computation_amount,
45                                         double *communication_amount,
46                                         double rate);
47  xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
48  ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
49 };
50
51 /************
52  * Resource *
53  ************/
54
55 class WorkstationCLM03 : virtual public Resource {
56 public:
57   WorkstationCLM03(WorkstationModelPtr model, const char* name, xbt_dict_t properties, xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
58
59   void updateState(tmgr_trace_event_t event_type, double value, double date);
60
61   ActionPtr execute(double size);
62   ActionPtr sleep(double duration);
63   e_surf_resource_state_t getState();
64
65   int getCore();
66   double getSpeed(double load);
67   double getAvailableSpeed();
68
69   xbt_dict_t getProperties();
70
71   StoragePtr findStorageOnMountList(const char* storage);
72   ActionPtr open(const char* mount, const char* path);
73   ActionPtr close(surf_file_t fd);
74   int unlink(surf_file_t fd);
75   ActionPtr ls(const char* mount, const char *path);
76   size_t getSize(surf_file_t fd);
77   ActionPtr read(void* ptr, size_t size, surf_file_t fd);
78   ActionPtr write(const void* ptr, size_t size, surf_file_t fd);
79   bool isUsed();
80   //bool isShared();
81   xbt_dynar_t p_storage;
82   RoutingEdgePtr p_netElm;
83   CpuPtr p_cpu;
84   NetworkCm02LinkPtr p_network;
85 };
86
87 class WorkstationCLM03Lmm : public WorkstationCLM03, public ResourceLmm {
88 public:
89   WorkstationCLM03Lmm(WorkstationModelPtr model, const char* name, xbt_dict_t props): WorkstationCLM03(model, name, props, NULL, NULL, NULL){};
90 };
91
92 /**********
93  * Action *
94  **********/
95 class WorkstationAction : virtual public Action {
96 public:
97   WorkstationAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
98 };
99
100 class WorkstationActionLmm : public ActionLmm, public WorkstationAction {
101 public:
102   WorkstationActionLmm(ModelPtr model, double cost, bool failed): ActionLmm(model, cost, failed), WorkstationAction(model, cost, failed) {};
103 };
104
105
106 #endif /* WORKSTATION_HPP_ */