summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dssourceinfo_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/q3dssourceinfo_p.h')
-rw-r--r--src/runtime/q3dssourceinfo_p.h55
1 files changed, 38 insertions, 17 deletions
diff --git a/src/runtime/q3dssourceinfo_p.h b/src/runtime/q3dssourceinfo_p.h
index 2e153d6..0c0ae01 100644
--- a/src/runtime/q3dssourceinfo_p.h
+++ b/src/runtime/q3dssourceinfo_p.h
@@ -53,13 +53,31 @@ QT_BEGIN_NAMESPACE
class Q3DSV_PRIVATE_EXPORT Q3DSSourceInfo {
public:
- Q3DSSourceInfo() { }
+ Q3DSSourceInfo()
+ {
+ m_variantFilter.reset(new QHash<QStringRef, QVector<QStringRef>>);
+ m_internalVariantList.reset(new QVector<QString>);
+ }
~Q3DSSourceInfo()
{
- for (auto str : qAsConst(m_internalVariantList))
- delete str;
- m_internalVariantList.clear();
+ m_variantFilter.reset();
+ m_internalVariantList.reset();
+ }
+
+ Q3DSSourceInfo(const Q3DSSourceInfo &other)
+ {
+ operator=(other);
+ }
+
+ inline Q3DSSourceInfo &operator=(const Q3DSSourceInfo &other)
+ {
+ m_url = other.m_url;
+ m_fileName = other.m_fileName;
+ m_variantList = other.m_variantList;
+ m_internalVariantList = other.m_internalVariantList;
+ m_variantFilter = other.m_variantFilter;
+ return *this;
}
inline bool operator==(const Q3DSSourceInfo &other)
@@ -97,34 +115,37 @@ public:
// Store the QStringList to be returned from the API
m_variantList = variantList;
- for (auto str : qAsConst(m_internalVariantList))
- delete str;
- m_internalVariantList.clear();
+ // Note that all instances that share the filter lists will get updated
+ m_variantFilter->clear();
+ m_internalVariantList->clear();
// Build a fixed (in mem location) list of the variant strings
- for (auto tag: variantList)
- m_internalVariantList.append(new QString(tag));
+ for (const auto &tag : variantList)
+ m_internalVariantList->append(tag);
// Parse the variantGroup:variant list to map using the fixed list
- m_variantFilter.clear();
- for (auto tag : qAsConst(m_internalVariantList)) {
- QStringRef refTag = QStringRef(tag);
+ const auto &internalList = *m_internalVariantList.data();
+ for (const auto &tag : internalList) {
+ QStringRef refTag = QStringRef(&tag);
int separatorIdx = refTag.indexOf(QLatin1Char(':'));
QStringRef group = refTag.left(separatorIdx);
QStringRef variant = refTag.mid(separatorIdx + 1);
- m_variantFilter[group].append(variant);
+ (*m_variantFilter)[group].append(variant);
}
}
inline const QStringList &variantList() const { return m_variantList; }
- inline const QHash<QStringRef, QVector<QStringRef>> &variantMap() const { return m_variantFilter; }
+ inline const QHash<QStringRef, QVector<QStringRef>> &variantMap() const
+ {
+ return *m_variantFilter.data();
+ }
private:
QUrl m_url;
- QStringList m_variantList;
- QList<QString*> m_internalVariantList;
QString m_fileName;
- QHash<QStringRef, QVector<QStringRef>> m_variantFilter;
+ QStringList m_variantList;
+ QSharedPointer<QVector<QString>> m_internalVariantList;
+ QSharedPointer<QHash<QStringRef, QVector<QStringRef>>> m_variantFilter;
};
QT_END_NAMESPACE