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;
}
Exemple #2
0
//------------------------------------------------------------------------------
//  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 <--");
}