Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move some of the file mgmt logic out of the storage model
[simgrid.git] / src / kernel / routing / FatTreeZone.cpp
index 97c57d3..a364180 100644 (file)
@@ -5,13 +5,12 @@
 
 #include <fstream>
 #include <sstream>
+#include <string>
 
 #include "src/kernel/routing/FatTreeZone.hpp"
-#include "src/kernel/routing/NetCard.hpp"
+#include "src/kernel/routing/NetPoint.hpp"
 #include "src/surf/network_interface.hpp"
 
-#include "xbt/lib.h"
-
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/split.hpp>
 
@@ -21,12 +20,12 @@ namespace simgrid {
 namespace kernel {
 namespace routing {
 
-AsClusterFatTree::AsClusterFatTree(As* father, const char* name) : AsCluster(father, name)
+FatTreeZone::FatTreeZone(NetZone* father, const char* name) : ClusterZone(father, name)
 {
   XBT_DEBUG("Creating a new fat tree.");
 }
 
-AsClusterFatTree::~AsClusterFatTree()
+FatTreeZone::~FatTreeZone()
 {
   for (unsigned int i = 0; i < this->nodes_.size(); i++) {
     delete this->nodes_[i];
@@ -36,7 +35,7 @@ AsClusterFatTree::~AsClusterFatTree()
   }
 }
 
-bool AsClusterFatTree::isInSubTree(FatTreeNode* root, FatTreeNode* node)
+bool FatTreeZone::isInSubTree(FatTreeNode* root, FatTreeNode* node)
 {
   XBT_DEBUG("Is %d(%u,%u) in the sub tree of %d(%u,%u) ?", node->id, node->level, node->position, root->id, root->level,
             root->position);
@@ -57,7 +56,7 @@ bool AsClusterFatTree::isInSubTree(FatTreeNode* root, FatTreeNode* node)
   return true;
 }
 
-void AsClusterFatTree::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t into, double* latency)
+void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t into, double* latency)
 {
 
   if (dst->isRouter() || src->isRouter())
@@ -88,7 +87,7 @@ void AsClusterFatTree::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_
   FatTreeNode* currentNode = source;
 
   // up part
-  while (!isInSubTree(currentNode, destination)) {
+  while (not isInSubTree(currentNode, destination)) {
     int d = destination->position; // as in d-mod-k
 
     for (unsigned int i = 0; i < currentNode->level; i++)
@@ -129,7 +128,7 @@ void AsClusterFatTree::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_
 /* This function makes the assumption that parse_specific_arguments() and
  * addNodes() have already been called
  */
-void AsClusterFatTree::seal()
+void FatTreeZone::seal()
 {
   if (this->levels_ == 0) {
     return;
@@ -175,7 +174,7 @@ void AsClusterFatTree::seal()
   }
 }
 
-int AsClusterFatTree::connectNodeToParents(FatTreeNode* node)
+int FatTreeZone::connectNodeToParents(FatTreeNode* node)
 {
   std::vector<FatTreeNode*>::iterator currentParentNode = this->nodes_.begin();
   int connectionsNumber                                 = 0;
@@ -199,7 +198,7 @@ int AsClusterFatTree::connectNodeToParents(FatTreeNode* node)
   return connectionsNumber;
 }
 
-bool AsClusterFatTree::areRelated(FatTreeNode* parent, FatTreeNode* child)
+bool FatTreeZone::areRelated(FatTreeNode* parent, FatTreeNode* child)
 {
   std::stringstream msgBuffer;
 
@@ -231,11 +230,10 @@ bool AsClusterFatTree::areRelated(FatTreeNode* parent, FatTreeNode* child)
   return true;
 }
 
-void AsClusterFatTree::generateSwitches()
+void FatTreeZone::generateSwitches()
 {
   XBT_DEBUG("Generating switches.");
   this->nodesByLevel_.resize(this->levels_ + 1, 0);
-  unsigned int nodesRequired = 0;
 
   // Take care of the number of nodes by level
   this->nodesByLevel_[0] = 1;
@@ -259,7 +257,6 @@ void AsClusterFatTree::generateSwitches()
       nodesInThisLevel *= this->lowerLevelNodesNumber_[j];
 
     this->nodesByLevel_[i + 1] = nodesInThisLevel;
-    nodesRequired += nodesInThisLevel;
   }
 
   // Create the switches
@@ -278,7 +275,7 @@ void AsClusterFatTree::generateSwitches()
   }
 }
 
-void AsClusterFatTree::generateLabels()
+void FatTreeZone::generateLabels()
 {
   XBT_DEBUG("Generating labels.");
   // TODO : check if nodesByLevel and nodes are filled
@@ -324,7 +321,7 @@ void AsClusterFatTree::generateLabels()
   }
 }
 
-int AsClusterFatTree::getLevelPosition(const unsigned int level)
+int FatTreeZone::getLevelPosition(const unsigned int level)
 {
   xbt_assert(level <= this->levels_, "The impossible did happen. Yet again.");
   int tempPosition = 0;
@@ -335,7 +332,7 @@ int AsClusterFatTree::getLevelPosition(const unsigned int level)
   return tempPosition;
 }
 
-void AsClusterFatTree::addProcessingNode(int id)
+void FatTreeZone::addProcessingNode(int id)
 {
   using std::make_pair;
   static int position = 0;
@@ -347,7 +344,7 @@ void AsClusterFatTree::addProcessingNode(int id)
   this->nodes_.push_back(newNode);
 }
 
-void AsClusterFatTree::addLink(FatTreeNode* parent, unsigned int parentPort, FatTreeNode* child, unsigned int childPort)
+void FatTreeZone::addLink(FatTreeNode* parent, unsigned int parentPort, FatTreeNode* child, unsigned int childPort)
 {
   FatTreeLink* newLink;
   newLink = new FatTreeLink(this->cluster_, child, parent);
@@ -359,7 +356,7 @@ void AsClusterFatTree::addLink(FatTreeNode* parent, unsigned int parentPort, Fat
   this->links_.push_back(newLink);
 }
 
-void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster)
+void FatTreeZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster)
 {
   std::vector<std::string> parameters;
   std::vector<std::string> tmp;
@@ -406,7 +403,7 @@ void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster
   this->cluster_ = cluster;
 }
 
