Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Pass std::string parameters by reference too.
[simgrid.git] / include / simgrid / kernel / routing / FatTreeZone.hpp
index 6d19220..0e69e0d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2014-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -14,7 +14,7 @@ namespace routing {
 
 class XBT_PRIVATE FatTreeLink;
 
-/** \brief A node in a fat tree (@ref FatTreeZone).
+/** @brief A node in a fat tree (@ref FatTreeZone).
  * A FatTreeNode can either be a switch or a processing node. Switches are
  * identified by a negative ID. This class is closely related to fat
  */
@@ -25,7 +25,7 @@ public:
   /* Level into the tree, with 0 being the leafs.
    */
   unsigned int level;
-  /* \brief Position into the level, starting from 0.
+  /* @brief Position into the level, starting from 0.
    */
   unsigned int position;
   /** In order to link nodes between them, each one must be assigned a label,
@@ -46,15 +46,15 @@ public:
 
   /** Virtual link standing for the node global capacity.
    */
-  surf::LinkImpl* limiter_link_;
+  resource::LinkImpl* limiter_link_;
   /** If present, communications from this node to this node will pass through it
    * instead of passing by an upper level switch.
    */
-  surf::LinkImpl* loopback;
+  resource::LinkImpl* loopback;
   FatTreeNode(ClusterCreationArgs* cluster, int id, int level, int position);
 };
 
-/** \brief Link in a fat tree (@ref FatTreeZone).
+/** @brief Link in a fat tree (@ref FatTreeZone).
  *
  * Represents a single, duplex link in a fat tree. This is necessary to have a tree.
  * It is equivalent to a physical link.
@@ -63,9 +63,9 @@ class FatTreeLink {
 public:
   FatTreeLink(ClusterCreationArgs* cluster, FatTreeNode* source, FatTreeNode* destination);
   /** Link going up in the tree */
-  surf::LinkImpl* up_link_;
+  resource::LinkImpl* up_link_;
   /** Link going down in the tree */
-  surf::LinkImpl* down_link_;
+  resource::LinkImpl* down_link_;
   /** Upper end of the link */
   FatTreeNode* up_node_;
   /** Lower end of the link */
@@ -98,46 +98,48 @@ public:
  */
 class XBT_PRIVATE FatTreeZone : public ClusterZone {
 public:
-  explicit FatTreeZone(NetZone* father, std::string name);
+  explicit FatTreeZone(NetZoneImpl* father, const std::string& name, resource::NetworkModel* netmodel);
+  FatTreeZone(const FatTreeZone&) = delete;
+  FatTreeZone& operator=(const FatTreeZone&) = delete;
   ~FatTreeZone() override;
-  void getLocalRoute(NetPoint* src, NetPoint* dst, RouteCreationArgs* into, double* latency) override;
+  void get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* into, double* latency) override;
 
-  /** \brief Generate the fat tree
+  /** @brief Generate the fat tree
    *
    * Once all processing nodes have been added, this will make sure the fat
    * tree is generated by calling generateLabels(), generateSwitches() and
    * then connection all nodes between them, using their label.
    */
   void seal() override;
-  /** \brief Read the parameters in topo_parameters field.
+  /** @brief Read the parameters in topo_parameters field.
    *
    * It will also store the cluster for future use.
    */
   void parse_specific_arguments(ClusterCreationArgs* cluster) override;
-  void addProcessingNode(int id);
-  void generateDotFile(const std::string& filename = "fatTree.dot") const;
+  void add_processing_node(int id);
+  void generate_dot_file(const std::string& filename = "fat_tree.dot") const;
 
 private:
   // description of a PGFT (TODO : better doc)
   unsigned long levels_ = 0;
-  std::vector<unsigned int> lowerLevelNodesNumber_; // number of children by node
-  std::vector<unsigned int> upperLevelNodesNumber_; // number of parents by node
-  std::vector<unsigned int> lowerLevelPortsNumber_; // ports between each level l and l-1
+  std::vector<unsigned int> num_children_per_node_; // number of children by node
+  std::vector<unsigned int> num_parents_per_node_;  // number of parents by node
+  std::vector<unsigned int> num_port_lower_level_;  // ports between each level l and l-1
 
   std::map<int, FatTreeNode*> compute_nodes_;
   std::vector<FatTreeNode*> nodes_;
   std::vector<FatTreeLink*> links_;
-  std::vector<unsigned int> nodesByLevel_;
+  std::vector<unsigned int> nodes_by_level_;
 
   ClusterCreationArgs* cluster_ = nullptr;
 
-  void addLink(FatTreeNode* parent, unsigned int parentPort, FatTreeNode* child, unsigned int childPort);
-  int getLevelPosition(const unsigned int level);
-  void generateLabels();
-  void generateSwitches();
-  int connectNodeToParents(FatTreeNode* node);
-  bool areRelated(FatTreeNode* parent, FatTreeNode* child);
-  bool isInSubTree(FatTreeNode* root, FatTreeNode* node);
+  void add_link(FatTreeNode* parent, unsigned int parent_port, FatTreeNode* child, unsigned int child_port);
+  int get_level_position(const unsigned int level);
+  void generate_labels();
+  void generate_switches();
+  int connect_node_to_parents(FatTreeNode* node);
+  bool are_related(FatTreeNode* parent, FatTreeNode* child);
+  bool is_in_sub_tree(FatTreeNode* root, FatTreeNode* node);
 };
 } // namespace routing
 } // namespace kernel