void dependency_tree::build_connections(std::map<std::string, std::vector<std::string > >
                                        key_dependency_map)
{
    for (std::map<std::string, std::vector<std::string> >::iterator kvp = key_dependency_map.begin();
         kvp != key_dependency_map.end(); ++kvp) {
        // check to see if the master node map knows the key
        if (master_node_map.find(kvp->first) != master_node_map.end()) {
            // it does, so get the Node
            dependency_node *knode = master_node_map[kvp->first];

            // apply parents list
            std::vector<std::string> vnode_parents = kvp->second;
            for (std::vector<std::string>::iterator vit = vnode_parents.begin(); vit != vnode_parents.end();
                 ++vit) {
                if (master_node_map.find(*vit) != master_node_map.end()) {
                    dependency_node *vnode = master_node_map[*vit];

                    knode->add_parent(vnode);
                    vnode->add_child(knode);
                } else {
                    // missing dependency!
                    knode->all_errors[DEPENDENCY].push_back("<" + *vit + ">");
                }
            }
        }
    }

    // finalize and check for circular dependencies
    check_for_strongly_connected_components();

    for (std::map<std::string, dependency_node *>::iterator kvp = master_node_map.begin();
         kvp != master_node_map.end(); ++kvp) {
        kvp->second->inherit_errors();
    }
}
Ejemplo n.º 2
0
void dependency_tree::build_connections(
    std::map<mod_id, std::vector<mod_id > > key_dependency_map )
{
    for( auto &elem : key_dependency_map ) {
        const auto iter = master_node_map.find( elem.first );
        if( iter != master_node_map.end() ) {
            dependency_node *knode = &iter->second;

            // apply parents list
            std::vector<mod_id> vnode_parents = elem.second;
            for( auto &vnode_parent : vnode_parents ) {
                const auto iter = master_node_map.find( vnode_parent );
                if( iter != master_node_map.end() ) {
                    dependency_node *vnode = &iter->second;

                    knode->add_parent( vnode );
                    vnode->add_child( knode );
                } else {
                    // missing dependency!
                    knode->all_errors[DEPENDENCY].push_back( "<" + vnode_parent.str() + ">" );
                }
            }
        }
    }

    // finalize and check for circular dependencies
    check_for_strongly_connected_components();

    for( auto &elem : master_node_map ) {
        elem.second.inherit_errors();
    }
}
Ejemplo n.º 3
0
void dependency_tree::build_connections(
    std::map<std::string, std::vector<std::string > > key_dependency_map )
{
    for( auto &elem : key_dependency_map ) {
        // check to see if the master node map knows the key
        if( master_node_map.find( elem.first ) != master_node_map.end() ) {
            // it does, so get the Node
            dependency_node *knode = master_node_map[elem.first].get();

            // apply parents list
            std::vector<std::string> vnode_parents = elem.second;
            for( auto &vnode_parent : vnode_parents ) {
                if( master_node_map.find( vnode_parent ) != master_node_map.end() ) {
                    dependency_node *vnode = master_node_map[vnode_parent].get();

                    knode->add_parent( vnode );
                    vnode->add_child( knode );
                } else {
                    // missing dependency!
                    knode->all_errors[DEPENDENCY].push_back( "<" + vnode_parent + ">" );
                }
            }
        }
    }

    // finalize and check for circular dependencies
    check_for_strongly_connected_components();

    for( auto &elem : master_node_map ) {
        elem.second->inherit_errors();
    }
}