/** * Principal function. It creates Nodes and Edges to put in the Graph, * from the given BBHG * @param bhg source BBHG */ void BBHGDrawer::make() { if(_made) { return; } ASSERT(_bhg); ASSERT(_graph); // Construct the Graph HashTable<void*, display::Node*> map; for(BBHG::Iterator bb(_bhg); bb; bb++) { display::Node *node = _graph->newNode(); map.put(*bb, node); onNode(*bb, node); } for(BBHG::Iterator bb(_bhg); bb; bb++) { display::Node *node = map.get(*bb); for(BBHG::OutIterator succ(bb); succ; succ++) { BBHGEdge* edge = succ; display::Edge *display_edge; display_edge = _graph->newEdge(node,map.get(edge->target())); onEdge(edge, display_edge); } } onEnd(_graph); _made = true; }
void MapReader::resolveNodes() { NodeParentList::const_iterator it, end; for (it = m_unresolvedNodes.begin(), end = m_unresolvedNodes.end(); it != end; ++it) { Model::Node* node = it->first; const ParentInfo& info = it->second; Model::Node* parent = resolveParent(info); if (parent == NULL) onUnresolvedNode(info, node); else onNode(parent, node); } }
MapReader::ParentInfo::Type MapReader::storeNode(Model::Node* node, const Model::EntityAttribute::List& attributes) { const String& layerIdStr = findAttribute(attributes, Model::AttributeNames::Layer); if (!StringUtils::isBlank(layerIdStr)) { const long rawId = std::atol(layerIdStr.c_str()); if (rawId > 0) { const Model::IdType layerId = static_cast<Model::IdType>(rawId); Model::Layer* layer = MapUtils::find(m_layers, layerId, static_cast<Model::Layer*>(NULL)); if (layer != NULL) onNode(layer, node); else m_unresolvedNodes.push_back(std::make_pair(node, ParentInfo::layer(layerId))); return ParentInfo::Type_Layer; } if (logger() != NULL) logger()->warn("Entity at line %u has invalid parent id", static_cast<unsigned int>(node->lineNumber()), layerIdStr.c_str()); } else { const String& groupIdStr = findAttribute(attributes, Model::AttributeNames::Group); if (!StringUtils::isBlank(groupIdStr)) { const long rawId = std::atol(groupIdStr.c_str()); if (rawId > 0) { const Model::IdType groupId = static_cast<Model::IdType>(rawId); Model::Group* group = MapUtils::find(m_groups, groupId, static_cast<Model::Group*>(NULL)); if (group != NULL) onNode(group, node); else m_unresolvedNodes.push_back(std::make_pair(node, ParentInfo::group(groupId))); return ParentInfo::Type_Group; } if (logger() != NULL) logger()->warn("Entity at line %u has invalid parent id", static_cast<unsigned int>(node->lineNumber()), groupIdStr.c_str()); } } onNode(NULL, node); return ParentInfo::Type_None; }