qt5base-lts/qmake/cachekeys.h
Marc Mutz df9d882d41 Port from container.count()/length() to size()
This is semantic patch using ClangTidyTransformator:

  auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o)
  makeRule(cxxMemberCallExpr(on(QtContainerClass),
                             callee(cxxMethodDecl(hasAnyName({"count", "length"),
                                                  parameterCountIs(0))))),
           changeTo(cat(access(o, cat("size"), "()"))),
           cat("use 'size()' instead of 'count()/length()'"))

a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'.

<classes> are:

    // sequential:
    "QByteArray",
    "QList",
    "QQueue",
    "QStack",
    "QString",
    "QVarLengthArray",
    "QVector",
    // associative:
    "QHash",
    "QMultiHash",
    "QMap",
    "QMultiMap",
    "QSet",
    // Qt has no QMultiSet

Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-04 07:40:08 +02:00

96 lines
2.7 KiB
C++

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CACHEKEYS_H
#define CACHEKEYS_H
#include "option.h"
#include "project.h"
#include <qstring.h>
#include <qstringlist.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qhash.h>
QT_BEGIN_NAMESPACE
// -------------------------------------------------------------------------------------------------
struct FixStringCacheKey
{
mutable size_t hash;
QString string, pwd;
uchar flags;
FixStringCacheKey(const QString &s, uchar f)
{
hash = 0;
pwd = qmake_getpwd();
string = s;
flags = f;
}
bool operator==(const FixStringCacheKey &f) const
{
return (hashCode() == f.hashCode() &&
f.flags == flags &&
f.string == string &&
f.pwd == pwd);
}
inline size_t hashCode() const {
if(!hash)
hash = qHash(string) ^ qHash(flags) /*^ qHash(pwd)*/;
return hash;
}
};
inline size_t qHash(const FixStringCacheKey &f) { return f.hashCode(); }
// -------------------------------------------------------------------------------------------------
struct FileInfoCacheKey
{
mutable size_t hash;
QString file, pwd;
FileInfoCacheKey(const QString &f)
{
hash = 0;
if(isRelativePath(f))
pwd = qmake_getpwd();
file = f;
}
bool operator==(const FileInfoCacheKey &f) const
{
return (hashCode() == f.hashCode() && f.file == file &&
f.pwd == pwd);
}
inline size_t hashCode() const {
if(!hash)
hash = qHash(file) /*^ qHash(pwd)*/;
return hash;
}
inline bool isRelativePath(const QString &file) {
int length = file.size();
if (!length)
return true;
const QChar c0 = file.at(0);
const QChar c1 = length >= 2 ? file.at(1) : QChar::Null;
return !(c0 == QLatin1Char('/')
|| c0 == QLatin1Char('\\')
|| (c0.isLetter() && c1 == QLatin1Char(':'))
|| (c0 == QLatin1Char('/') && c1 == QLatin1Char('/'))
|| (c0 == QLatin1Char('\\') && c1 == QLatin1Char('\\')));
}
};
inline size_t qHash(const FileInfoCacheKey &f) { return f.hashCode(); }
// -------------------------------------------------------------------------------------------------
template <typename T>
inline void qmakeDeleteCacheClear(void *i) { delete reinterpret_cast<T*>(i); }
inline void qmakeFreeCacheClear(void *i) { free(i); }
typedef void (*qmakeCacheClearFunc)(void *);
void qmakeAddCacheClear(qmakeCacheClearFunc func, void **);
void qmakeClearCaches();
QT_END_NAMESPACE
#endif // CACHEKEYS_H