[英]Lemon graph from Omnet++ network
我正在尝试从omnet ++中提取网络图,并提供节点信息和链接到Lemon图。 问题的一部分很容易解决。 使用代码:
cTopology *topo = new cTopology("topo");
std::vector<std::string> nedTypes;
nedTypes.push_back("inet.node.inet.StandardHost");
topo->extractByNedTypeName(nedTypes);
int numNodes = topo->getNumNodes();
EV << "cTopology found " << topo->getNumNodes() << " nodes\n";
ListDigraph g;
ListDigraph::NodeMap<std::string> nodeName(g);
for (ListDigraph::NodeIt n(g); n != INVALID; ++n)
{
int i = 0;//counter
int numOutLinks = topo->getNode(i)->getNumOutLinks();
g.addNode();
std::vector<std::string> nodeList;
nodeName[n] = topo->getNode(i)->getModule()->getName();
nodeList.push_back(nodeName[n]);
for(int j = 0; j<numOutLinks; j++)
{
cTopology::LinkOut* lOut = topo->getNode(i)->getLinkOut(j);
cTopology::Node *rNode = lOut->getRemoteNode();
for (auto& nlist : nodeList)
{
auto nodeFound = std::find(std::begin(nlist), std::end(nlist), rNode);
if(nodeFound != std::end(nlist)){
g.addNode();
g.addArc(g.nodeFromId(i), g.nodeFromId(i+1));
}
}
} i++;
不知何故,我正在获取节点列表,现在我也在尝试获取链接信息。 也就是说,节点及其之间的链接也是如此。 如何获取链接信息并将其提供给Lemon图,我在代码中使用的方法有什么问题?
方法extractByNedTypeName()
需要完全限定的NED类型名称,即包括包。 在INET
, StandardHost
通常位于inet.node.inet
包中,因此您应该编写:
nedTypes.push_back("inet.node.inet.StandardHost");
编辑
for (ListDigraph::NodeIt n(g); n != INVALID; ++n)
的循环永远不会执行,因为图g
刚刚创建并且为空。 外循环应类似于:
for(int j = 0; j<numOutLinks; j++)
。
编辑2
由于缺少对NodeMap
的find
, NodeMap
必须编写自己的函数,例如:
ListDigraph::NodeIt::Node findNodeMap(const ListDigraph::NodeMap<std::string> & map, const ListDigraph & g,
std::string txt) {
ListDigraph::NodeIt it(g);
for (; it != INVALID; ++it) {
if (map[it] == txt)
break;
}
return it;
}
一个使用它的例子:
ListDigraph::NodeMap<std::string> nodeName(g);
// ... filling nodeName
std::string str = "node1";
ListDigraph::NodeIt::Node node = findNodeMap(nodeName, g, str);
if (node != INVALID) {
// node with name from str was found
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.