<table><tr><td style="">meven added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D29138">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D29138#656094" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D29138#656094</a>, <a href="https://phabricator.kde.org/p/dfaure/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;">@dfaure</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>Wow those iterations over map.keys() were awful.</p></div>
</blockquote>

<p>We still have a few of those in solid :</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="console" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);"><span style="color: #000080">$ rg ".keys\(\)"</span>
<span style="color: #808080">src/tools/solid-hardware/solid-hardware.cpp</span>
<span style="color: #808080">151:    Q_FOREACH (const QString &key, properties.keys())</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/udisks2/udisksdevicebackend.cpp</span>
<span style="color: #808080">220:    Q_FOREACH (const QString &iface, interfaces_and_properties.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/fstab/fstabhandling.cpp</span>
<span style="color: #808080">219:    QStringList devices = globalFstabCache->localData().m_mtabCache.keys();</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/udisks2/udisksmanager.cpp</span>
<span style="color: #808080">179:    qCDebug(UDISKS2) << udi << "has new interfaces:" << interfaces_and_properties.keys();</span>
<span style="color: #808080">201:    else if (m_deviceCache.contains(udi) && interfaces_and_properties.keys().contains(UD2_DBUS_INTERFACE_FILESYSTEM)) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/iokit/iokitstorageaccess.cpp</span>
<span style="color: #808080">89:    Q_FOREACH (const QString &property, changes.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/iokit/iokitopticaldrive.cpp</span>
<span style="color: #808080">284:    foreach (const Solid::OpticalDrive::MediumType type, d->cdTypeMap.keys()) {</span>
<span style="color: #808080">289:    foreach (const Solid::OpticalDrive::MediumType type, d->dvdTypeMap.keys()) {</span>
<span style="color: #808080">294:    foreach (const Solid::OpticalDrive::MediumType type, d->bdTypeMap.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/hal/halopticaldisc.cpp</span>
<span style="color: #808080">34:    Q_FOREACH (const Solid::OpticalDisc::ContentType type, map.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/fakehw/fakeopticaldisc.cpp</span>
<span style="color: #808080">38:    Q_FOREACH (const Solid::OpticalDisc::ContentType type, map.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/fakehw/fakestorageaccess.cpp</span>
<span style="color: #808080">60:    Q_FOREACH (const QString &property, changes.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/hal/halcdrom.cpp</span>
<span style="color: #808080">55:    Q_FOREACH (const Solid::OpticalDrive::MediumType type, map.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/fakehw/fakecdrom.cpp</span>
<span style="color: #808080">48:    Q_FOREACH (const Solid::OpticalDrive::MediumType type, map.keys()) {</span>
<span style="color: #808080"></span>
<span style="color: #808080">src/solid/devices/backends/udisks2/udisksopticaldrive.cpp</span>
<span style="color: #808080">63:        Q_FOREACH (const QDBusObjectPath &objPath, reply.value().keys()) {</span>
<span style="color: #808080">208:    Q_FOREACH (const Solid::OpticalDrive::MediumType &type, map.keys()) {</span></pre></div></div></div><br /><div><strong>INLINE COMMENTS</strong><div><div style="margin: 6px 0 12px 0;"><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="padding: 0; background: #F7F7F7; border-color: #e3e4e8; border-style: solid; border-width: 0 0 1px 0; margin: 0;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><a style="float: right; text-decoration: none;" href="https://phabricator.kde.org/D29138#inline-166428">View Inline</a><span style="color: #4b4d51; font-weight: bold;">fakemanager.cpp:135</span></div>
<div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; ">    <span class="n">QStringList</span> <span class="n">result</span><span class="p">;</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(251, 175, 175, .7);">    <span class="n">FakeDevice</span> <span style="color: #aa2211">*</span><span class="n">device<span class="bright"></span></span><span class="bright"></span><span class="p"><span class="bright">;</span></span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(251, 175, 175, .7);">    <span class="n">Q_FOREACH</span> <span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="n">d</span><span style="color: #aa2211">-></span><span class="n">loadedDevices</span><span class="p">)</span> <span class="p">{</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">    <span class="bright"></span><span style="color: #aa4000"><span class="bright">for</span></span><span class="bright"> </span><span class="p"><span class="bright">(</span></span><span class="n">FakeDevice</span> <span style="color: #aa2211">*</span><span style="color: #a0a000">device<span class="bright"></span></span><span class="bright"> </span><span class="p"><span class="bright">:</span></span><span class="bright"> </span><span class="n"><span class="bright">qAsConst</span></span><span class="bright"></span><span class="p"><span class="bright">(</span></span><span class="bright"></span><span class="n"><span class="bright">d</span></span><span class="bright"></span><span style="color: #aa2211"><span class="bright">-></span></span><span class="bright"></span><span class="n"><span class="bright">loadedDevices</span></span><span class="bright"></span><span class="p"><span class="bright">))</span></span><span class="bright"> </span><span class="p"><span class="bright">{</span></span>
</div><div style="padding: 0 8px; margin: 0 4px; ">        <span style="color: #aa4000">if</span> <span class="p">(</span><span class="n">device</span><span style="color: #aa2211">-></span><span class="n">property</span><span class="p">(</span><span class="n">key</span><span class="p">).</span><span class="n">toString</span><span class="p">()</span> <span style="color: #aa2211">==</span> <span class="n">value</span><span class="p">)</span> <span class="p">{</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">I guess you can const the FakeDevice</p></div></div><br /><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="padding: 0; background: #F7F7F7; border-color: #e3e4e8; border-style: solid; border-width: 0 0 1px 0; margin: 0;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><a style="float: right; text-decoration: none;" href="https://phabricator.kde.org/D29138#inline-166429">View Inline</a><span style="color: #4b4d51; font-weight: bold;">fakemanager.cpp:147</span></div>
<div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; ">    <span class="n">QStringList</span> <span class="n">result</span><span class="p">;</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(251, 175, 175, .7);">    <span class="n">FakeDevice</span> <span style="color: #aa2211">*</span><span class="n">device<span class="bright"></span></span><span class="bright"></span><span class="p"><span class="bright">;</span></span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(251, 175, 175, .7);">    <span class="n">Q_FOREACH</span> <span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="n">d</span><span style="color: #aa2211">-></span><span class="n">loadedDevices</span><span class="p">)</span> <span class="p">{</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">    <span class="bright"></span><span style="color: #aa4000"><span class="bright">for</span></span><span class="bright"> </span><span class="p"><span class="bright">(</span></span><span class="n">FakeDevice</span> <span style="color: #aa2211">*</span><span style="color: #a0a000">device<span class="bright"></span></span><span class="bright"> </span><span class="p"><span class="bright">:</span></span><span class="bright"> </span><span class="n"><span class="bright">qAsConst</span></span><span class="bright"></span><span class="p"><span class="bright">(</span></span><span class="bright"></span><span class="n"><span class="bright">d</span></span><span class="bright"></span><span style="color: #aa2211"><span class="bright">-></span></span><span class="bright"></span><span class="n"><span class="bright">loadedDevices</span></span><span class="bright"></span><span class="p"><span class="bright">))</span></span><span class="bright"> </span><span class="p"><span class="bright">{</span></span>
</div><div style="padding: 0 8px; margin: 0 4px; ">        <span style="color: #aa4000">if</span> <span class="p">(</span><span class="n">device</span><span style="color: #aa2211">-></span><span class="n">queryDeviceInterface</span><span class="p">(</span><span class="n">type</span><span class="p">))</span> <span class="p">{</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">I guess you can const the FakeDevice</p></div></div></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R245 Solid</div></div></div><br /><div><strong>BRANCH</strong><div><div>l-foreach (branched from master)</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D29138">https://phabricator.kde.org/D29138</a></div></div><br /><div><strong>To: </strong>ahmadsamir, Frameworks, dfaure, apol, meven<br /><strong>Cc: </strong>bruns, kde-frameworks-devel, LeGast00n, cblack, michaelh, ngraham<br /></div>