krazy says: Check for foreach loop issues [foreach]...OOPS! 22 issues found! src/projecttree/proxyclipjob.cpp: non-const ref iterator line# 55 (1) src/projecttree/meltjob.cpp: non-const ref iterator line# 99,122,131,153 (4) src/titlewidget.cpp: non-const ref iterator line# 515 (1) src/initeffects.cpp: non-const ref iterator line# 546 (1) src/clipitem.cpp: non-const ref iterator line# 1976,2058 (2) src/renderwidget.cpp: non-const ref iterator line# 1429,1446 (2) src/geometrywidget.cpp: non-const ref iterator line# 281 (1) src/effectstack/effectstackview2.cpp: values or keys iteration line# 661 (1) src/mainwindow.cpp: non-const ref iterator line# 592 (1) src/keyframeedit.cpp: non-const ref iterator line# 466 (1) src/parameterplotter.cpp: non-const ref iterator line# 251 (1) src/stopmotion/stopmotion.cpp: non-const ref iterator line# 441 (1) src/documentchecker.cpp: non-const ref iterator line# 179,196,859 (3) src/cliptranscode.cpp: non-const ref iterator line# 143 (1) testingArea/audioOffset.cpp: non-const ref iterator line# 55 (1) When not using POD types (int, double, pointer, ...) you should use const & for your foreach variables. There are two reasons for this: 1) Prevents you from the mistake of writing foreach loops that modify the list, that is 'foreach(Foo f, list) f.a = f.b = f.c = 0;' compiles but does not modify the contents of list 2) Saves a copy constructor call for each of the list elements --- src/clipitem.cpp | 4 ++-- src/documentchecker.cpp | 6 +++--- src/geometrywidget.cpp | 2 +- src/keyframeedit.cpp | 2 +- src/mainwindow.cpp | 2 +- src/parameterplotter.cpp | 2 +- src/projecttree/meltjob.cpp | 8 ++++---- src/projecttree/proxyclipjob.cpp | 12 ++++++------ src/renderwidget.cpp | 4 ++-- src/stopmotion/stopmotion.cpp | 2 +- src/titlewidget.cpp | 2 +- testingArea/audioOffset.cpp | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 281953a..fb41804 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -1973,7 +1973,7 @@ bool ClipItem::updateNormalKeyframes(QDomElement parameter, ItemInfo oldInfo) const QStringList data = parameter.attribute("keyframes").split(';', QString::SkipEmptyParts); QMap <int, double> keyframes; - foreach (QString keyframe, data) { + foreach (const QString &keyframe, data) { int keyframepos = keyframe.section(':', 0, 0).toInt(); // if keyframe was at clip start, update it if (keyframepos == oldin) { @@ -2055,7 +2055,7 @@ void ClipItem::updateGeometryKeyframes(QDomElement effect, int paramIndex, int w if (offset > 0) { QStringList kfrs = data.split(';'); data.clear(); - foreach (QString keyframe, kfrs) { + foreach (const QString &keyframe, kfrs) { if (keyframe.contains('=')) { int pos = keyframe.section('=', 0, 0).toInt(); pos += offset; diff --git a/src/documentchecker.cpp b/src/documentchecker.cpp index 8614eea..ca612bc 100644 --- a/src/documentchecker.cpp +++ b/src/documentchecker.cpp @@ -176,7 +176,7 @@ bool DocumentChecker::hasErrorInClips() filesToCheck.append(luma); } // Check existence of luma files - foreach (const QString lumafile, filesToCheck) { + foreach (const QString &lumafile, filesToCheck) { filePath = lumafile; if (!filePath.startsWith('/')) filePath.prepend(root); if (!QFile::exists(filePath)) { @@ -193,7 +193,7 @@ bool DocumentChecker::hasErrorInClips() m_dialog->setFont(KGlobalSettings::toolBarFont()); m_ui.setupUi(m_dialog); - foreach(const QString l, missingLumas) { + foreach(const QString &l, missingLumas) { QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.treeWidget, QStringList() << i18n("Luma file") << l); item->setIcon(0, KIcon("dialog-close")); item->setData(0, idRole, l); @@ -856,7 +856,7 @@ void DocumentChecker::slotDeleteSelected() if (!deletedLumas.isEmpty()) { QDomElement e; QDomNodeList transitions = m_doc.elementsByTagName("transition"); - foreach (QString lumaPath, deletedLumas) { + foreach (const QString &lumaPath, deletedLumas) { for (int i = 0; i < transitions.count(); i++) { e = transitions.item(i).toElement(); QString resource = EffectsList::property(e, "luma"); diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index e9be104..df76b25 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -278,7 +278,7 @@ QString GeometryWidget::getExtraValue(const QString &name) const QStringList list = val.split(';', QString::SkipEmptyParts); val.clear(); val.append(list.takeFirst().section('/', 0, 0)); - foreach (const QString value, list) { + foreach (const QString &value, list) { val.append(';' + value.section('/', 0, 0)); } } diff --git a/src/keyframeedit.cpp b/src/keyframeedit.cpp index 8014cd0..e676972 100644 --- a/src/keyframeedit.cpp +++ b/src/keyframeedit.cpp @@ -463,7 +463,7 @@ void KeyframeEdit::checkVisibleParam() if (m_params.count() == 0) return; - foreach(QDomElement elem, m_params) { + foreach(const QDomElement &elem, m_params) { if (elem.attribute("intimeline") == "1") return; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b046c30..ba8e828 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -589,7 +589,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & if (!clipsToLoad.isEmpty() && m_activeDocument) { QStringList list = clipsToLoad.split(','); QList <QUrl> urls; - foreach(QString path, list) { + foreach(const QString &path, list) { kDebug() << QDir::current().absoluteFilePath(path); urls << QUrl::fromLocalFile(QDir::current().absoluteFilePath(path)); } diff --git a/src/parameterplotter.cpp b/src/parameterplotter.cpp index a34a320..fbf21f1 100644 --- a/src/parameterplotter.cpp +++ b/src/parameterplotter.cpp @@ -248,7 +248,7 @@ void ParameterPlotter::mousePressEvent(QMouseEvent * event) newpoints.append(QPointF(pt->x(), pt->y())); } p->clearPoints(); - foreach(const QPointF qf, newpoints) { + foreach(const QPointF &qf, newpoints) { p->addPoint(qf); } replacePlotObject(m_activeIndexPlot, p); diff --git a/src/projecttree/meltjob.cpp b/src/projecttree/meltjob.cpp index 27bc049..0ec44cd 100644 --- a/src/projecttree/meltjob.cpp +++ b/src/projecttree/meltjob.cpp @@ -96,7 +96,7 @@ void MeltJob::startJob() else prod = m_producer->cut(in, out); QStringList list = producerParams.split(' ', QString::SkipEmptyParts); - foreach(QString data, list) { + foreach(const QString &data, list) { if (data.contains('=')) { prod->set(data.section('=', 0, 0).toUtf8().constData(), data.section('=', 1, 1).toUtf8().constData()); } @@ -119,7 +119,7 @@ void MeltJob::startJob() m_consumer->set("real_time", -KdenliveSettings::mltthreads() ); list = consumerParams.split(' ', QString::SkipEmptyParts); - foreach(QString data, list) { + foreach(const QString &data, list) { if (data.contains('=')) { kDebug()<<"// filter con: "<<data; m_consumer->set(data.section('=', 0, 0).toUtf8().constData(), data.section('=', 1, 1).toUtf8().constData()); @@ -128,7 +128,7 @@ void MeltJob::startJob() Mlt::Filter mltFilter(*m_profile, filter.toUtf8().data()); list = filterParams.split(' ', QString::SkipEmptyParts); - foreach(QString data, list) { + foreach(const QString &data, list) { if (data.contains('=')) { kDebug()<<"// filter p: "<<data; mltFilter.set(data.section('=', 0, 0).toUtf8().constData(), data.section('=', 1, 1).toUtf8().constData()); @@ -150,7 +150,7 @@ void MeltJob::startJob() m_consumer->stop(); QStringList wanted = properties.split(',', QString::SkipEmptyParts); stringMap jobResults; - foreach(const QString key, wanted) { + foreach(const QString &key, wanted) { QString value = mltFilter.get(key.toUtf8().constData()); jobResults.insert(key, value); } diff --git a/src/projecttree/proxyclipjob.cpp b/src/projecttree/proxyclipjob.cpp index 88a6ac9..2c5a241 100644 --- a/src/projecttree/proxyclipjob.cpp +++ b/src/projecttree/proxyclipjob.cpp @@ -52,13 +52,13 @@ void ProxyJob::startJob() mltParameters << "-consumer" << "avformat:" + m_dest; QStringList params = m_proxyParams.split('-', QString::SkipEmptyParts); - foreach(QString s, params) { - s = s.simplified(); - if (s.count(' ') == 0) { - s.append("=1"); + foreach(const QString &s, params) { + QString t = s.simplified(); + if (t.count(' ') == 0) { + t.append("=1"); } - else s.replace(' ', '='); - mltParameters << s; + else t.replace(' ', '='); + mltParameters << t; } mltParameters.append(QString("real_time=-%1").arg(KdenliveSettings::mltthreads())); diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index 0c5b139..a3c2b03 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -1426,7 +1426,7 @@ void RenderWidget::refreshParams() m_view.bitrateLabel->setEnabled(true); if ( item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) { QStringList bitrates = item->data(BitratesRole).toStringList(); - foreach (QString bitrate, bitrates) + foreach (const QString &bitrate, bitrates) m_view.comboBitrates->addItem(bitrate); if (item->data(DefaultBitrateRole).canConvert(QVariant::String)) m_view.comboBitrates->setCurrentIndex(bitrates.indexOf(item->data(DefaultBitrateRole).toString())); @@ -1443,7 +1443,7 @@ void RenderWidget::refreshParams() m_view.audiobitrateLabel->setEnabled(true); if ( item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) { QStringList audiobitrates = item->data(AudioBitratesRole).toStringList(); - foreach (QString bitrate, audiobitrates) + foreach (const QString &bitrate, audiobitrates) m_view.comboAudioBitrates->addItem(bitrate); if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String)) m_view.comboAudioBitrates->setCurrentIndex(audiobitrates.indexOf(item->data(DefaultAudioBitrateRole).toString())); diff --git a/src/stopmotion/stopmotion.cpp b/src/stopmotion/stopmotion.cpp index f03fbb9..dc6c7b6 100644 --- a/src/stopmotion/stopmotion.cpp +++ b/src/stopmotion/stopmotion.cpp @@ -438,7 +438,7 @@ void StopmotionWidget::parseExistingSequences() //dir.setNameFilters(filters); QStringList sequences = dir.entryList(filters, QDir::Files, QDir::Name); //kDebug()<<"PF: "<<<<", sm: "<<sequences; - foreach(QString sequencename, sequences) { + foreach(const QString &sequencename, sequences) { sequence_name->addItem(sequencename.section('_', 0, -2)); } } diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index b5073a2..d25b860 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -512,7 +512,7 @@ TitleWidget::TitleWidget(KUrl url, Timecode tc, QString projectTitlePath, Render //templateBox->setIconSize(QSize(60,60)); templateBox->clear(); templateBox->addItem(""); - foreach(TitleTemplate t, titletemplates) { + foreach(const TitleTemplate &t, titletemplates) { templateBox->addItem(t.icon, t.name, t.file); } lastDocumentHash = QCryptographicHash::hash(xml().toString().toAscii(), QCryptographicHash::Md5).toHex(); diff --git a/testingArea/audioOffset.cpp b/testingArea/audioOffset.cpp index 3d8a84b..13945f6 100644 --- a/testingArea/audioOffset.cpp +++ b/testingArea/audioOffset.cpp @@ -52,7 +52,7 @@ int main(int argc, char *argv[]) bool useFFT = false; // Load arguments - foreach (QString str, args) { + foreach (const QString &str, args) { if (str.startsWith("--profile=")) { QString s = str; -- 1.7.10.4 ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Kdenlive-devel mailing list Kdenlive-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kdenlive-devel