Clang: Prepare for multi-threading

* Make the necessary data implicitly shared since it might get
  accessed/modified from two different threads with follow-up changes.
  This applies for UnsavedFiles/UnsavedFile and ProjectPart::arguments().

* Avoid returning references.

Change-Id: I98842c1cb90ae0d344a15c63b72cbc89568722d3
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Nikolai Kosjar
2016-05-30 10:25:52 +02:00
parent 53415cece1
commit 606d41187c
23 changed files with 323 additions and 291 deletions

View File

@@ -27,12 +27,12 @@
#include <filecontainer.h>
#include <QSharedPointer>
#include <QVector>
#include <clang-c/Index.h>
#include <chrono>
#include <memory>
namespace ClangBackEnd {
@@ -40,29 +40,28 @@ using time_point = std::chrono::steady_clock::time_point;
class UnsavedFile;
class UnsavedFilesData;
class UnsavedFilesShallowArguments;
class UnsavedFiles
{
friend class UnsavedFilesData;
public:
UnsavedFiles();
~UnsavedFiles();
UnsavedFiles(const UnsavedFiles &unsavedFiles);
UnsavedFiles &operator=(const UnsavedFiles &unsavedFiles);
UnsavedFiles(UnsavedFiles &&unsavedFiles);
UnsavedFiles &operator=(UnsavedFiles &&unsavedFiles);
UnsavedFiles(const UnsavedFiles &other);
UnsavedFiles &operator=(const UnsavedFiles &other);
void createOrUpdate(const QVector<FileContainer> &fileContainers);
void remove(const QVector<FileContainer> &fileContainers);
uint count() const;
const UnsavedFile &at(int index) const;
UnsavedFile &unsavedFile(const Utf8String &filePath);
uint count() const;
CXUnsavedFile *cxUnsavedFiles() const;
UnsavedFilesShallowArguments shallowArguments() const;
const time_point &lastChangeTimePoint() const;
const time_point lastChangeTimePoint() const;
private:
void updateUnsavedFileWithFileContainer(const FileContainer &fileContainer);
@@ -71,7 +70,7 @@ private:
void updateLastChangeTimePoint();
private:
mutable std::shared_ptr<UnsavedFilesData> d;
QSharedDataPointer<UnsavedFilesData> d;
};
} // namespace ClangBackEnd