forked from qt-creator/qt-creator
ClangPchManager: Fix merge in ProjectPartsManager
We relied on the reserve function but this is a little bit brittle. So we create now two container and merge them later. This can be sometimes slower or even faster but anyway I think it does not matter. Change-Id: I78dca39c84cc82de17c1efe0b202b6662734d56d Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -132,7 +132,7 @@ ProjectPartsManager::UpToDataProjectParts ProjectPartsManager::update(ProjectPar
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDependeciesAndTime(
|
ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDependeciesAndTime(
|
||||||
ProjectPartContainers &&upToDateProjectParts, ProjectPartContainers &&updateSystemProjectParts)
|
ProjectPartContainers &&upToDateProjectParts, ProjectPartContainers &&orignalUpdateSystemProjectParts)
|
||||||
{
|
{
|
||||||
ProjectPartContainerReferences changeProjectParts;
|
ProjectPartContainerReferences changeProjectParts;
|
||||||
changeProjectParts.reserve(upToDateProjectParts.size());
|
changeProjectParts.reserve(upToDateProjectParts.size());
|
||||||
@@ -140,9 +140,8 @@ ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDep
|
|||||||
ProjectPartContainers updateProjectProjectParts;
|
ProjectPartContainers updateProjectProjectParts;
|
||||||
updateProjectProjectParts.reserve(upToDateProjectParts.size());
|
updateProjectProjectParts.reserve(upToDateProjectParts.size());
|
||||||
|
|
||||||
updateSystemProjectParts.reserve(updateProjectProjectParts.size() + upToDateProjectParts.size());
|
ProjectPartContainers addedUpToDateSystemProjectParts;
|
||||||
|
addedUpToDateSystemProjectParts.reserve(upToDateProjectParts.size());
|
||||||
auto systemSplit = updateSystemProjectParts.end();
|
|
||||||
|
|
||||||
FilePathIds generatedFiles = m_generatedFiles.filePathIds();
|
FilePathIds generatedFiles = m_generatedFiles.filePathIds();
|
||||||
|
|
||||||
@@ -178,7 +177,7 @@ ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDep
|
|||||||
projectPart.projectPartId = -1;
|
projectPart.projectPartId = -1;
|
||||||
break;
|
break;
|
||||||
case Change::System:
|
case Change::System:
|
||||||
updateSystemProjectParts.emplace_back(std::move(projectPart));
|
addedUpToDateSystemProjectParts.emplace_back(std::move(projectPart));
|
||||||
projectPart.projectPartId = -1;
|
projectPart.projectPartId = -1;
|
||||||
break;
|
break;
|
||||||
case Change::No:
|
case Change::No:
|
||||||
@@ -205,7 +204,7 @@ ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDep
|
|||||||
projectPart.projectPartId = -1;
|
projectPart.projectPartId = -1;
|
||||||
break;
|
break;
|
||||||
case Change::System:
|
case Change::System:
|
||||||
updateSystemProjectParts.emplace_back(std::move(projectPart));
|
addedUpToDateSystemProjectParts.emplace_back(std::move(projectPart));
|
||||||
projectPart.projectPartId = -1;
|
projectPart.projectPartId = -1;
|
||||||
break;
|
break;
|
||||||
case Change::No:
|
case Change::No:
|
||||||
@@ -234,7 +233,15 @@ ProjectPartsManagerInterface::UpToDataProjectParts ProjectPartsManager::checkDep
|
|||||||
if (watchedIdPaths.size())
|
if (watchedIdPaths.size())
|
||||||
m_clangPathwatcher.updateIdPaths(watchedIdPaths);
|
m_clangPathwatcher.updateIdPaths(watchedIdPaths);
|
||||||
|
|
||||||
std::inplace_merge(updateSystemProjectParts.begin(), systemSplit, updateSystemProjectParts.end());
|
ProjectPartContainers updateSystemProjectParts;
|
||||||
|
updateSystemProjectParts.reserve(orignalUpdateSystemProjectParts.size() + addedUpToDateSystemProjectParts.size());
|
||||||
|
|
||||||
|
std::merge(std::make_move_iterator(orignalUpdateSystemProjectParts.begin()),
|
||||||
|
std::make_move_iterator(orignalUpdateSystemProjectParts.end()),
|
||||||
|
std::make_move_iterator(addedUpToDateSystemProjectParts.begin()),
|
||||||
|
std::make_move_iterator(addedUpToDateSystemProjectParts.end()),
|
||||||
|
std::back_inserter(updateSystemProjectParts));
|
||||||
|
|
||||||
upToDateProjectParts.erase(std::remove_if(upToDateProjectParts.begin(),
|
upToDateProjectParts.erase(std::remove_if(upToDateProjectParts.begin(),
|
||||||
upToDateProjectParts.end(),
|
upToDateProjectParts.end(),
|
||||||
[](const ProjectPartContainer &projectPart) {
|
[](const ProjectPartContainer &projectPart) {
|
||||||
|
Reference in New Issue
Block a user