Ejemplo n.º 1
0
domNode* getCommonNodeAncestor(std::list<domNodeRef>& nodes)
{
    if (nodes.empty())
        return NULL;
    if (nodes.size() == 1)
        return nodes.begin()->cast();

    std::list<domNode*> ancestors;
    size_t minAncestorCount = INT_MAX;
    for (std::list<domNodeRef>::iterator it = nodes.begin(); it != nodes.end(); ++it)
    {
        domNodeRef& node = *it;
        getNodeAncestors(node, ancestors);
        ancestors.push_back(node.cast());
        minAncestorCount = std::min(minAncestorCount, ancestors.size());
    }
    ancestors.resize(minAncestorCount);

    return ancestors.back();
}
Ejemplo n.º 2
0
Node* getCommonNodeAncestor(const std::vector<Node*>& nodes)
{
    if (nodes.empty())
        return NULL;
    if (nodes.size() == 1)
        return nodes.front();

    std::list<Node*> ancestors;
    size_t minAncestorCount = INT_MAX;
    for (std::vector<Node*>::const_iterator it = nodes.begin(); it != nodes.end(); ++it)
    {
        Node* node = *it;
        getNodeAncestors(node, ancestors);
        ancestors.push_back(node);
        minAncestorCount = std::min(minAncestorCount, ancestors.size());
    }
    ancestors.resize(minAncestorCount);

    return ancestors.back();
}