Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Factorize some code into the netcard constructor
[simgrid.git] / src / surf / surf_routing.hpp
index cb29f19..ccbb7d6 100644 (file)
@@ -12,8 +12,9 @@
 
 #include "surf_interface.hpp"
 #include "src/surf/xml/platf_private.hpp" // FIXME: including this here is pure madness. KILKILKIL XML.
-#include <float.h>
+#include "src/surf/AsImpl.hpp"
 
+#include <float.h>
 #include <vector>
 #include <map>
 
@@ -26,11 +27,13 @@ SG_END_DECL()
 namespace simgrid {
 namespace surf {
 
+  XBT_PUBLIC_DATA(simgrid::xbt::signal<void(s4u::As*)>) asCreatedCallbacks;
+  XBT_PUBLIC_DATA(simgrid::xbt::signal<void(NetCard*)>) netcardCreatedCallbacks;
+
 /***********
  * Classes *
  ***********/
 
-class XBT_PRIVATE RoutingModelDescription;
 class XBT_PRIVATE Onelink;
 class RoutingPlatf;
 
@@ -43,9 +46,8 @@ class NetCard {
 public:
   virtual ~NetCard(){};
   virtual int id()=0; // Our rank in the vertices_ array of our containing AS.
-  virtual void setId(int id)=0;
   virtual char *name()=0;
-  virtual s4u::As *containingAS()=0; // This is the AS in which I am
+  virtual AsImpl *containingAS()=0; // This is the AS in which I am
   virtual bool isAS()=0;
   virtual bool isHost()=0;
   virtual bool isRouter()=0;
@@ -53,17 +55,20 @@ public:
 
 struct XBT_PRIVATE NetCardImpl : public NetCard {
 public:
-  NetCardImpl(const char *name, e_surf_network_element_type_t componentType, s4u::As *as)
+  NetCardImpl(const char *name, e_surf_network_element_type_t componentType, AsImpl *containingAS)
   : name_(xbt_strdup(name)),
     componentType_(componentType),
-    containingAS_(as)
-  {}
+    containingAS_(containingAS)
+  {
+    if (containingAS != nullptr)
+      id_ = containingAS->addComponent(this);
+    simgrid::surf::netcardCreatedCallbacks(this);
+  }
   ~NetCardImpl() { xbt_free(name_);};
 
   int id()           override {return id_;}
-  void setId(int id) override {id_ = id;}
   char *name()       override {return name_;}
-  s4u::As *containingAS() override {return containingAS_;}
+  AsImpl *containingAS() override {return containingAS_;}
 
   bool isAS()        override {return componentType_ == SURF_NETWORK_ELEMENT_AS;}
   bool isHost()      override {return componentType_ == SURF_NETWORK_ELEMENT_HOST;}
@@ -73,7 +78,7 @@ private:
   int id_ = -1;
   char *name_;
   e_surf_network_element_type_t componentType_;
-  s4u::As *containingAS_;
+  AsImpl *containingAS_;
 };
 
 /** @ingroup SURF_routing_interface
@@ -95,19 +100,12 @@ XBT_PUBLIC_CLASS RoutingPlatf {
 public:
   RoutingPlatf(Link *loopback);
   ~RoutingPlatf();
-  s4u::As *root_ = nullptr;
+  AsImpl *root_ = nullptr;
   Link *loopback_;
   xbt_dynar_t getOneLinkRoutes(void);
   void getRouteAndLatency(NetCard *src, NetCard *dst, std::vector<Link*> * links, double *latency);
 };
 
-/*************
- * Callbacks *
- *************/
-
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(NetCard*)>) netcardCreatedCallbacks;
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(s4u::As*)>) asCreatedCallbacks;
-
 }
 }