Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix Memleaks
[simgrid.git] / src / surf / workstation.hpp
index db068ed..8ce487e 100644 (file)
@@ -16,11 +16,14 @@ typedef WorkstationModel *WorkstationModelPtr;
 class WorkstationCLM03;
 typedef WorkstationCLM03 *WorkstationCLM03Ptr;
 
+class WorkstationCLM03Lmm;
+typedef WorkstationCLM03Lmm *WorkstationCLM03LmmPtr;
+
 class WorkstationAction;
 typedef WorkstationAction *WorkstationActionPtr;
 
-/*FIXME:class WorkstationActionLmm;
-typedef WorkstationActionLmm *WorkstationActionLmmPtr;*/
+class WorkstationActionLmm;
+typedef WorkstationActionLmm *WorkstationActionLmmPtr;
 
 /*********
  * Tools *
@@ -34,18 +37,22 @@ class WorkstationModel : public Model {
 public:
   WorkstationModel(string name): Model(name) {};
   WorkstationModel();
-  void parseInit(sg_platf_host_cbarg_t host);
+  ~WorkstationModel();
+  virtual void parseInit(sg_platf_host_cbarg_t host);
   WorkstationCLM03Ptr createResource(string name);
   double shareResources(double now);
+  virtual void adjustWeightOfDummyCpuActions();
+
   void updateActionsState(double now, double delta);
 
-  ActionPtr executeParallelTask(int workstation_nb,
+  virtual ActionPtr executeParallelTask(int workstation_nb,
                                         void **workstation_list,
                                         double *computation_amount,
                                         double *communication_amount,
                                         double rate);
- xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
- ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
+ virtual xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
+ virtual ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
+ CpuModelPtr p_cpuModel;
 };
 
 /************
@@ -58,35 +65,54 @@ public:
 
   void updateState(tmgr_trace_event_t event_type, double value, double date);
 
-  ActionPtr execute(double size);
-  ActionPtr sleep(double duration);
+  virtual ActionPtr execute(double size);
+  virtual ActionPtr sleep(double duration);
   e_surf_resource_state_t getState();
 
-  int getCore();
-  double getSpeed(double load);
-  double getAvailableSpeed();
+  virtual int getCore();
+  virtual double getSpeed(double load);
+  virtual double getAvailableSpeed();
+  virtual double getCurrentPowerPeak();
+  virtual double getPowerPeakAt(int pstate_index);
+  virtual int getNbPstates();
+  virtual void setPowerPeakAt(int pstate_index);
+  virtual double getConsumedEnergy();
 
   xbt_dict_t getProperties();
 
   StoragePtr findStorageOnMountList(const char* storage);
+  xbt_dict_t getStorageList();
   ActionPtr open(const char* mount, const char* path);
   ActionPtr close(surf_file_t fd);
   int unlink(surf_file_t fd);
   ActionPtr ls(const char* mount, const char *path);
-  size_t getSize(surf_file_t fd);
-  ActionPtr read(void* ptr, size_t size, surf_file_t fd);
-  ActionPtr write(const void* ptr, size_t size, surf_file_t fd);
+  sg_size_t getSize(surf_file_t fd);
+  ActionPtr read(surf_file_t fd, sg_size_t size);
+  ActionPtr write(surf_file_t fd, sg_size_t size);
+  xbt_dynar_t getInfo( surf_file_t fd);
+  sg_size_t getFreeSize(const char* name);
+  sg_size_t getUsedSize(const char* name);
+
   bool isUsed();
   //bool isShared();
   xbt_dynar_t p_storage;
   RoutingEdgePtr p_netElm;
   CpuPtr p_cpu;
   NetworkCm02LinkPtr p_network;
+
+  xbt_dynar_t getVms();
+
+  /* common with vm */
+  void getParams(ws_params_t params);
+  void setParams(ws_params_t params);
+  s_ws_params_t p_params;
 };
 
-class WorkstationCLM03Lmm : public WorkstationCLM03, public ResourceLmm {
+class WorkstationCLM03Lmm : virtual public WorkstationCLM03, public ResourceLmm {
 public:
-  WorkstationCLM03Lmm(WorkstationModelPtr model, const char* name, xbt_dict_t props): WorkstationCLM03(model, name, props, NULL, NULL, NULL){};
+  WorkstationCLM03Lmm(WorkstationModelPtr model, const char* name, xbt_dict_t props, xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu):
+         WorkstationCLM03(model, name, props, storage, netElm, cpu){};
+  e_surf_resource_state_t getState();
 };
 
 /**********