Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qv4compilationunitmapper.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <private/qv4compileddata_p.h>
7#include <private/qv4executablecompilationunit_p.h>
8
9#include <QtCore/qdatetime.h>
10#include <QtCore/qmutex.h>
11#include <QtCore/qhash.h>
12
14
15using namespace QV4;
16
18{
19public:
20 StaticUnitCache() : m_lock(&s_mutex) {}
21
23 {
24 const auto it = s_staticUnits.constFind(file);
25 return it == s_staticUnits.constEnd() ? CompilationUnitMapper() : *it;
26 }
27
28 void set(const QString &file, const CompilationUnitMapper &staticUnit) {
29 s_staticUnits.insert(file, staticUnit);
30 }
31
32 void remove(const QString &file)
33 {
34 s_staticUnits.remove(file);
35 }
36
37private:
39
40 static QMutex s_mutex;
41
42 // We can copy the mappers around because they're all static.
43 // We never unmap the files.
44 static QHash<QString, CompilationUnitMapper> s_staticUnits;
45};
46
47QHash<QString, CompilationUnitMapper> StaticUnitCache::s_staticUnits;
48QMutex StaticUnitCache::s_mutex;
49
51 const QString &cacheFilePath, const QDateTime &sourceTimeStamp, QString *errorString)
52{
54
55 CompilationUnitMapper mapper = cache.get(cacheFilePath);
56 if (mapper.dataPtr) {
57 auto *unit = reinterpret_cast<CompiledData::Unit *>(mapper.dataPtr);
58 if (ExecutableCompilationUnit::verifyHeader(unit, sourceTimeStamp, errorString)) {
59 *this = mapper;
60 return unit;
61 }
62
63 return nullptr;
64 }
65
66 CompiledData::Unit *data = open(cacheFilePath, sourceTimeStamp, errorString);
67 if (data && (data->flags & CompiledData::Unit::StaticData)) {
68 cache.set(cacheFilePath, *this);
69 return data;
70 } else {
71 close();
72 return nullptr;
73 }
74}
75
77{
79 cache.remove(cacheFilePath);
80}
81
\inmodule QtCore\reentrant
Definition qdatetime.h:257
\inmodule QtCore
Definition qhash.h:818
bool remove(const Key &key)
Removes the item that has the key from the hash.
Definition qhash.h:956
const_iterator constFind(const Key &key) const noexcept
Definition qhash.h:1279
const_iterator constEnd() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the ...
Definition qhash.h:1209
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
Definition qhash.h:1283
\inmodule QtCore
Definition qmutex.h:317
\inmodule QtCore
Definition qmutex.h:285
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static void invalidate(const QString &cacheFilePath)
CompiledData::Unit * get(const QString &cacheFilePath, const QDateTime &sourceTimeStamp, QString *errorString)
static bool verifyHeader(const CompiledData::Unit *unit, QDateTime expectedSourceTimeStamp, QString *errorString)
CompilationUnitMapper get(const QString &file)
void set(const QString &file, const CompilationUnitMapper &staticUnit)
void remove(const QString &file)
QCache< int, Employee > cache
[0]
QSet< QString >::iterator it
Combined button and popup list for selecting options.
\qmltype Particle \inqmlmodule QtQuick.Particles
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
QFile file
[0]
QDataWidgetMapper * mapper
[0]