QFactoryLoader: move QPluginParsedMetaData to qplugin_p.h

Which is a more central header, with no other dependencies. This is just
a declarative structure with no .cpp requirements, so it fits there.

This way, qlibrary_p.h won't depend on qfactory_p.h. QLibrary,
QPluginLoader and QFactoryLoader are inextricably linked (the
plugin-parsing code is in qfactoryloader.cpp because QFactoryLoader
needs it to parse metadata too). This will later allow me to make
qfactory_p.h depend on qlibrary_p.h.

Change-Id: I0544826807f97d366142fffde0ebdc802273ffc2
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
Thiago Macieira 2025-01-10 17:28:50 -03:00
parent e6a6757c14
commit 37485e9661
3 changed files with 32 additions and 27 deletions

View File

@ -31,32 +31,6 @@ QT_BEGIN_NAMESPACE
class QJsonObject;
class QLibraryPrivate;
class QPluginParsedMetaData
{
QCborValue data;
bool setError(const QString &errorString) Q_DECL_COLD_FUNCTION
{
data = errorString;
return false;
}
public:
QPluginParsedMetaData() = default;
QPluginParsedMetaData(QByteArrayView input) { parse(input); }
bool isError() const { return !data.isMap(); }
QString errorString() const { return data.toString(); }
bool parse(QByteArrayView input);
bool parse(QPluginMetaData metaData)
{ return parse(QByteArrayView(reinterpret_cast<const char *>(metaData.data), metaData.size)); }
QJsonObject toJson() const; // only for QLibrary & QPluginLoader
// if data is not a map, toMap() returns empty, so shall these functions
QCborMap toCbor() const { return data.toMap(); }
QCborValue value(QtPluginMetaDataKeys k) const { return data[int(k)]; }
};
class QFactoryLoaderPrivate;
class Q_CORE_EXPORT QFactoryLoader : public QObject
{

View File

@ -18,7 +18,7 @@
#include "QtCore/qlibrary.h"
#include "QtCore/private/qfactoryloader_p.h"
#include "QtCore/private/qplugin_p.h"
#include "QtCore/qloggingcategory.h"
#include "QtCore/qmutex.h"
#include "QtCore/qplugin.h"

View File

@ -17,6 +17,10 @@
#include <private/qglobal_p.h>
#include "QtCore/qplugin.h"
#include "QtCore/qcborvalue.h"
#include "QtCore/qcbormap.h"
QT_BEGIN_NAMESPACE
enum class QtPluginMetaDataKeys {
@ -93,6 +97,33 @@ static_assert(decodeVersion1ArchRequirements(0x84) == DecodedArchRequirements{ 4
#endif
} // unnamed namespace
class QPluginParsedMetaData
{
QCborValue data;
bool setError(const QString &errorString) Q_DECL_COLD_FUNCTION
{
data = errorString;
return false;
}
public:
QPluginParsedMetaData() = default;
QPluginParsedMetaData(QByteArrayView input) { parse(input); }
bool isError() const { return !data.isMap(); }
QString errorString() const { return data.toString(); }
bool parse(QByteArrayView input);
bool parse(QPluginMetaData metaData)
{ return parse(QByteArrayView(reinterpret_cast<const char *>(metaData.data), metaData.size)); }
QJsonObject toJson() const; // only for QLibrary & QPluginLoader
// if data is not a map, toMap() returns empty, so shall these functions
QCborMap toCbor() const { return data.toMap(); }
QCborValue value(QtPluginMetaDataKeys k) const { return data[int(k)]; }
};
QT_END_NAMESPACE
#endif // QPLUGIN_P_H