Warning, file /kdevelop/kdevelop/plugins/custom-definesandincludes/compilerprovider/gcclikecompiler.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2014 Sergey Kalinichev <kalinichev.so.0@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #ifndef GCCLIKECOMPILER_H
0008 #define GCCLIKECOMPILER_H
0009 
0010 #include "icompiler.h"
0011 
0012 class GccLikeCompiler : public QObject, public ICompiler
0013 {
0014     Q_OBJECT
0015 public:
0016     GccLikeCompiler( const QString& name, const QString& path, bool editable, const QString& factoryName );
0017 
0018     KDevelop::Defines defines(Utils::LanguageType type, const QString& arguments) const override;
0019 
0020     KDevelop::Path::List includes(Utils::LanguageType type, const QString& arguments) const override;
0021 
0022 private:
0023     void invalidateCache();
0024 
0025     template <typename T>
0026     struct Cached {
0027         T data;
0028         bool wasCached = false;
0029     };
0030     struct DefinesIncludes {
0031         Cached<KDevelop::Defines> definedMacros;
0032         Cached<KDevelop::Path::List> includePaths;
0033     };
0034 
0035     /// List of defines/includes per arguments
0036     mutable QHash<Utils::LanguageType, QHash<QString, DefinesIncludes>> m_definesIncludes;
0037     mutable QHash<QStringList, Cached<KDevelop::Defines>> m_defines;
0038     mutable QHash<QStringList, Cached<KDevelop::Path::List>> m_includes;
0039 };
0040 
0041 #endif // GCCLIKECOMPILER_H
0042