+/* $ID$ */
+
+/* Copyright (c) 2007, 2009, 2010. 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. */
#ifndef _GTNETS_TOPOLOGY_H
#include <map>
#include <vector>
+#include <set>
#include <iostream>
-#define LEFTSIDE 0
-#define RIGHTSIDE 1
-
using namespace std;
-class SGLink;
+class GTNETS_Link;
-class SGNode{
+class GTNETS_Node {
- public:
- SGNode(int id, int hostid);
- ~SGNode();
+public:
+ GTNETS_Node(int);
+ GTNETS_Node(const GTNETS_Node & node);
+ ~GTNETS_Node();
- void add_link(SGLink*);
-
- //get other link than the link with the given id.
- //Note it's only for the case the node has two links.
- SGLink* other_link(int);
-
- bool has_link(SGLink*); //TODO can do const SGLink*?
- void print_links();
+ int add_host(int);
+ int add_router(int);
+ int id() {
+ return ID_;
+ };
+ bool is_router();
+ bool include(int);
void print_hosts();
-
- vector<SGLink*>& links();
- vector<int>& hosts();
- int id(){return ID_;};
- private:
+private:
int ID_;
- bool ishost_;
- vector<int> hosts_; //simgrid hosts
- vector<SGLink*> links_;
+ int is_router_;
+ set < int >hosts_; //simgrid hosts
};
-class SGLink{
-
- public:
- SGLink(int id, SGNode* left, SGNode* right);
- ~SGLink();
-
- //for a temporary link set, that is, a link has at most two neibours.
- SGLink* left_link();
- SGLink* right_link();
-
-
- SGNode* left_node();
- SGNode* right_node();
-
- bool is_inleft(SGLink*);
- bool is_inright(SGLink*);
-
- void add_left_link(SGLink*, int side);
- void add_right_link(SGLink*, int side);
-
- int id(){return ID_;};
-
- void print();
-
- private:
+class GTNETS_Link {
+
+public:
+ GTNETS_Link();
+ GTNETS_Link(int id);
+ GTNETS_Link(const GTNETS_Link &);
+ ~GTNETS_Link();
+
+ GTNETS_Node *src_node();
+ GTNETS_Node *dst_node();
+ int peer_node(int);
+ int id() {
+ return ID_;
+ };
+ void print_link_status();
+ int add_src(GTNETS_Node *);
+ int add_dst(GTNETS_Node *);
+ bool route_exists();
+
+private:
int ID_;
- SGNode* left_node_;
- SGNode* right_node_;
+ GTNETS_Node *src_node_;
+ GTNETS_Node *dst_node_;
};
-
-class SGTopology{
- public:
- SGTopology();
- ~SGTopology();
-
- void add_link(int src, int dst, int* links, int nsize);
-
- void create_tmplink(int src, int dst, int* links, int nsize);
-
- void merge_link(SGLink*);
-
- void add_tmplink_to_links(map<int, SGLink*> tmplink); //???
-
+// To create a topology:
+// 1. add links
+// 2. add routers
+// 3. add onehop links
+class GTNETS_Topology {
+public:
+ GTNETS_Topology();
+ ~GTNETS_Topology();
+
+ bool is_router(int id);
+ int peer_node_id(int linkid, int cur_id);
+ int add_link(int id);
+ int add_router(int id);
+ int add_onehop_route(int src, int dst, int link);
+
+ int nodeid_from_hostid(int);
+ int link_size();
+ int node_size();
void print_topology();
-
- void create_gtnets_topology();
+ const vector < GTNETS_Node * >&nodes();
+ const map < int, GTNETS_Link * >&links();
- map<int, SGLink*>& get_links();
+private:
- private:
int nodeID_;
- map<int, SGLink*> links_;
- map<int, SGNode*> nodes_;
+ map < int, GTNETS_Link * >links_;
+ vector < GTNETS_Node * >nodes_;
+
+ map < int, int >hosts_; //hostid->nodeid
+
+ set < int >routers_;
};
#endif