Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Delegated constructors are a c++11 feature, avoid them.
[simgrid.git] / src / surf / network.hpp
index 32fbdaa..62ae4e4 100644 (file)
@@ -29,15 +29,25 @@ typedef NetworkCm02ActionLmm *NetworkCm02ActionLmmPtr;
  *********/
 extern NetworkCm02ModelPtr surf_network_model;
 
-
+void net_define_callbacks(void);
 
 /*********
  * Model *
  *********/
 class NetworkCm02Model : public Model {
+private:
+  void initialize();
 public:
-  NetworkCm02Model(string name);
-  NetworkCm02Model();
+  NetworkCm02Model(int i) : Model("network") {
+       f_networkSolve = lmm_solve;
+       m_haveGap = false;
+  };//FIXME: add network clean interface
+  NetworkCm02Model(string name) : Model(name) {
+    this->initialize();
+  }
+  NetworkCm02Model() : Model("network") {
+    this->initialize();
+  }
   //FIXME:NetworkCm02LinkPtr createResource(string name);
   NetworkCm02LinkLmmPtr createResource(const char *name,
                                    double bw_initial,
@@ -49,17 +59,16 @@ public:
                                    e_surf_link_sharing_policy_t policy,
                                    xbt_dict_t properties);
   void updateActionsStateLazy(double now, double delta);
-  void updateActionsStateFull(double now, double delta);
   virtual void gapAppend(double size, const NetworkCm02LinkLmmPtr link, NetworkCm02ActionLmmPtr action) {};
-  NetworkCm02ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
+  virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
                                           double size, double rate);
   xbt_dynar_t getRoute(RoutingEdgePtr src, RoutingEdgePtr dst); //FIXME: kill field? That is done by the routing nowadays
   //FIXME: virtual void addTraces() =0;
-  void (*f_networkSolve)(lmm_system_t) = lmm_solve;
-  double latencyFactor(double size);
-  double bandwidthFactor(double size);
-  double bandwidthConstraint(double rate, double bound, double size);
-  bool m_haveGap = false;
+  void (*f_networkSolve)(lmm_system_t);
+  virtual double latencyFactor(double size);
+  virtual double bandwidthFactor(double size);
+  virtual double bandwidthConstraint(double rate, double bound, double size);
+  bool m_haveGap;
 };
 
 /************
@@ -71,7 +80,7 @@ public:
   NetworkCm02Link(){};
   NetworkCm02Link(NetworkCm02ModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
   virtual double getBandwidth()=0;
-  double getLatency();
+  virtual double getLatency();
   virtual bool isShared()=0;
   /* Using this object with the public part of
     model does not make sense */
@@ -81,6 +90,8 @@ public:
 
 class NetworkCm02LinkLmm : public ResourceLmm, public NetworkCm02Link {
 public:
+  NetworkCm02LinkLmm(NetworkCm02ModelPtr model, const char* name, xbt_dict_t properties)
+   : ResourceLmm(), NetworkCm02Link(model, name, properties) {};
   NetworkCm02LinkLmm(NetworkCm02ModelPtr model, const char *name, xbt_dict_t props,
                                   lmm_system_t system,
                                   double constraint_value,
@@ -104,7 +115,8 @@ public:
  **********/
 class NetworkCm02Action : virtual public Action {
 public:
-  NetworkCm02Action(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
+  NetworkCm02Action(ModelPtr model, double cost, bool failed)
+ : Action(model, cost, failed) {};
   double m_latency;
   double m_latCurrent;
   double m_weight;
@@ -121,7 +133,10 @@ public:
 
 class NetworkCm02ActionLmm : public ActionLmm, public NetworkCm02Action {
 public:
-  NetworkCm02ActionLmm(ModelPtr model, double cost, bool failed): ActionLmm(model, cost, failed), NetworkCm02Action(model, cost, failed) {};
+  NetworkCm02ActionLmm(ModelPtr model, double cost, bool failed)
+ : Action(model, cost, failed),
+   ActionLmm(model, cost, failed),
+   NetworkCm02Action(model, cost, failed) {};
   void updateRemainingLazy(double now);
   void recycle();
 };