diff options
author | Armin Berres <armin.berres@basyskom.de> | 2011-01-19 16:21:33 +0100 |
---|---|---|
committer | Armin Berres <armin.berres@basyskom.de> | 2011-01-19 17:35:41 +0100 |
commit | cf059a523c0934c50db128dc2ce800e6e93e0046 (patch) | |
tree | 52fc645ecc4c2a68f9ce2e56657fa1c8dfe2b4db /src | |
parent | 5ae5dfb2e46df2e01d4704a4534bfb00b40acb69 (diff) |
Changes: wrap MStyleSheetParser::StylesheetFileInfo in shared pointer
RevBy: Björn Schnabel, Holger Schröder
Details:
So far we create MStyleSheetParser::StylesheetFileInfos and then
duplicathe them needlessly.
Now we wrap them in a QSharedPointer and just copy the shared
pointer around. This works as a MStyleSheetParser::StylesheetFileInfo
is never changed once created.
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/style/mstylesheet.cpp | 6 | ||||
-rw-r--r-- | src/corelib/style/mstylesheetparser.cpp | 116 | ||||
-rw-r--r-- | src/corelib/style/mstylesheetparser.h | 4 |
3 files changed, 43 insertions, 83 deletions
diff --git a/src/corelib/style/mstylesheet.cpp b/src/corelib/style/mstylesheet.cpp index 95911214..72321434 100644 --- a/src/corelib/style/mstylesheet.cpp +++ b/src/corelib/style/mstylesheet.cpp @@ -304,7 +304,7 @@ MStyleSheetPrivate::CacheEntry *MStyleSheetPrivate::buildCacheEntry(const QList< CacheEntry *entry = new CacheEntry; foreach(const MStyleSheet * sheet, sheets) { - foreach(MStyleSheetParser::StylesheetFileInfo * fi, sheet->fileInfoList()) { + foreach(QSharedPointer<const MStyleSheetParser::StylesheetFileInfo> fi, sheet->fileInfoList()) { foreach(MStyleSheetSelector * selector, fi->selectors) { // mDebug("MStyleSheet") << "Searching style data for: " << cname << '#' << objectName; // mDebug("MStyleSheet") << "Comparing against" << selector->className() << '#' << selector->objectName(); @@ -645,7 +645,7 @@ QList<MStyleSheetPrivate::SelectorInfo> MStyleSheetPrivate::getMatchingSelectors const QList<const MStyleSheet *> &thisParentSheets = pd.sheets; foreach (const MStyleSheet *sheet, thisParentSheets) { - foreach(const MStyleSheetParser::StylesheetFileInfo* fi, sheet->fileInfoList()) { + foreach(QSharedPointer<const MStyleSheetParser::StylesheetFileInfo> fi, sheet->fileInfoList()) { unsigned int parentPriority, classPriority; foreach (MStyleSheetSelector *selector, fi->parentSelectors) { if (matchParent(selector, thisParentHierarchy, parentStyleName, sceneOrder, parentPriority) && @@ -666,7 +666,7 @@ QList<MStyleSheetPrivate::SelectorInfo> MStyleSheetPrivate::getMatchingSelectors } foreach (const MStyleSheet *sheet, sheets) { - foreach (const MStyleSheetParser::StylesheetFileInfo * fi, sheet->fileInfoList()) { + foreach (QSharedPointer<const MStyleSheetParser::StylesheetFileInfo> fi, sheet->fileInfoList()) { // loop trough all the selectors and find matching ones unsigned int parentPriority, classPriority; diff --git a/src/corelib/style/mstylesheetparser.cpp b/src/corelib/style/mstylesheetparser.cpp index f8abb2da..c97c13b9 100644 --- a/src/corelib/style/mstylesheetparser.cpp +++ b/src/corelib/style/mstylesheetparser.cpp @@ -44,6 +44,24 @@ namespace { } #ifndef DOXYGEN_SHOULD_SKIP_THIS + +MStyleSheetParser::StylesheetFileInfo::~StylesheetFileInfo() { + QList<MStyleSheetSelector *>::iterator selectorsEnd = selectors.end(); + + for (QList<MStyleSheetSelector *>::iterator iterator = selectors.begin(); + iterator != selectorsEnd; + ++iterator) { + delete *iterator; + } + + selectorsEnd = parentSelectors.end(); + for (QList<MStyleSheetSelector *>::iterator iterator = parentSelectors.begin(); + iterator != selectorsEnd; + ++iterator) { + delete *iterator; + } +} + class MStyleSheetParserPrivate { public: @@ -73,8 +91,8 @@ public: */ QString createBinaryFilename(const QString &filename) const; - QList<MStyleSheetParser::StylesheetFileInfo *> fileInfoList; - MStyleSheetParser::StylesheetFileInfo *privateFileInfo; + QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> > fileInfoList; + QSharedPointer<MStyleSheetParser::StylesheetFileInfo> privateFileInfo; /** \brief Load a previously-cached binary version of the style. @@ -88,8 +106,8 @@ public: */ bool dump(const QString &binaryFilename); - void writeStylesheetFileInfo(MStyleSheetParser::StylesheetFileInfo *selector, QDataStream &stream); - MStyleSheetParser::StylesheetFileInfo * readStylesheetFileInfo(QDataStream &stream); + void writeStylesheetFileInfo(QSharedPointer<MStyleSheetParser::StylesheetFileInfo> selector, QDataStream &stream); + QSharedPointer<MStyleSheetParser::StylesheetFileInfo> readStylesheetFileInfo(QDataStream &stream); MStyleSheetSelector *readSelector(const QByteArray &file, QDataStream &stream); void writeSelector(MStyleSheetSelector *selector, QDataStream &stream); @@ -254,9 +272,9 @@ void outputSelector(MStyleSheetSelector *selector) void MStyleSheetParserPrivate::debugOutput() { - QList<MStyleSheetParser::StylesheetFileInfo *>::const_iterator fileInfoListEnd = fileInfoList.constEnd(); + QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >::const_iterator fileInfoListEnd = fileInfoList.constEnd(); - for (QList<MStyleSheetParser::StylesheetFileInfo *>::const_iterator fi = fileInfoList.constBegin(); + for (QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >::const_iterator fi = fileInfoList.constBegin(); fi != fileInfoListEnd; ++fi) { mDebug("MStyleSheetParserPrivate") << "file:" << (*fi)->filename; @@ -396,7 +414,7 @@ bool MStyleSheetParserPrivate::load(const QString &filename, QHash<QByteArray, Q //mDebug("MStyleSheetParserPrivate") << "Loading ASCII css file" << filename; - privateFileInfo = new MStyleSheetParser::StylesheetFileInfo; + privateFileInfo = QSharedPointer<MStyleSheetParser::StylesheetFileInfo>(new MStyleSheetParser::StylesheetFileInfo); privateFileInfo->filename = qPrintable(filename); bool result = parse(file, filename); @@ -413,11 +431,10 @@ bool MStyleSheetParserPrivate::load(const QString &filename, QHash<QByteArray, Q } } - privateFileInfo = NULL; + privateFileInfo.clear(); return true; } else { - delete privateFileInfo; - privateFileInfo = NULL; + privateFileInfo.clear(); return false; } } @@ -630,7 +647,7 @@ bool MStyleSheetParserPrivate::importFile(const QByteArray &filename, bool valid syntaxMode == MStyleSheetParser::RelaxedSyntax) { // add all the new file infos into the list of parsed files while (parser.fileInfoList.count() > 0) { - MStyleSheetParser::StylesheetFileInfo *fileInfo = parser.fileInfoList.front(); + QSharedPointer<MStyleSheetParser::StylesheetFileInfo> fileInfo = parser.fileInfoList.front(); fileInfoList.push_back(fileInfo); parser.fileInfoList.removeFirst(); } @@ -954,7 +971,6 @@ MStyleSheetParser::MStyleSheetParser(const MLogicalValues *logicalValues) : d_ptr(new MStyleSheetParserPrivate(logicalValues)) { Q_D(MStyleSheetParser); - d->privateFileInfo = 0; d->binaryDirectory = MSystemDirectories::cacheDirectory() + QLatin1String("css") + QDir::separator(); d->binaryFileMode = true; @@ -965,33 +981,8 @@ MStyleSheetParser::~MStyleSheetParser() { Q_D(MStyleSheetParser); - QList<StylesheetFileInfo *>::iterator fileInfoListEnd = d->fileInfoList.end(); - - for (QList<StylesheetFileInfo *>::iterator fi = d->fileInfoList.begin(); - fi != fileInfoListEnd; - ++fi) { - QList<MStyleSheetSelector *>::iterator selectorsEnd = (*fi)->selectors.end(); - - for (QList<MStyleSheetSelector *>::iterator iterator = (*fi)->selectors.begin(); - iterator != selectorsEnd; - ++iterator) { - - delete *iterator; - } - - selectorsEnd = (*fi)->parentSelectors.end(); - for (QList<MStyleSheetSelector *>::iterator iterator = (*fi)->parentSelectors.begin(); - iterator != selectorsEnd; - ++iterator) { - - delete *iterator; - } - delete *fi; - } - d->fileInfoList.clear(); - delete d->privateFileInfo; delete d_ptr; } @@ -1006,7 +997,7 @@ bool MStyleSheetParser::load(const QString &filename) return result; } -QList<MStyleSheetParser::StylesheetFileInfo *>& MStyleSheetParser::fileInfoList() const +QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >& MStyleSheetParser::fileInfoList() const { return d_ptr->fileInfoList; } @@ -1077,7 +1068,7 @@ bool MStyleSheetParserPrivate::loadBinary(const QString &binaryFilename) int nrOfFiles; stream >> nrOfFiles; for (int i = 0; i < nrOfFiles; ++i) { - MStyleSheetParser::StylesheetFileInfo *fi = readStylesheetFileInfo(stream); + QSharedPointer<MStyleSheetParser::StylesheetFileInfo> fi = readStylesheetFileInfo(stream); fileInfoList.append(fi); } return true; @@ -1105,8 +1096,8 @@ bool MStyleSheetParserPrivate::dump(const QString &binaryFilename) // collect timestamps QList<QPair<QByteArray, qint64> > timestamps; - QList<MStyleSheetParser::StylesheetFileInfo *>::const_iterator fileInfoListEnd = fileInfoList.constEnd(); - for (QList<MStyleSheetParser::StylesheetFileInfo *>::const_iterator fi = fileInfoList.constBegin(); + QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >::const_iterator fileInfoListEnd = fileInfoList.constEnd(); + for (QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >::const_iterator fi = fileInfoList.constBegin(); fi != fileInfoListEnd; ++fi) { timestamps.append(QPair<QByteArray, qint64>((*fi)->filename, (*fi)->time_t)); @@ -1123,7 +1114,7 @@ bool MStyleSheetParserPrivate::dump(const QString &binaryFilename) stream << fileInfoList.count(); - for (QList<MStyleSheetParser::StylesheetFileInfo *>::const_iterator fi = fileInfoList.constBegin(); + for (QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >::const_iterator fi = fileInfoList.constBegin(); fi != fileInfoListEnd; ++fi) { writeStylesheetFileInfo(*fi, stream); @@ -1132,7 +1123,7 @@ bool MStyleSheetParserPrivate::dump(const QString &binaryFilename) return true; } -void MStyleSheetParserPrivate::writeStylesheetFileInfo(MStyleSheetParser::StylesheetFileInfo *fi, QDataStream &stream) +void MStyleSheetParserPrivate::writeStylesheetFileInfo(QSharedPointer<MStyleSheetParser::StylesheetFileInfo> fi, QDataStream &stream) { stream << fi->filename; stream << fi->time_t; @@ -1156,10 +1147,9 @@ void MStyleSheetParserPrivate::writeStylesheetFileInfo(MStyleSheetParser::Styles } } - -MStyleSheetParser::StylesheetFileInfo * MStyleSheetParserPrivate::readStylesheetFileInfo(QDataStream &stream) +QSharedPointer<MStyleSheetParser::StylesheetFileInfo> MStyleSheetParserPrivate::readStylesheetFileInfo(QDataStream &stream) { - MStyleSheetParser::StylesheetFileInfo *fi = new MStyleSheetParser::StylesheetFileInfo; + QSharedPointer<MStyleSheetParser::StylesheetFileInfo> fi(new MStyleSheetParser::StylesheetFileInfo); stream >> fi->filename; stream >> fi->time_t; @@ -1293,39 +1283,7 @@ void MStyleSheetParser::operator += (const MStyleSheetParser &stylesheet) { Q_D(MStyleSheetParser); - QList<StylesheetFileInfo *>::const_iterator fileInfoListEnd = stylesheet.fileInfoList().constEnd(); - - for (QList<StylesheetFileInfo *>::const_iterator fi = stylesheet.fileInfoList().constBegin(); - fi != fileInfoListEnd; - ++fi) { - StylesheetFileInfo *fileInfo = new StylesheetFileInfo; - - fileInfo->filename = (*fi)->filename; - fileInfo->includes = (*fi)->includes; - - // copy all selectors from other stylesheet to this fileInfo - QList<MStyleSheetSelector *>::const_iterator selectorsEnd = (*fi)->selectors.constEnd(); - for (QList<MStyleSheetSelector *>::const_iterator iterator = (*fi)->selectors.constBegin(); - iterator != selectorsEnd; - ++iterator) { - // selector to copy - MStyleSheetSelector *selector = (*iterator); - // append copy of selector - fileInfo->selectors.push_back(new MStyleSheetSelector(*selector)); - } - - // copy all selectors with parent - selectorsEnd = (*fi)->parentSelectors.constEnd(); - for (QList<MStyleSheetSelector *>::const_iterator iterator = (*fi)->parentSelectors.constBegin(); - iterator != selectorsEnd; - ++iterator) { - // selector to copy - MStyleSheetSelector *selector = (*iterator); - // append copy of selector - fileInfo->parentSelectors.push_back(new MStyleSheetSelector(*selector)); - } - d->fileInfoList.push_back(fileInfo); - } + d->fileInfoList.append(stylesheet.fileInfoList()); } int MStyleSheetParser::getLineNum(QFile &stream, const qint64 &streamPos) diff --git a/src/corelib/style/mstylesheetparser.h b/src/corelib/style/mstylesheetparser.h index a5bc9bd7..7f28dfc0 100644 --- a/src/corelib/style/mstylesheetparser.h +++ b/src/corelib/style/mstylesheetparser.h @@ -26,6 +26,7 @@ #include <QList> #include <QVector> #include <QHash> +#include <QSharedPointer> class MStyleSheetParserPrivate; class MStyleSheetSelector; @@ -48,6 +49,7 @@ class M_CORE_EXPORT MStyleSheetParser public: //! \internal struct StylesheetFileInfo { + ~StylesheetFileInfo(); QByteArray filename; QVector<QPair<QByteArray, uint> > includes; QList<MStyleSheetSelector *> selectors; @@ -112,7 +114,7 @@ public: * Returns all the information within the style sheet * \return A list of file information structures in this style sheet. */ - QList<MStyleSheetParser::StylesheetFileInfo *>& fileInfoList() const; + QList<QSharedPointer<MStyleSheetParser::StylesheetFileInfo> >& fileInfoList() const; /*! * Gets the current parse mode. |