forked from qt-creator/qt-creator
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:
@@ -38,23 +38,12 @@ public:
|
||||
ProjectPartData(const Utf8String &projectPartId);
|
||||
~ProjectPartData();
|
||||
|
||||
public:
|
||||
void clearArguments();
|
||||
|
||||
public:
|
||||
time_point lastChangeTimePoint;
|
||||
std::vector<const char*> arguments;
|
||||
Utf8StringVector arguments;
|
||||
Utf8String projectPartId;
|
||||
};
|
||||
|
||||
void ProjectPartData::clearArguments()
|
||||
{
|
||||
for (auto argument : arguments)
|
||||
delete [] argument;
|
||||
|
||||
arguments.clear();
|
||||
}
|
||||
|
||||
ProjectPartData::ProjectPartData(const Utf8String &projectPartId)
|
||||
: lastChangeTimePoint(std::chrono::steady_clock::now()),
|
||||
projectPartId(projectPartId)
|
||||
@@ -63,7 +52,6 @@ ProjectPartData::ProjectPartData(const Utf8String &projectPartId)
|
||||
|
||||
ProjectPartData::~ProjectPartData()
|
||||
{
|
||||
clearArguments();
|
||||
}
|
||||
|
||||
ProjectPart::ProjectPart(const Utf8String &projectPartId)
|
||||
@@ -103,46 +91,26 @@ ProjectPart &ProjectPart::operator=(ProjectPart &&other)
|
||||
void ProjectPart::clear()
|
||||
{
|
||||
d->projectPartId.clear();
|
||||
d->clearArguments();
|
||||
d->arguments.clear();
|
||||
updateLastChangeTimePoint();
|
||||
}
|
||||
|
||||
const Utf8String &ProjectPart::projectPartId() const
|
||||
Utf8String ProjectPart::projectPartId() const
|
||||
{
|
||||
return d->projectPartId;
|
||||
}
|
||||
|
||||
static const char *strdup(const Utf8String &utf8String)
|
||||
{
|
||||
char *cxArgument = new char[utf8String.byteSize() + 1];
|
||||
std::memcpy(cxArgument, utf8String.constData(), utf8String.byteSize() + 1);
|
||||
|
||||
return cxArgument;
|
||||
}
|
||||
|
||||
void ProjectPart::setArguments(const Utf8StringVector &arguments)
|
||||
{
|
||||
d->clearArguments();
|
||||
d->arguments.resize(arguments.size());
|
||||
std::transform(arguments.cbegin(), arguments.cend(), d->arguments.begin(), strdup);
|
||||
d->arguments = arguments;
|
||||
updateLastChangeTimePoint();
|
||||
}
|
||||
|
||||
const std::vector<const char*> &ProjectPart::arguments() const
|
||||
const Utf8StringVector ProjectPart::arguments() const
|
||||
{
|
||||
return d->arguments;
|
||||
}
|
||||
|
||||
int ProjectPart::argumentCount() const
|
||||
{
|
||||
return d->arguments.size();
|
||||
}
|
||||
|
||||
const char * const *ProjectPart::cxArguments() const
|
||||
{
|
||||
return arguments().data();
|
||||
}
|
||||
|
||||
const time_point &ProjectPart::lastChangeTimePoint() const
|
||||
{
|
||||
return d->lastChangeTimePoint;
|
||||
|
||||
Reference in New Issue
Block a user