}
}
+QMultiMap<int, QString> QFactoryLoader::keyMap() const
+{
+ QMultiMap<int, QString> result;
+ const QString metaDataKey = QStringLiteral("MetaData");
+ const QString keysKey = QStringLiteral("Keys");
+ const QList<QJsonObject> metaDataList = metaData();
+ for (int i = 0; i < metaDataList.size(); ++i) {
+ const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject();
+ const QJsonArray keys = metaData.value(keysKey).toArray();
+ const int keyCount = keys.size();
+ for (int k = 0; k < keyCount; ++k)
+ result.insert(i, keys.at(k).toString());
+ }
+ return result;
+}
+
+int QFactoryLoader::indexOf(const QString &needle) const
+{
+ const QString metaDataKey = QStringLiteral("MetaData");
+ const QString keysKey = QStringLiteral("Keys");
+ const QList<QJsonObject> metaDataList = metaData();
+ for (int i = 0; i < metaDataList.size(); ++i) {
+ const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject();
+ const QJsonArray keys = metaData.value(keysKey).toArray();
+ const int keyCount = keys.size();
+ for (int k = 0; k < keyCount; ++k) {
+ if (!keys.at(k).toString().compare(needle, Qt::CaseInsensitive))
+ return i;
+ }
+ }
+ return -1;
+}
+
QT_END_NAMESPACE
#endif // QT_NO_LIBRARY
#include "QtCore/qobject.h"
#include "QtCore/qstringlist.h"
#include "QtCore/qjsonobject.h"
+#include "QtCore/qmap.h"
#include "private/qlibrary_p.h"
#ifndef QT_NO_LIBRARY
QLibraryPrivate *library(const QString &key) const;
#endif
+ QMultiMap<int, QString> keyMap() const;
+ int indexOf(const QString &needle) const;
+
void update();
static void refreshAll();
};
+template <class PluginInterface, class FactoryInterface>
+ PluginInterface *qLoadPlugin(const QFactoryLoader *loader, const QString &key)
+{
+ const int index = loader->indexOf(key);
+ if (index != -1) {
+ QObject *factoryObject = loader->instance(index);
+ if (FactoryInterface *factory = qobject_cast<FactoryInterface *>(factoryObject))
+ if (PluginInterface *result = factory->create(key))
+ return result;
+ }
+ return 0;
+}
+
+template <class PluginInterface, class FactoryInterface, class Parameter1>
+PluginInterface *qLoadPlugin1(const QFactoryLoader *loader,
+ const QString &key,
+ const Parameter1 ¶meter1)
+{
+ const int index = loader->indexOf(key);
+ if (index != -1) {
+ QObject *factoryObject = loader->instance(index);
+ if (FactoryInterface *factory = qobject_cast<FactoryInterface *>(factoryObject))
+ if (PluginInterface *result = factory->create(key, parameter1))
+ return result;
+ }
+ return 0;
+}
+
QT_END_NAMESPACE
#endif // QT_NO_LIBRARY