/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/ ** ** This file is part of the qmake application of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef CACHEKEYS_H #define CACHEKEYS_H #include "project.h" #include #include #include #include #include QT_BEGIN_NAMESPACE // ------------------------------------------------------------------------------------------------- struct FixStringCacheKey { mutable uint 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 uint hashCode() const { if(!hash) hash = qHash(string) | qHash(flags) /*| qHash(pwd)*/; return hash; } }; inline uint qHash(const FixStringCacheKey &f) { return f.hashCode(); } // ------------------------------------------------------------------------------------------------- struct FileInfoCacheKey { mutable uint 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 uint hashCode() const { if(!hash) hash = qHash(file) /*| qHash(pwd)*/; return hash; } inline bool isRelativePath(const QString &file) { int length = file.length(); if (!length) return true; const QChar c0 = file.at(0); const QChar c1 = length >= 2 ? file.at(1) : QChar(0); return !(c0 == QLatin1Char('/') || c0 == QLatin1Char('\\') || (c0.isLetter() && c1 == QLatin1Char(':')) || (c0 == QLatin1Char('/') && c1 == QLatin1Char('/')) || (c0 == QLatin1Char('\\') && c1 == QLatin1Char('\\'))); } }; inline uint qHash(const FileInfoCacheKey &f) { return f.hashCode(); } // ------------------------------------------------------------------------------------------------- template inline void qmakeDeleteCacheClear(void *i) { delete reinterpret_cast(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