void add_link(FatTreeNode* parent, unsigned int parent_port, FatTreeNode* child, unsigned int child_port);
int get_level_position(const unsigned int level);
void add_link(FatTreeNode* parent, unsigned int parent_port, FatTreeNode* child, unsigned int child_port);
int get_level_position(const unsigned int level);
int connect_node_to_parents(FatTreeNode* node);
bool are_related(FatTreeNode* parent, FatTreeNode* child) const;
bool is_in_sub_tree(FatTreeNode* root, FatTreeNode* node) const;
int connect_node_to_parents(FatTreeNode* node);
bool are_related(FatTreeNode* parent, FatTreeNode* child) const;
bool is_in_sub_tree(FatTreeNode* root, FatTreeNode* node) const;
void set_topology(unsigned int n_levels, const std::vector<unsigned int>& down_links,
const std::vector<unsigned int>& up_links, const std::vector<unsigned int>& link_count);
void add_processing_node(int id, resource::LinkImpl* limiter, resource::LinkImpl* loopback);
void set_topology(unsigned int n_levels, const std::vector<unsigned int>& down_links,
const std::vector<unsigned int>& up_links, const std::vector<unsigned int>& link_count);
void add_processing_node(int id, resource::LinkImpl* limiter, resource::LinkImpl* loopback);