1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the qmake application of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
47 #include <qstringlist.h>
49 #include <qfileinfo.h>
54 // -------------------------------------------------------------------------------------------------
55 struct FixStringCacheKey
60 FixStringCacheKey(const QString
&s
, uchar f
)
67 bool operator==(const FixStringCacheKey
&f
) const
69 return (hashCode() == f
.hashCode() &&
74 inline uint
hashCode() const {
76 hash
= qHash(string
) | qHash(flags
) /*| qHash(pwd)*/;
80 inline uint
qHash(const FixStringCacheKey
&f
) { return f
.hashCode(); }
82 // -------------------------------------------------------------------------------------------------
83 struct FileInfoCacheKey
87 FileInfoCacheKey(const QString
&f
)
94 bool operator==(const FileInfoCacheKey
&f
) const
96 return (hashCode() == f
.hashCode() && f
.file
== file
&&
99 inline uint
hashCode() const {
101 hash
= qHash(file
) /*| qHash(pwd)*/;
104 inline bool isRelativePath(const QString
&file
) {
105 int length
= file
.length();
109 const QChar c0
= file
.at(0);
110 const QChar c1
= length
>= 2 ? file
.at(1) : QChar(0);
111 return !(c0
== QLatin1Char('/')
112 || c0
== QLatin1Char('\\')
113 || (c0
.isLetter() && c1
== QLatin1Char(':'))
114 || (c0
== QLatin1Char('/') && c1
== QLatin1Char('/'))
115 || (c0
== QLatin1Char('\\') && c1
== QLatin1Char('\\')));
118 inline uint
qHash(const FileInfoCacheKey
&f
) { return f
.hashCode(); }
120 // -------------------------------------------------------------------------------------------------
121 struct FileFixifyCacheKey
128 FileFixifyCacheKey(const QString
&f
, const QString
&od
, const QString
&id
,
132 pwd
= qmake_getpwd();
135 out_d
= Option::output_dir
;
139 in_d
= qmake_getpwd();
145 QString
toString() const {
146 return file
+ "--" + in_d
+ "--" + out_d
+ "--" + pwd
+ "--" +
147 QString::number(fixType
) + "--" + QString::number((int)canonicalize
);
149 bool operator==(const FileFixifyCacheKey
&f
) const
151 return (f
.canonicalize
== canonicalize
&&
152 f
.fixType
== fixType
&&
158 inline uint
hashCode() const {
160 hash
= uint(canonicalize
) | uint(fixType
) |
161 qHash(file
) | qHash(in_d
) | qHash(out_d
) /*|qHash(pwd)*/;
166 inline uint
qHash(const FileFixifyCacheKey
&f
) { return f
.hashCode(); }
167 // -------------------------------------------------------------------------------------------------
169 // As MSVC 6.0 can't handle template functions that well, we need a separate function for each type
170 inline void qmakeDeleteCacheClear_QMapStringInt(void *i
) { delete reinterpret_cast<QMap
<QString
,int> *>(i
); }
171 inline void qmakeDeleteCacheClear_QStringList(void *i
) { delete reinterpret_cast<QStringList
*>(i
); }
172 inline void qmakeDeleteCacheClear_QHashFixStringCacheKeyQString(void *i
) { delete reinterpret_cast<QHash
<FixStringCacheKey
, QString
> *>(i
); }
173 inline void qmakeDeleteCacheClear_QHashFileInfoCacheKeyQFileInfo(void *i
) { delete reinterpret_cast<QHash
<FileInfoCacheKey
, QFileInfo
> *>(i
); }
174 inline void qmakeDeleteCacheClear_QHashFileFixifyCacheKeyQString(void *i
) { delete reinterpret_cast<QHash
<FileFixifyCacheKey
, QString
> *>(i
); }
175 inline void qmakeFreeCacheClear(void *i
) { free(i
); }
177 typedef void (*qmakeCacheClearFunc
)(void *);
178 void qmakeAddCacheClear(qmakeCacheClearFunc func
, void **);
179 void qmakeClearCaches();
183 #endif // CACHEKEYS_H