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(); }
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(); }