Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
 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;
 }