aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/clangpchmanagerbackend
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clangpchmanagerbackend')
-rw-r--r--src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp13
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesprovider.cpp17
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesprovider.h6
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h49
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesstorageinterface.h12
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp6
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.h2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtask.h13
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp6
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h4
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskgeneratorinterface.h2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp8
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskqueue.h5
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskqueueinterface.h2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtasksmerger.h2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtasksmergerinterface.h2
-rw-r--r--src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h108
-rw-r--r--src/tools/clangpchmanagerbackend/source/precompiledheaderstorageinterface.h13
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp112
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanager.h13
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h5
-rw-r--r--src/tools/clangpchmanagerbackend/source/toolchainargumentscache.h32
23 files changed, 252 insertions, 182 deletions
diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
index 3237aab2fb..b2a58b0d66 100644
--- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
+++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
@@ -30,11 +30,12 @@
#include <connectionserver.h>
#include <environment.h>
#include <executeinloop.h>
+#include <filepathcaching.h>
#include <generatedfiles.h>
#include <modifiedtimechecker.h>
#include <pchcreator.h>
-#include <pchmanagerserver.h>
#include <pchmanagerclientproxy.h>
+#include <pchmanagerserver.h>
#include <pchtaskgenerator.h>
#include <pchtaskqueue.h>
#include <pchtasksmerger.h>
@@ -42,7 +43,7 @@
#include <processormanager.h>
#include <progresscounter.h>
#include <projectpartsmanager.h>
-#include <filepathcaching.h>
+#include <projectpartsstorage.h>
#include <refactoringdatabaseinitializer.h>
#include <sqlitedatabase.h>
#include <taskscheduler.h>
@@ -63,14 +64,15 @@ using namespace std::chrono_literals;
using ClangBackEnd::ClangPathWatcher;
using ClangBackEnd::ConnectionServer;
+using ClangBackEnd::FilePathCache;
+using ClangBackEnd::FilePathView;
using ClangBackEnd::GeneratedFiles;
using ClangBackEnd::PchCreator;
using ClangBackEnd::PchManagerClientProxy;
using ClangBackEnd::PchManagerServer;
using ClangBackEnd::PrecompiledHeaderStorage;
using ClangBackEnd::ProjectPartsManager;
-using ClangBackEnd::FilePathCache;
-using ClangBackEnd::FilePathView;
+using ClangBackEnd::ProjectPartsStorage;
using ClangBackEnd::TimeStamp;
class PchManagerApplication final : public QCoreApplication
@@ -179,7 +181,8 @@ struct Data // because we have a cycle dependency
ClangBackEnd::FilePathCaching filePathCache{database};
ClangPathWatcher<QFileSystemWatcher, QTimer> includeWatcher{filePathCache};
ApplicationEnvironment environment;
- ProjectPartsManager projectParts;
+ ProjectPartsStorage<> projectPartsStorage{database};
+ ProjectPartsManager projectParts{projectPartsStorage};
GeneratedFiles generatedFiles;
PchCreatorManager pchCreatorManager{generatedFiles,
environment,
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.cpp b/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.cpp
index a2a7a813ac..bf00f39098 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.cpp
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.cpp
@@ -101,19 +101,15 @@ UsedMacros BuildDependenciesProvider::createUsedMacrosFromStorage(const SourceEn
return usedMacros;
}
-std::pair<SourceEntries, int>
-BuildDependenciesProvider::createSourceEntriesFromStorage(
- const FilePathIds &sourcePathIds,
- Utils::SmallStringView projectPartName) const {
+std::pair<SourceEntries, ProjectPartId> BuildDependenciesProvider::createSourceEntriesFromStorage(
+ const FilePathIds &sourcePathIds, ProjectPartId projectPartId) const
+{
SourceEntries includes;
Sqlite::DeferredTransaction transaction(m_transactionBackend);
- int projectPartId = m_storage.fetchProjectPartId(projectPartName);
-
for (FilePathId sourcePathId : sourcePathIds) {
- SourceEntries entries =
- m_storage.fetchDependSources(sourcePathId, projectPartId);
+ SourceEntries entries = m_storage.fetchDependSources(sourcePathId, projectPartId);
SourceEntries mergedEntries = setUnion<SourceEntries>(includes, entries);
includes = std::move(mergedEntries);
@@ -124,8 +120,9 @@ BuildDependenciesProvider::createSourceEntriesFromStorage(
return {includes, projectPartId};
}
-void BuildDependenciesProvider::storeBuildDependency(
- const BuildDependency &buildDependency, int projectPartId) {
+void BuildDependenciesProvider::storeBuildDependency(const BuildDependency &buildDependency,
+ ProjectPartId projectPartId)
+{
Sqlite::ImmediateTransaction transaction(m_transactionBackend);
m_storage.insertOrUpdateSources(buildDependency.sources, projectPartId);
m_storage.insertOrUpdateFileStatuses(buildDependency.fileStatuses);
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.h b/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.h
index 2eb5210518..9700b83aa3 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesprovider.h
@@ -55,9 +55,9 @@ public:
private:
BuildDependency createBuildDependencyFromStorage(SourceEntries &&includes) const;
UsedMacros createUsedMacrosFromStorage(const SourceEntries &includes) const;
- std::pair<SourceEntries, int> createSourceEntriesFromStorage(
- const FilePathIds &sourcePathIds, Utils::SmallStringView projectPartName) const;
- void storeBuildDependency(const BuildDependency &buildDependency, int projectPartId);
+ std::pair<SourceEntries, ProjectPartId> createSourceEntriesFromStorage(
+ const FilePathIds &sourcePathIds, ProjectPartId projectPartId) const;
+ void storeBuildDependency(const BuildDependency &buildDependency, ProjectPartId projectPartId);
private:
BuildDependenciesStorageInterface &m_storage;
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
index 3e6d00da3f..e7269dd0f9 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
@@ -53,17 +53,16 @@ public:
transaction.commit();
}
- void insertOrUpdateSources(const SourceEntries &sourceEntries, int projectPartId) override
+ void insertOrUpdateSources(const SourceEntries &sourceEntries, ProjectPartId projectPartId) override
{
- deleteAllProjectPartsSourcesWithProjectPartNameStatement.write(
- projectPartId);
+ deleteAllProjectPartsFilesWithProjectPartNameStatement.write(projectPartId.projectPathId);
for (const SourceEntry &entry : sourceEntries) {
- insertOrUpdateProjectPartsSourcesStatement.write(
- entry.sourceId.filePathId,
- projectPartId,
- static_cast<uchar>(entry.sourceType),
- static_cast<uchar>(entry.hasMissingIncludes));
+ insertOrUpdateProjectPartsFilesStatement.write(entry.sourceId.filePathId,
+ projectPartId.projectPathId,
+ static_cast<uchar>(entry.sourceType),
+ static_cast<uchar>(
+ entry.hasMissingIncludes));
}
}
@@ -108,22 +107,22 @@ public:
deleteNewSourceDependenciesStatement.execute();
}
- int fetchProjectPartId(Utils::SmallStringView projectPartName) override
+ ProjectPartId fetchProjectPartId(Utils::SmallStringView projectPartName) override
{
- auto projectPartId = fetchProjectPartIdStatement.template value<int>(projectPartName);
+ auto projectPartId = fetchProjectPartIdStatement.template value<ProjectPartId>(projectPartName);
if (projectPartId)
- return projectPartId.value();
+ return *projectPartId;
insertProjectPartNameStatement.write(projectPartName);
return static_cast<int>(database.lastInsertedRowId());
}
- SourceEntries fetchDependSources(FilePathId sourceId, int projectPartId) const override
+ SourceEntries fetchDependSources(FilePathId sourceId, ProjectPartId projectPartId) const override
{
- return fetchSourceDependenciesStatement.template values<SourceEntry, 4>(
- 300, sourceId.filePathId, projectPartId);
+ return fetchSourceDependenciesStatement
+ .template values<SourceEntry, 4>(300, sourceId.filePathId, projectPartId.projectPathId);
}
UsedMacros fetchUsedMacros(FilePathId sourceId) const override
@@ -131,13 +130,11 @@ public:
return fetchUsedMacrosStatement.template values<UsedMacro, 2>(128, sourceId.filePathId);
}
- void updatePchCreationTimeStamp(
- long long pchCreationTimeStamp,
- Utils::SmallStringView projectPartName) override {
+ void updatePchCreationTimeStamp(long long pchCreationTimeStamp, ProjectPartId projectPartId) override
+ {
Sqlite::ImmediateTransaction transaction{database};
- updatePchCreationTimeStampStatement.write(pchCreationTimeStamp,
- projectPartName);
+ updatePchCreationTimeStampStatement.write(pchCreationTimeStamp, projectPartId.projectPathId);
transaction.commit();
}
@@ -243,8 +240,8 @@ public:
"DELETE FROM newSourceDependencies",
database
};
- WriteStatement insertOrUpdateProjectPartsSourcesStatement{
- "INSERT INTO projectPartsSources(sourceId, projectPartId, "
+ WriteStatement insertOrUpdateProjectPartsFilesStatement{
+ "INSERT INTO projectPartsFiles(sourceId, projectPartId, "
"sourceType, hasMissingIncludes) VALUES (?001, ?002, ?003, ?004) ON "
"CONFLICT(sourceId, projectPartId) DO UPDATE SET sourceType = ?003, "
"hasMissingIncludes = ?004",
@@ -255,7 +252,7 @@ public:
"collectedDependencies WHERE sourceDependencies.sourceId == "
"collectedDependencies.sourceId) SELECT sourceId, "
"pchCreationTimeStamp, sourceType, hasMissingIncludes FROM "
- "collectedDependencies NATURAL JOIN projectPartsSources WHERE "
+ "collectedDependencies NATURAL JOIN projectPartsFiles WHERE "
"projectPartId = ? ORDER BY sourceId",
database};
mutable ReadStatement fetchProjectPartIdStatement{
@@ -269,11 +266,9 @@ public:
database
};
WriteStatement updatePchCreationTimeStampStatement{
- "UPDATE projectPartsSources SET pchCreationTimeStamp = ?001 WHERE "
- "projectPartId = (SELECT "
- "projectPartId FROM projectParts WHERE projectPartName = ?002)",
+ "UPDATE projectPartsFiles SET pchCreationTimeStamp = ?001 WHERE projectPartId = ?002",
database};
- WriteStatement deleteAllProjectPartsSourcesWithProjectPartNameStatement{
- "DELETE FROM projectPartsSources WHERE projectPartId = ?", database};
+ WriteStatement deleteAllProjectPartsFilesWithProjectPartNameStatement{
+ "DELETE FROM projectPartsFiles WHERE projectPartId = ?", database};
};
}
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesstorageinterface.h b/src/tools/clangpchmanagerbackend/source/builddependenciesstorageinterface.h
index 4edc47fce1..a56e88b1f2 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesstorageinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesstorageinterface.h
@@ -30,6 +30,7 @@
#include <builddependency.h>
#include <filepathid.h>
#include <filestatus.h>
+#include <projectpartid.h>
#include <sourcedependency.h>
#include <usedmacro.h>
@@ -44,20 +45,17 @@ public:
BuildDependenciesStorageInterface(const BuildDependenciesStorageInterface &) = delete;
BuildDependenciesStorageInterface &operator=(const BuildDependenciesStorageInterface &) = delete;
- virtual void insertOrUpdateSources(const SourceEntries &sourceIds,
- int projectPartId) = 0;
+ virtual void insertOrUpdateSources(const SourceEntries &sourceIds, ProjectPartId projectPartId) = 0;
virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0;
virtual void
insertOrUpdateFileStatuses(const FileStatuses &fileStatuses) = 0;
virtual void insertOrUpdateSourceDependencies(const SourceDependencies &sourceDependencies) = 0;
virtual long long fetchLowestLastModifiedTime(FilePathId sourceId) const = 0;
virtual SourceEntries fetchDependSources(FilePathId sourceId,
- int projectPartId) const = 0;
+ ProjectPartId projectPartId) const = 0;
virtual UsedMacros fetchUsedMacros(FilePathId sourceId) const = 0;
- virtual int fetchProjectPartId(Utils::SmallStringView projectPartName) = 0;
- virtual void updatePchCreationTimeStamp(long long pchCreationTimeStamp,
- Utils::SmallStringView projectPartName)
- = 0;
+ virtual ProjectPartId fetchProjectPartId(Utils::SmallStringView projectPartName) = 0;
+ virtual void updatePchCreationTimeStamp(long long pchCreationTimeStamp, ProjectPartId projectPartId) = 0;
protected:
~BuildDependenciesStorageInterface() = default;
diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
index 89ad912640..c1c12121aa 100644
--- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
@@ -83,9 +83,9 @@ void PchManagerServer::removeProjectParts(RemoveProjectPartsMessage &&message)
}
namespace {
-Utils::SmallStringVector projectPartIds(const ProjectPartContainers &projectParts)
+ProjectPartIds projectPartIds(const ProjectPartContainers &projectParts)
{
- Utils::SmallStringVector ids;
+ ProjectPartIds ids;
ids.reserve(projectParts.size());
std::transform(projectParts.cbegin(),
@@ -118,7 +118,7 @@ void PchManagerServer::removeGeneratedFiles(RemoveGeneratedFilesMessage &&messag
m_generatedFiles.remove(message.takeGeneratedFiles());
}
-void PchManagerServer::pathsWithIdsChanged(const Utils::SmallStringVector &ids)
+void PchManagerServer::pathsWithIdsChanged(const ProjectPartIds &ids)
{
ArgumentsEntries entries = m_toolChainsArgumentsCache.arguments(ids);
diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
index 9cf8aa8321..cc9daa7aa4 100644
--- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
+++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
@@ -57,7 +57,7 @@ public:
void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) override;
void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) override;
- void pathsWithIdsChanged(const Utils::SmallStringVector &ids) override;
+ void pathsWithIdsChanged(const ProjectPartIds &ids) override;
void pathsChanged(const FilePathIds &filePathIds) override;
void setPchCreationProgress(int progress, int total);
diff --git a/src/tools/clangpchmanagerbackend/source/pchtask.h b/src/tools/clangpchmanagerbackend/source/pchtask.h
index 528d6e63f1..7d8879fcbd 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtask.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtask.h
@@ -30,6 +30,7 @@
#include <compilermacro.h>
#include <filepath.h>
#include <includesearchpath.h>
+#include <projectpartid.h>
#include <utils/smallstringvector.h>
#include <utils/cpplanguage_details.h>
@@ -39,11 +40,11 @@ namespace ClangBackEnd {
class PchTask
{
public:
- PchTask(Utils::SmallString &&projectPartId,
+ PchTask(ProjectPartId projectPartId,
FilePathIds &&includes,
FilePathIds &&sources,
CompilerMacros &&compilerMacros,
- Utils::SmallStringVector &&usedMacros,
+ Utils::SmallStringVector &&usedMacros, // TODO remove
Utils::SmallStringVector toolChainArguments,
IncludeSearchPaths systemIncludeSearchPaths,
IncludeSearchPaths projectIncludeSearchPaths,
@@ -62,11 +63,11 @@ public:
, languageExtension(languageExtension)
{}
- PchTask(Utils::SmallStringVector &&projectPartIds,
+ PchTask(ProjectPartIds &&projectPartIds,
FilePathIds &&includes,
FilePathIds &&sources,
CompilerMacros &&compilerMacros,
- Utils::SmallStringVector &&usedMacros,
+ Utils::SmallStringVector &&usedMacros, // TODO remove
Utils::SmallStringVector toolChainArguments,
IncludeSearchPaths systemIncludeSearchPaths,
IncludeSearchPaths projectIncludeSearchPaths,
@@ -98,11 +99,11 @@ public:
&& first.languageExtension == second.languageExtension;
}
- Utils::SmallStringView projectPartId() const { return projectPartIds.front(); }
+ ProjectPartId projectPartId() const { return projectPartIds.front(); }
public:
FilePath systemPchPath;
- Utils::SmallStringVector projectPartIds;
+ ProjectPartIds projectPartIds;
FilePathIds includes;
FilePathIds sources;
CompilerMacros compilerMacros;
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp
index a44fc91b16..c0a42eae39 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp
@@ -49,7 +49,7 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts,
buildDependency.usedMacros,
projectPart.compilerMacros};
- pchTaskSets.emplace_back(PchTask{projectPart.projectPartId.clone(),
+ pchTaskSets.emplace_back(PchTask{projectPart.projectPartId,
std::move(filter.topSystemIncludes),
{},
std::move(filter.systemCompilerMacros),
@@ -60,7 +60,7 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts,
projectPart.language,
projectPart.languageVersion,
projectPart.languageExtension},
- PchTask{std::move(projectPart.projectPartId),
+ PchTask{projectPart.projectPartId,
std::move(filter.topProjectIncludes),
std::move(filter.sources),
std::move(filter.projectCompilerMacros),
@@ -77,7 +77,7 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts,
m_pchTasksMergerInterface.mergeTasks(std::move(pchTaskSets), std::move(toolChainArguments));
}
-void PchTaskGenerator::removeProjectParts(const Utils::SmallStringVector &projectsPartIds)
+void PchTaskGenerator::removeProjectParts(const ProjectPartIds &projectsPartIds)
{
m_pchTasksMergerInterface.removePchTasks(projectsPartIds);
}
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h
index 38376ce2a2..dc7d201cde 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h
@@ -50,8 +50,8 @@ public:
{}
void addProjectParts(ProjectPartContainers &&projectParts,
- Utils::SmallStringVector &&toolChainArguments);
- void removeProjectParts(const Utils::SmallStringVector &projectsPartIds);
+ Utils::SmallStringVector &&toolChainArguments) override;
+ void removeProjectParts(const ProjectPartIds &projectsPartIds) override;
private:
BuildDependenciesProviderInterface &m_buildDependenciesProvider;
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskgeneratorinterface.h b/src/tools/clangpchmanagerbackend/source/pchtaskgeneratorinterface.h
index 4546284265..abb25d2ef1 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskgeneratorinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskgeneratorinterface.h
@@ -35,7 +35,7 @@ public:
virtual void addProjectParts(ProjectPartContainers &&projectParts,
Utils::SmallStringVector &&toolChainArguments)
= 0;
- virtual void removeProjectParts(const Utils::SmallStringVector &projectsPartIds) = 0;
+ virtual void removeProjectParts(const ProjectPartIds &projectsPartIds) = 0;
protected:
~PchTaskGeneratorInterface() = default;
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
index 6c1a09fd3e..2abe3fa394 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
@@ -54,18 +54,18 @@ void PchTaskQueue::addPchTasks(PchTasks &&newPchTasks, PchTasks &destination)
m_progressCounter.addTotal(int(destination.size() - oldSize));
}
-void PchTaskQueue::removePchTasksByProjectPartId(const Utils::SmallStringVector &projectsPartIds,
+void PchTaskQueue::removePchTasksByProjectPartId(const ProjectPartIds &projectsPartIds,
PchTasks &destination)
{
class CompareDifference
{
public:
- bool operator()(const PchTask &first, const Utils::SmallString &second)
+ bool operator()(const PchTask &first, ProjectPartId second)
{
return first.projectPartId() < second;
}
- bool operator()(const Utils::SmallString &first, const PchTask &second)
+ bool operator()(ProjectPartId first, const PchTask &second)
{
return first < second.projectPartId();
}
@@ -97,7 +97,7 @@ void PchTaskQueue::addProjectPchTasks(PchTasks &&pchTasks)
addPchTasks(std::move(pchTasks), m_projectPchTasks);
}
-void PchTaskQueue::removePchTasks(const Utils::SmallStringVector &projectsPartIds)
+void PchTaskQueue::removePchTasks(const ProjectPartIds &projectsPartIds)
{
removePchTasksByProjectPartId(projectsPartIds, m_projectPchTasks);
}
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.h b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.h
index 5d00419817..2d6d76ee58 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.h
@@ -56,7 +56,7 @@ public:
void addSystemPchTasks(PchTasks &&pchTasks) override;
void addProjectPchTasks(PchTasks &&pchTasks) override;
- void removePchTasks(const Utils::SmallStringVector &projectsPartIds) override;
+ void removePchTasks(const ProjectPartIds &projectsPartIds) override;
void processEntries() override;
@@ -68,8 +68,7 @@ public:
private:
void addPchTasks(PchTasks &&pchTasks, PchTasks &destination);
- void removePchTasksByProjectPartId(const Utils::SmallStringVector &projectsPartIds,
- PchTasks &destination);
+ void removePchTasksByProjectPartId(const ProjectPartIds &projectsPartIds, PchTasks &destination);
void processProjectPchTasks();
void processSystemPchTasks();
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskqueueinterface.h b/src/tools/clangpchmanagerbackend/source/pchtaskqueueinterface.h
index 45e1db8f9d..31c709d1a9 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskqueueinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskqueueinterface.h
@@ -35,7 +35,7 @@ class PchTaskQueueInterface : public QueueInterface
public:
virtual void addSystemPchTasks(PchTasks &&pchTasks) = 0;
virtual void addProjectPchTasks(PchTasks &&pchTasks) = 0;
- virtual void removePchTasks(const Utils::SmallStringVector &projectsPartIds) = 0;
+ virtual void removePchTasks(const ProjectPartIds &projectsPartIds) = 0;
protected:
~PchTaskQueueInterface() = default;
diff --git a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp
index 65d1a3e9fe..7e850b8947 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp
@@ -37,7 +37,7 @@ void PchTasksMerger::mergeTasks(PchTaskSets &&taskSets,
m_pchTaskQueue.processEntries();
}
-void PchTasksMerger::removePchTasks(const Utils::SmallStringVector &projectPartIds)
+void PchTasksMerger::removePchTasks(const ProjectPartIds &projectPartIds)
{
m_pchTaskQueue.removePchTasks(projectPartIds);
}
diff --git a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.h b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.h
index 26df2022b4..5481a50dff 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.h
@@ -40,7 +40,7 @@ public:
{}
void mergeTasks(PchTaskSets &&taskSets, Utils::SmallStringVector &&toolChainArguments) override;
- void removePchTasks(const Utils::SmallStringVector &projectPartIds) override;
+ void removePchTasks(const ProjectPartIds &projectPartIds) override;
static CompilerMacros mergeMacros(const CompilerMacros &firstCompilerMacros,
const CompilerMacros &secondCompilerMacros);
diff --git a/src/tools/clangpchmanagerbackend/source/pchtasksmergerinterface.h b/src/tools/clangpchmanagerbackend/source/pchtasksmergerinterface.h
index a691766b49..69f1e0470a 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtasksmergerinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/pchtasksmergerinterface.h
@@ -32,7 +32,7 @@ class PchTasksMergerInterface
{
public:
virtual void mergeTasks(PchTaskSets &&taskSets, Utils::SmallStringVector &&toolChainArguments) = 0;
- virtual void removePchTasks(const Utils::SmallStringVector &projectPartIds) = 0;
+ virtual void removePchTasks(const ProjectPartIds &projectPartIds) = 0;
protected:
~PchTasksMergerInterface() = default;
diff --git a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
index 7d1069b998..e1b2f8aa2e 100644
--- a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
+++ b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
@@ -41,129 +41,125 @@ class PrecompiledHeaderStorage final : public PrecompiledHeaderStorageInterface
using WriteStatement = typename Database::WriteStatement;
public:
PrecompiledHeaderStorage(Database &database)
- : m_transaction(database),
- m_database(database)
+ : transaction(database)
+ , database(database)
{
- m_transaction.commit();
+ transaction.commit();
}
- void insertProjectPrecompiledHeader(Utils::SmallStringView projectPartName,
+ void insertProjectPrecompiledHeader(ProjectPartId projectPartId,
Utils::SmallStringView pchPath,
long long pchBuildTime) override
{
try {
- Sqlite::ImmediateTransaction transaction{m_database};
+ Sqlite::ImmediateTransaction transaction{database};
- m_insertProjectPartStatement.write(projectPartName);
- m_insertProjectPrecompiledHeaderStatement.write(projectPartName, pchPath, pchBuildTime);
+ insertProjectPrecompiledHeaderStatement.write(projectPartId.projectPathId,
+ pchPath,
+ pchBuildTime);
transaction.commit();
- } catch (const Sqlite::StatementIsBusy) {
- insertProjectPrecompiledHeader(projectPartName, pchPath, pchBuildTime);
+ } catch (const Sqlite::StatementIsBusy &) {
+ insertProjectPrecompiledHeader(projectPartId, pchPath, pchBuildTime);
}
}
- void deleteProjectPrecompiledHeader(Utils::SmallStringView projectPartName) override
+ void deleteProjectPrecompiledHeader(ProjectPartId projectPartId) override
{
try {
- Sqlite::ImmediateTransaction transaction{m_database};
+ Sqlite::ImmediateTransaction transaction{database};
- m_deleteProjectPrecompiledHeaderStatement.write(projectPartName);
+ deleteProjectPrecompiledHeaderStatement.write(projectPartId.projectPathId);
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
- deleteProjectPrecompiledHeader(projectPartName);
+ deleteProjectPrecompiledHeader(projectPartId);
}
}
- void insertSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames,
+ void insertSystemPrecompiledHeaders(const ProjectPartIds &projectPartIds,
Utils::SmallStringView pchPath,
long long pchBuildTime) override
{
try {
- Sqlite::ImmediateTransaction transaction{m_database};
+ Sqlite::ImmediateTransaction transaction{database};
- for (Utils::SmallStringView projectPartName : projectPartNames) {
- m_insertProjectPartStatement.write(projectPartName);
- m_insertSystemPrecompiledHeaderStatement.write(projectPartName, pchPath, pchBuildTime);
+ for (ProjectPartId projectPartId : projectPartIds) {
+ insertSystemPrecompiledHeaderStatement.write(projectPartId.projectPathId,
+ pchPath,
+ pchBuildTime);
}
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
- insertSystemPrecompiledHeaders(projectPartNames, pchPath, pchBuildTime);
+ insertSystemPrecompiledHeaders(projectPartIds, pchPath, pchBuildTime);
}
}
- void deleteSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames) override
+ void deleteSystemPrecompiledHeaders(const ProjectPartIds &projectPartIds) override
{
try {
- Sqlite::ImmediateTransaction transaction{m_database};
+ Sqlite::ImmediateTransaction transaction{database};
- for (Utils::SmallStringView projectPartName : projectPartNames)
- m_deleteSystemPrecompiledHeaderStatement.write(projectPartName);
+ for (ProjectPartId projectPartId : projectPartIds)
+ deleteSystemPrecompiledHeaderStatement.write(projectPartId.projectPathId);
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
- deleteSystemPrecompiledHeaders(projectPartNames);
+ deleteSystemPrecompiledHeaders(projectPartIds);
}
}
- FilePath fetchSystemPrecompiledHeaderPath(Utils::SmallStringView projectPartName) override
+ FilePath fetchSystemPrecompiledHeaderPath(ProjectPartId projectPartId) override
{
try {
- Sqlite::DeferredTransaction transaction{m_database};
+ Sqlite::DeferredTransaction transaction{database};
- auto value = m_fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
- projectPartName);
+ auto value = fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
+ projectPartId.projectPathId);
if (value)
- return value.value();
+ return *value;
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
- return fetchSystemPrecompiledHeaderPath(projectPartName);
+ return fetchSystemPrecompiledHeaderPath(projectPartId);
}
return FilePath("");
}
- Utils::optional<ProjectPartPch> fetchPrecompiledHeader(int projectPartId) const
+ Utils::optional<ProjectPartPch> fetchPrecompiledHeader(ProjectPartId projectPartId) const
{
- return m_getPrecompiledHeader.template value<ProjectPartPch, 2>(projectPartId);
+ return getPrecompiledHeader.template value<ProjectPartPch, 3>(projectPartId.projectPathId);
}
public:
- Sqlite::ImmediateNonThrowingDestructorTransaction m_transaction;
- Database &m_database;
- WriteStatement m_insertProjectPrecompiledHeaderStatement{
+ Sqlite::ImmediateNonThrowingDestructorTransaction transaction;
+ Database &database;
+ WriteStatement insertProjectPrecompiledHeaderStatement{
"INSERT INTO precompiledHeaders(projectPartId, projectPchPath, projectPchBuildTime) "
"VALUES((SELECT projectPartId FROM projectParts WHERE projectPartName = ?001),?002,?003) "
"ON CONFLICT (projectPartId) DO UPDATE SET projectPchPath=?002,projectPchBuildTime=?003",
- m_database};
- WriteStatement m_insertSystemPrecompiledHeaderStatement{
+ database};
+ WriteStatement insertSystemPrecompiledHeaderStatement{
"INSERT INTO precompiledHeaders(projectPartId, systemPchPath, systemPchBuildTime) "
- "VALUES((SELECT projectPartId FROM projectParts WHERE projectPartName = ?001),?002,?003) "
+ "VALUES(?001,?002,?003) "
"ON CONFLICT (projectPartId) DO UPDATE SET systemPchPath=?002,systemPchBuildTime=?003",
- m_database};
- WriteStatement m_insertProjectPartStatement{
- "INSERT OR IGNORE INTO projectParts(projectPartName) VALUES (?)", m_database};
- WriteStatement m_deleteProjectPrecompiledHeaderStatement{
+ database};
+ WriteStatement deleteProjectPrecompiledHeaderStatement{
"UPDATE OR IGNORE precompiledHeaders SET projectPchPath=NULL,projectPchBuildTime=NULL "
- "WHERE projectPartId = (SELECT projectPartId FROM "
- "projectParts WHERE projectPartName = ?)",
- m_database};
- WriteStatement m_deleteSystemPrecompiledHeaderStatement{
+ "WHERE projectPartId = ?",
+ database};
+ WriteStatement deleteSystemPrecompiledHeaderStatement{
"UPDATE OR IGNORE precompiledHeaders SET systemPchPath=NULL,systemPchBuildTime=NULL "
- "WHERE projectPartId = (SELECT projectPartId FROM "
- "projectParts WHERE projectPartName = ?)",
- m_database};
- ReadStatement m_fetchSystemPrecompiledHeaderPathStatement{
- "SELECT systemPchPath FROM precompiledHeaders WHERE projectPartId = (SELECT projectPartId "
- "FROM projectParts WHERE projectPartName = ?)",
- m_database};
- mutable ReadStatement m_getPrecompiledHeader{
- "SELECT ifnull(nullif(projectPchPath, ''), systemPchPath), "
+ "WHERE projectPartId = ?",
+ database};
+ ReadStatement fetchSystemPrecompiledHeaderPathStatement{
+ "SELECT systemPchPath FROM precompiledHeaders WHERE projectPartId = ?", database};
+ mutable ReadStatement getPrecompiledHeader{
+ "SELECT projectPartId, ifnull(nullif(projectPchPath, ''), systemPchPath), "
"projectPchBuildTime FROM precompiledHeaders WHERE projectPartId = ?",
- m_database};
+ database};
};
}
diff --git a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorageinterface.h b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorageinterface.h
index 06833be4a2..e2a2b4a3b6 100644
--- a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorageinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorageinterface.h
@@ -28,6 +28,7 @@
#include "projectpartpch.h"
#include <filepath.h>
+#include <projectpartid.h>
#include <utils/smallstringvector.h>
#include <utils/optional.h>
@@ -42,18 +43,18 @@ public:
PrecompiledHeaderStorageInterface(const PrecompiledHeaderStorageInterface &) = delete;
PrecompiledHeaderStorageInterface &operator=(const PrecompiledHeaderStorageInterface &) = delete;
- virtual void insertProjectPrecompiledHeader(Utils::SmallStringView projectPartName,
+ virtual void insertProjectPrecompiledHeader(ProjectPartId projectPartId,
Utils::SmallStringView pchPath,
long long pchBuildTime)
= 0;
- virtual void deleteProjectPrecompiledHeader(Utils::SmallStringView projectPartName) = 0;
- virtual void insertSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames,
+ virtual void deleteProjectPrecompiledHeader(ProjectPartId projectPartName) = 0;
+ virtual void insertSystemPrecompiledHeaders(const ProjectPartIds &projectPartIds,
Utils::SmallStringView pchPath,
long long pchBuildTime)
= 0;
- virtual void deleteSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames) = 0;
- virtual FilePath fetchSystemPrecompiledHeaderPath(Utils::SmallStringView projectPartName) = 0;
- virtual Utils::optional<ProjectPartPch> fetchPrecompiledHeader(int projectPartId) const = 0;
+ virtual void deleteSystemPrecompiledHeaders(const ProjectPartIds &projectPartIds) = 0;
+ virtual FilePath fetchSystemPrecompiledHeaderPath(ProjectPartId projectPartId) = 0;
+ virtual Utils::optional<ProjectPartPch> fetchPrecompiledHeader(ProjectPartId projectPartId) const = 0;
protected:
~PrecompiledHeaderStorageInterface() = default;
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
index 8333ed9674..ada99f44cd 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
@@ -32,44 +32,115 @@
namespace ClangBackEnd {
inline namespace Pch {
+ProjectPartIds toProjectPartIds(const ProjectPartContainers &projectsParts)
+{
+ ProjectPartIds ids;
+ ids.reserve(projectsParts.size());
+ std::transform(projectsParts.begin(),
+ projectsParts.end(),
+ std::back_inserter(ids),
+ [](const auto &projectPart) { return projectPart.projectPartId; });
+
+ return ids;
+}
ProjectPartContainers ProjectPartsManager::update(ProjectPartContainers &&projectsParts)
{
- auto updatedProjectPartContainers = newProjectParts(std::move(projectsParts));
+ auto updatedProjectParts = filterNewProjectParts(std::move(projectsParts), m_projectParts);
- mergeProjectParts(updatedProjectPartContainers);
+ if (updatedProjectParts.empty())
+ return {};
- return updatedProjectPartContainers;
+ auto persistentProjectParts = m_projectPartsStorage.fetchProjectParts(
+ toProjectPartIds(updatedProjectParts));
+
+ if (persistentProjectParts.size() > 0) {
+ mergeProjectParts(persistentProjectParts);
+
+ updatedProjectParts = filterNewProjectParts(std::move(updatedProjectParts),
+ persistentProjectParts);
+
+ if (updatedProjectParts.empty())
+ return {};
+ }
+
+ m_projectPartsStorage.updateProjectParts(updatedProjectParts);
+
+ mergeProjectParts(updatedProjectParts);
+
+ return updatedProjectParts;
}
-void ProjectPartsManager::remove(const Utils::SmallStringVector &ids)
+void ProjectPartsManager::remove(const ProjectPartIds &projectPartIds)
{
- auto shouldRemove = [&] (const ProjectPartContainer &projectPart) {
- return std::find(ids.begin(), ids.end(), projectPart.projectPartId) != ids.end();
+ ProjectPartContainers projectPartsWithoutIds;
+
+ struct Compare
+ {
+ bool operator()(ProjectPartId first, const ProjectPartContainer &second)
+ {
+ return first < second.projectPartId;
+ }
+
+ bool operator()(ProjectPartId first, const ProjectPartId &second) { return first < second; }
+
+ bool operator()(const ProjectPartContainer &first, const ProjectPartContainer &second)
+ {
+ return first.projectPartId < second.projectPartId;
+ }
+
+ bool operator()(const ProjectPartContainer &first, ProjectPartId second)
+ {
+ return first.projectPartId < second;
+ }
};
- auto newEnd = std::remove_if(m_projectParts.begin(), m_projectParts.end(), shouldRemove);
- m_projectParts.erase(newEnd, m_projectParts.end());
+ std::set_difference(std::make_move_iterator(m_projectParts.begin()),
+ std::make_move_iterator(m_projectParts.end()),
+ projectPartIds.begin(),
+ projectPartIds.end(),
+ std::back_inserter(projectPartsWithoutIds),
+ Compare{});
+
+ m_projectParts = std::move(projectPartsWithoutIds);
}
-ProjectPartContainers ProjectPartsManager::projects(const Utils::SmallStringVector &projectPartIds) const
+ProjectPartContainers ProjectPartsManager::projects(const ProjectPartIds &projectPartIds) const
{
ProjectPartContainers projectPartsWithIds;
- std::copy_if(m_projectParts.begin(),
- m_projectParts.end(),
- std::back_inserter(projectPartsWithIds),
- [&] (const ProjectPartContainer &projectPart) {
- return std::binary_search(projectPartIds.begin(), projectPartIds.end(), projectPart.projectPartId);
- });
+ struct Compare
+ {
+ bool operator()(ProjectPartId first, const ProjectPartContainer &second)
+ {
+ return first < second.projectPartId;
+ }
+
+ bool operator()(ProjectPartId first, const ProjectPartId &second) { return first < second; }
+
+ bool operator()(const ProjectPartContainer &first, const ProjectPartContainer &second)
+ {
+ return first.projectPartId < second.projectPartId;
+ }
+
+ bool operator()(const ProjectPartContainer &first, ProjectPartId second)
+ {
+ return first.projectPartId < second;
+ }
+ };
+
+ std::set_intersection(m_projectParts.begin(),
+ m_projectParts.end(),
+ projectPartIds.begin(),
+ projectPartIds.end(),
+ std::back_inserter(projectPartsWithIds),
+ Compare{});
return projectPartsWithIds;
}
void ProjectPartsManager::updateDeferred(const ProjectPartContainers &deferredProjectsParts)
{
- using ProjectPartContainerReferences = std::vector<std::reference_wrapper<ProjectPartContainer>>;
-
ProjectPartContainerReferences deferredProjectPartPointers;
deferredProjectPartPointers.reserve(deferredProjectsParts.size());
@@ -102,15 +173,16 @@ ProjectPartContainers ProjectPartsManager::deferredUpdates()
return deferredProjectParts;
}
-ProjectPartContainers ProjectPartsManager::newProjectParts(ProjectPartContainers &&projectsParts) const
+ProjectPartContainers ProjectPartsManager::filterNewProjectParts(
+ ProjectPartContainers &&projectsParts, const ProjectPartContainers &oldProjectParts)
{
ProjectPartContainers updatedProjectPartContainers;
updatedProjectPartContainers.reserve(projectsParts.size());
std::set_difference(std::make_move_iterator(projectsParts.begin()),
std::make_move_iterator(projectsParts.end()),
- m_projectParts.begin(),
- m_projectParts.end(),
+ oldProjectParts.begin(),
+ oldProjectParts.end(),
std::back_inserter(updatedProjectPartContainers));
return updatedProjectPartContainers;
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
index 2b3c43ebc8..6583db25c6 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
@@ -28,6 +28,7 @@
#include "clangpchmanagerbackend_global.h"
#include <projectpartsmanagerinterface.h>
+#include <projectpartsstorageinterface.h>
#include <utils/smallstringvector.h>
@@ -37,18 +38,24 @@ inline namespace Pch {
class ProjectPartsManager final : public ProjectPartsManagerInterface
{
public:
+ ProjectPartsManager(ProjectPartsStorageInterface &projectPartsStorage)
+ : m_projectPartsStorage(projectPartsStorage)
+ {}
+
ProjectPartContainers update(ProjectPartContainers &&projectsParts) override;
- void remove(const Utils::SmallStringVector &projectPartIds) override;
- ProjectPartContainers projects(const Utils::SmallStringVector &projectPartIds) const override;
+ void remove(const ProjectPartIds &projectPartIds) override;
+ ProjectPartContainers projects(const ProjectPartIds &projectPartIds) const override;
void updateDeferred(const ProjectPartContainers &projectsParts) override;
ProjectPartContainers deferredUpdates() override;
- ProjectPartContainers newProjectParts(ProjectPartContainers &&projectsParts) const;
+ static ProjectPartContainers filterNewProjectParts(ProjectPartContainers &&newProjectsParts,
+ const ProjectPartContainers &oldProjectParts);
void mergeProjectParts(const ProjectPartContainers &projectsParts);
const ProjectPartContainers &projectParts() const;
private:
ProjectPartContainers m_projectParts;
+ ProjectPartsStorageInterface &m_projectPartsStorage;
};
} // namespace Pch
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h b/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
index f99674ddda..ee80173f8a 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
@@ -37,10 +37,11 @@ public:
ProjectPartsManagerInterface &operator=(const ProjectPartsManagerInterface &) = delete;
virtual ProjectPartContainers update(ProjectPartContainers &&projectsParts) = 0;
- virtual void remove(const Utils::SmallStringVector &projectPartIds) = 0;
- virtual ProjectPartContainers projects(const Utils::SmallStringVector &projectPartIds) const = 0;
+ virtual void remove(const ProjectPartIds &projectPartIds) = 0;
+ virtual ProjectPartContainers projects(const ProjectPartIds &projectPartIds) const = 0;
virtual void updateDeferred(const ProjectPartContainers &projectsParts) = 0;
virtual ProjectPartContainers deferredUpdates() = 0;
+
protected:
~ProjectPartsManagerInterface() = default;
};
diff --git a/src/tools/clangpchmanagerbackend/source/toolchainargumentscache.h b/src/tools/clangpchmanagerbackend/source/toolchainargumentscache.h
index 4921b29a21..ed5ab3b1fd 100644
--- a/src/tools/clangpchmanagerbackend/source/toolchainargumentscache.h
+++ b/src/tools/clangpchmanagerbackend/source/toolchainargumentscache.h
@@ -33,19 +33,19 @@ namespace ClangBackEnd {
struct ArgumentsEntry
{
- ArgumentsEntry(Utils::SmallStringVector &&ids, const Utils::SmallStringVector &arguments)
+ ArgumentsEntry(ProjectPartIds &&ids, const Utils::SmallStringVector &arguments)
: ids(std::move(ids))
, arguments(arguments)
{}
- ArgumentsEntry(const Utils::SmallStringVector &ids, const Utils::SmallStringVector &arguments)
+ ArgumentsEntry(ProjectPartIds &ids, const Utils::SmallStringVector &arguments)
: ids(ids)
, arguments(arguments)
{}
- void mergeIds(Utils::SmallStringVector &&newIds)
+ void mergeIds(ProjectPartIds &&newIds)
{
- Utils::SmallStringVector mergedIds;
+ ProjectPartIds mergedIds;
mergedIds.reserve(ids.size() + newIds.size());
std::set_union(std::make_move_iterator(ids.begin()),
@@ -54,12 +54,12 @@ struct ArgumentsEntry
std::make_move_iterator(newIds.end()),
std::back_inserter(mergedIds));
- ids = mergedIds;
+ ids = std::move(mergedIds);
}
- void removeIds(const Utils::SmallStringVector &idsToBeRemoved)
+ void removeIds(const ProjectPartIds &idsToBeRemoved)
{
- Utils::SmallStringVector idsWithout;
+ ProjectPartIds idsWithout;
idsWithout.reserve(ids.size());
std::set_difference(std::make_move_iterator(ids.begin()),
std::make_move_iterator(ids.end()),
@@ -67,10 +67,10 @@ struct ArgumentsEntry
idsToBeRemoved.end(),
std::back_inserter(idsWithout));
- ids = idsWithout;
+ ids = std::move(idsWithout);
}
- Utils::SmallStringVector ids;
+ ProjectPartIds ids;
Utils::SmallStringVector arguments;
};
@@ -118,11 +118,11 @@ public:
removeEmptyEntries();
}
- void remove(const Utils::SmallStringVector &idsToBeRemoved)
+ void remove(const ProjectPartIds &idsToBeRemoved)
{
ArgumentsEntries entries;
for (ArgumentsEntry &entry : m_argumentEntries) {
- Utils::SmallStringVector usedIds;
+ ProjectPartIds usedIds;
std::set_difference(entry.ids.begin(),
entry.ids.end(),
idsToBeRemoved.begin(),
@@ -135,11 +135,11 @@ public:
removeEmptyEntries();
}
- ArgumentsEntries arguments(const Utils::SmallStringVector &ids) const
+ ArgumentsEntries arguments(const ProjectPartIds &ids) const
{
ArgumentsEntries entries;
for (const ArgumentsEntry &entry : m_argumentEntries) {
- Utils::SmallStringVector usedIds;
+ ProjectPartIds usedIds;
std::set_intersection(entry.ids.begin(),
entry.ids.end(),
ids.begin(),
@@ -159,9 +159,9 @@ public:
}
private:
- static Utils::SmallStringVector createIds(const ProjectPartContainers &projectParts)
+ static ProjectPartIds createIds(const ProjectPartContainers &projectParts)
{
- Utils::SmallStringVector ids;
+ ProjectPartIds ids;
ids.reserve(projectParts.size());
for (const auto &projectPart : projectParts)
ids.emplace_back(projectPart.projectPartId);
@@ -181,7 +181,7 @@ private:
}
private:
- std::vector<ArgumentsEntry> m_argumentEntries;
+ ArgumentsEntries m_argumentEntries;
};
}