aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArmin Berres <armin.berres@basyskom.de>2011-01-19 16:21:33 +0100
committerArmin Berres <armin.berres@basyskom.de>2011-01-19 17:35:41 +0100
commitcf059a523c0934c50db128dc2ce800e6e93e0046 (patch)
tree52fc645ecc4c2a68f9ce2e56657fa1c8dfe2b4db /src
parent5ae5dfb2e46df2e01d4704a4534bfb00b40acb69 (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.cpp6
-rw-r--r--src/corelib/style/mstylesheetparser.cpp116
-rw-r--r--src/corelib/style/mstylesheetparser.h4
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.