-void AsClusterFatTree::generateDotFile(const std::string& filename) const
+void FatTreeZone::generateDotFile(const std::string& filename) const
 {
   std::ofstream file;
   file.open(filename, std::ios::out | std::ios::trunc);
@@ -431,26 +428,22 @@ void AsClusterFatTree::generateDotFile(const std::string& filename) const
 FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level, int position)
     : id(id), level(level), position(position)
 {
-  s_sg_platf_link_cbarg_t linkTemplate;
+  LinkCreationArgs linkTemplate;
   if (cluster->limiter_link) {
-    memset(&linkTemplate, 0, sizeof(linkTemplate));
     linkTemplate.bandwidth = cluster->limiter_link;
     linkTemplate.latency   = 0;
     linkTemplate.policy    = SURF_LINK_SHARED;
-    linkTemplate.id        = bprintf("limiter_%d", id);
+    linkTemplate.id        = "limiter_"+std::to_string(id);
     sg_platf_new_link(&linkTemplate);
-    this->limiterLink = Link::byName(linkTemplate.id);
-    free((void*)linkTemplate.id);
+    this->limiterLink = surf::LinkImpl::byName(linkTemplate.id.c_str());
   }
   if (cluster->loopback_bw || cluster->loopback_lat) {
-    memset(&linkTemplate, 0, sizeof(linkTemplate));
     linkTemplate.bandwidth = cluster->loopback_bw;
     linkTemplate.latency   = cluster->loopback_lat;
     linkTemplate.policy    = SURF_LINK_FATPIPE;
-    linkTemplate.id        = bprintf("loopback_%d", id);
+    linkTemplate.id        = "loopback_"+ std::to_string(id);
     sg_platf_new_link(&linkTemplate);
-    this->loopback = Link::byName(linkTemplate.id);
-    free((void*)linkTemplate.id);
+    this->loopback = surf::LinkImpl::byName(linkTemplate.id.c_str());
   }
 }
 
@@ -458,29 +451,24 @@ FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode* downNode
     : upNode(upNode), downNode(downNode)
 {
   static int uniqueId = 0;
-  s_sg_platf_link_cbarg_t linkTemplate;
-  memset(&linkTemplate, 0, sizeof(linkTemplate));
+  LinkCreationArgs linkTemplate;
   linkTemplate.bandwidth = cluster->bw;
   linkTemplate.latency   = cluster->lat;
   linkTemplate.policy    = cluster->sharing_policy; // sthg to do with that ?
-  linkTemplate.id        = bprintf("link_from_%d_to_%d_%d", downNode->id, upNode->id, uniqueId);
+  linkTemplate.id =
+      "link_from_" + std::to_string(downNode->id) + "_" + std::to_string(upNode->id) + "_" + std::to_string(uniqueId);
   sg_platf_new_link(&linkTemplate);
-  Link* link;
-  std::string tmpID;
+
   if (cluster->sharing_policy == SURF_LINK_FULLDUPLEX) {
-    tmpID          = std::string(linkTemplate.id) + "_UP";
-    link           = Link::byName(tmpID.c_str());
-    this->upLink   = link; // check link?
+    std::string tmpID = std::string(linkTemplate.id) + "_UP";
+    this->upLink      = surf::LinkImpl::byName(tmpID.c_str()); // check link?
     tmpID          = std::string(linkTemplate.id) + "_DOWN";
-    link           = Link::byName(tmpID.c_str());
-    this->downLink = link; // check link ?
+    this->downLink    = surf::LinkImpl::byName(tmpID.c_str()); // check link ?
   } else {
-    link           = Link::byName(linkTemplate.id);
-    this->upLink   = link;
-    this->downLink = link;
+    this->upLink   = surf::LinkImpl::byName(linkTemplate.id.c_str());
+    this->downLink = this->upLink;
   }
   uniqueId++;
-  free((void*)linkTemplate.id);
 }
 }
 }