summaryrefslogtreecommitdiff
path: root/src/libs/clangsupport/sourceentry.h
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-03-21 17:55:24 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-04-02 13:08:44 +0000
commit56b01f74633c310807cf3fc00766cfa01002297f (patch)
treea8e0a09154f4c95dd8b16db2a8512c2f5b5b0946 /src/libs/clangsupport/sourceentry.h
parent7595c9f3052cf7c2ca05f3157c945371952ca0b5 (diff)
downloadqt-creator-56b01f74633c310807cf3fc00766cfa01002297f.tar.gz
Clang: Minimize reindexing
We optimal indexer is only reindexing if the index would be changed. This patch is a step in that direction. We only reindex now if the file or project has changed. It fixes some typos too. Task-number: QTCREATORBUG-21150 Change-Id: I6ea1c13282fbcd70253b9b2939aed37580dbd160 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/libs/clangsupport/sourceentry.h')
-rw-r--r--src/libs/clangsupport/sourceentry.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/libs/clangsupport/sourceentry.h b/src/libs/clangsupport/sourceentry.h
new file mode 100644
index 0000000000..c593f1fcd3
--- /dev/null
+++ b/src/libs/clangsupport/sourceentry.h
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <filepathid.h>
+
+#include <vector>
+
+namespace ClangBackEnd {
+
+enum class SourceType : unsigned char {
+ TopProjectInclude,
+ TopSystemInclude,
+ UserInclude,
+ ProjectInclude,
+ SystemInclude,
+ Source
+};
+
+enum class HasMissingIncludes : unsigned char { No, Yes };
+
+class TimeStamp
+{
+ using int64 = long long;
+public:
+ TimeStamp() = default;
+ TimeStamp(int64 value)
+ : value(value)
+ {}
+
+ operator int64() const
+ {
+ return value;
+ }
+
+ int64 value = -1;
+};
+
+class SourceTimeStamp
+{
+ using int64 = long long;
+public:
+ SourceTimeStamp(int sourceId, int64 lastModified)
+ : timeStamp(lastModified)
+ , sourceId(sourceId)
+ {}
+
+ SourceTimeStamp(FilePathId sourceId, TimeStamp lastModified)
+ : timeStamp(lastModified)
+ , sourceId(sourceId)
+ {}
+
+ friend bool operator<(SourceTimeStamp first, SourceTimeStamp second)
+ {
+ return first.sourceId < second.sourceId;
+ }
+
+ friend bool operator<(SourceTimeStamp first, FilePathId second)
+ {
+ return first.sourceId < second;
+ }
+
+ friend bool operator<(FilePathId first, SourceTimeStamp second)
+ {
+ return first < second.sourceId;
+ }
+
+ friend bool operator==(SourceTimeStamp first, SourceTimeStamp second)
+ {
+ return first.sourceId == second.sourceId && first.timeStamp == second.timeStamp;
+ }
+
+ friend bool operator!=(SourceTimeStamp first, SourceTimeStamp second)
+ {
+ return !(first == second);
+ }
+
+public:
+ TimeStamp timeStamp;
+ FilePathId sourceId;
+};
+
+using SourceTimeStamps = std::vector<SourceTimeStamp>;
+
+class SourceEntry
+{
+ using int64 = long long;
+
+public:
+ SourceEntry(int sourceId, int64 timeStamp, int sourceType, int hasMissingIncludes)
+ : timeStamp(timeStamp)
+ , sourceId(sourceId)
+ , sourceType(static_cast<SourceType>(sourceType))
+ , hasMissingIncludes(static_cast<HasMissingIncludes>(hasMissingIncludes))
+ {}
+
+ SourceEntry(FilePathId sourceId,
+ SourceType sourceType,
+ TimeStamp timeStamp,
+ HasMissingIncludes hasMissingIncludes = HasMissingIncludes::No)
+ : timeStamp(timeStamp)
+ , sourceId(sourceId)
+ , sourceType(sourceType)
+ , hasMissingIncludes(hasMissingIncludes)
+ {}
+
+ friend bool operator<(SourceEntry first, SourceEntry second) {
+ return first.sourceId < second.sourceId;
+ }
+
+ friend bool operator==(SourceEntry first, SourceEntry second)
+ {
+ return first.sourceId == second.sourceId && first.sourceType == second.sourceType
+ && first.timeStamp == second.timeStamp;
+ }
+
+ friend bool operator!=(SourceEntry first, SourceEntry second) { return !(first == second); }
+
+public:
+ TimeStamp timeStamp;
+ FilePathId sourceId;
+ SourceType sourceType = SourceType::UserInclude;
+ HasMissingIncludes hasMissingIncludes = HasMissingIncludes::No;
+};
+
+using SourceEntries = std::vector<SourceEntry>;
+using SourceEntryReference = std::reference_wrapper<SourceEntry>;
+using SourceEntryReferences = std::vector<SourceEntryReference>;
+} // namespace ClangBackEnd