summaryrefslogtreecommitdiffstats
path: root/src/linguist/lupdate/filesignificancecheck.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/linguist/lupdate/filesignificancecheck.h')
-rw-r--r--src/linguist/lupdate/filesignificancecheck.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/linguist/lupdate/filesignificancecheck.h b/src/linguist/lupdate/filesignificancecheck.h
new file mode 100644
index 000000000..15a947133
--- /dev/null
+++ b/src/linguist/lupdate/filesignificancecheck.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef FILESIGNIFICANCECHECK_H
+#define FILESIGNIFICANCECHECK_H
+
+#include <QtCore/qdir.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qstringlist.h>
+
+#include <shared_mutex>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+QT_BEGIN_NAMESPACE
+
+class FileSignificanceCheck
+{
+public:
+ FileSignificanceCheck() = default;
+
+ static void create()
+ {
+ m_instance = new FileSignificanceCheck;
+ }
+
+ static void destroy()
+ {
+ delete m_instance;
+ m_instance = nullptr;
+ }
+
+ static FileSignificanceCheck *the()
+ {
+ return m_instance;
+ }
+
+ void setRootDirectories(const QStringList &paths);
+ void setExclusionPatterns(const QStringList &patterns);
+
+ bool isFileSignificant(const std::string &filePath) const;
+
+private:
+ static FileSignificanceCheck *m_instance;
+ std::vector<QDir> m_rootDirs;
+ std::vector<QRegularExpression> m_exclusionRegExes;
+ mutable std::unordered_map<std::string, bool> m_cache;
+ mutable std::shared_mutex m_cacheMutex;
+};
+
+namespace LupdatePrivate {
+
+inline bool isFileSignificant(const std::string &filePath)
+{
+ return FileSignificanceCheck::the()->isFileSignificant(filePath);
+}
+
+} // namespace LupdatePrivate
+
+QT_END_NAMESPACE
+
+#endif // header guard