void util::NodeMap::createNodeMap(int aLevel, Node* aNode){ if(aLevel == 0 && m_nodeMap.size() == 0){ //handle root if(aNode != NULL){ BNode* newNode = new BNode(aNode); aNode->container = newNode; std::vector<BNode*> vec; vec.push_back(newNode); m_nodeMap[aLevel] = vec; } } else{ std::vector<BNode*> vec; for(std::vector<BNode*>::iterator iter = m_nodeMap[aLevel].begin(); iter != m_nodeMap[aLevel].end(); iter++){ if((*iter)->getNode() != NULL){ std::vector<Node*> children = (*iter)->getNode()->getChildren(); for(std::vector<Node*>::iterator iter2 = children.begin(); iter2 != children.end(); iter2++){ if((*iter2) != NULL && strcmp((*iter2)->getName().c_str(), "___")){ BNode* newNode = new BNode(*iter2); (*iter2)->container = newNode; newNode->setParent(*iter); vec.push_back(newNode); } } } } aLevel++; m_nodeMap[aLevel] = vec; } if(!isTreeEnd(m_nodeMap[aLevel])) createNodeMap(aLevel, aNode); }
void Hdf5DigraphWriter::writeDigraph(const Hdf5DigraphWriter::Digraph& digraph) { int numNodes = 0; for (Digraph::NodeIt node(digraph); node != lemon::INVALID; ++node) numNodes++; vigra::ArrayVector<int> n(1); vigra::ArrayVector<int> arcs; // stored in pairs n[0] = numNodes; _hdfFile.write("num_nodes", n); if (!nodeIdsConsequtive(digraph)) { // create map from node ids to consecutive ids std::map<int, int> nodeMap = createNodeMap(digraph); for (Digraph::ArcIt arc(digraph); arc != lemon::INVALID; ++arc) { arcs.push_back(nodeMap[digraph.id(digraph.source(arc))]); arcs.push_back(nodeMap[digraph.id(digraph.target(arc))]); } } else { for (Digraph::ArcIt arc(digraph); arc != lemon::INVALID; ++arc) { arcs.push_back(digraph.id(digraph.source(arc))); arcs.push_back(digraph.id(digraph.target(arc))); } } _hdfFile.write("arcs", arcs); }
void util::NodeMap::createNodeMap(Node* aRoot){ m_nodeMap.clear(); if(aRoot != NULL){ createNodeMap(0, aRoot); } }
Map::Map(int numNodes) { this->nodeArray = Model::getSelf()->nodeArray; this->selector = Model::getSelf()->selector; createNodeMap(numNodes); }