Topology* TopologyFactory::createTopologyAdjacency(const TString &description) { TRACE("TopologyFactory::createTopologyAdjacency -->"); Topology* result = new Topology(); result->input_type = 0; result->is_directed = false; { // First find number of nodes, which requires to read entire file FileReader fr(description.at(1)); std::set<int> nodes; TString line; // read #nodes for(bool cont = fr.firstLine(line); cont; cont = fr.nextLine(line)) { nodes.insert(atoi(line.at(0).c_str())); nodes.insert(atoi(line.at(1).c_str())); } result->number_of_nodes = nodes.size(); result->edge_nodes.assign(nodes.begin(), nodes.end()); } //end: block result->number_of_qos = 0; result->link_list = new LinkList(result->number_of_nodes); { // Build links FileReader fr(description.at(1)); TString line; // read #nodes for(bool cont = fr.firstLine(line); cont; cont = fr.nextLine(line)) { DblVector link; link.push_back(atof(line.at(0).c_str())); // src link.push_back(atof(line.at(1).c_str())); // dst link.push_back(0.0); // core link.push_back(atof(line.at(2).c_str())); // cap result->link_list->insert(link); if (!result->is_directed) { DblVector rlink(link); rlink[0] = link[1]; rlink[1] = link[0]; result->link_list->insert(rlink); } // end: if } //end: for } //end: block TRACE("TopologyFactory::createTopologyAdjacency <--"); return result; }
//------------------------------------------------------------------------------ // void readTopology(); //------------------------------------------------------------------------------ void TopolReader::readTopology() { TRACE("TopolReader::readTopology -->"); { TString line; int number_of_edgenodes; input_type = 0; // default topology type is 0, in case previous users use the // old topology format // read #nodes, #edgenodex, #qos file_reader->firstLine(line); number_of_nodes = atoi(line.at(0).c_str()); number_of_edgenodes = atoi(line.at(1).c_str()); number_of_qos = atoi(line.at(2).c_str()); if (line.size() > 3) { input_type = atoi(line.at(3).c_str()); } if (line.size() > 4) { is_directed = (bool) atoi(line.at(4).c_str()); } // read edgenodes list if (number_of_edgenodes > 0) { file_reader->nextLine(line); for(std::size_t index=0;index<line.size();++index) { edge_nodes.push_back(atoi(line.at(index).c_str() )); } } } // read links and traffic matrix for (TString line; file_reader->nextLine(line); ) { if (line.size() == 3) // traffic matrix { src.push_back(atoi(line.at(0).c_str())); dest.push_back(atoi(line.at(1).c_str())); reqc.push_back(atof(line.at(2).c_str())); } // line,size == 3 else { // length = #values per link, i.e. src, dst, cost, capacity & #qos DblVector link; link.push_back(atof(line.at(0).c_str() )); // src link.push_back(atof(line.at(1).c_str() )); // dst cost.push_back(atoi(line.at(2).c_str() )); // cost link.push_back(0.0); // core for(std::size_t index= 3; index < line.size(); ++index) { link.push_back(atof( line.at(index).c_str() )); } link_values.push_back(link); } // line.size != 3 } TRACE("TopolReader::readTopology <--"); }