<table><tr><td style="">dfaure 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/D12659">View Revision</a></tr></table><br /><div><div><p>I like the replaceOrInsert idea, and the assert in insert... we might have to fix some kioslaves, but in general they have no good reason to insert twice for the same key.</p>

<p>In general I like the std::vector + find_if + emplace_back solution. Fast and readable.</p></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/D12659#inline-64905">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:500</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; background: rgba(151, 234, 151, .6);">    <span class="p">{</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span class="n">Q_ASSERT</span><span class="p">(</span><span class="n">std</span><span style="color: #aa2211">::</span><span class="n">find_if</span><span class="p">(</span><span class="n">storage</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">                                  <span class="p">[</span><span class="n">field</span><span class="p">](</span><span style="color: #aa4000">const</span> <span class="n">Field</span> <span style="color: #aa2211">&</span><span class="n">index</span><span class="p">)</span> <span class="p">{</span><span style="color: #aa4000">return</span> <span class="n">index</span><span class="p">.</span><span class="n">m_index</span> <span style="color: #aa2211">==</span> <span class="n">field</span><span class="p">;})</span> <span style="color: #aa2211">==</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">());</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">storage.constBegin(), storage.constEnd() -- same in next method</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/D12659#inline-64906">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:501</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; background: rgba(151, 234, 151, .6);">        <span class="n">Q_ASSERT</span><span class="p">(</span><span class="n">std</span><span style="color: #aa2211">::</span><span class="n">find_if</span><span class="p">(</span><span class="n">storage</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">                                  <span class="p">[</span><span class="n">field</span><span class="p">](</span><span style="color: #aa4000">const</span> <span class="n">Field</span> <span style="color: #aa2211">&</span><span class="n">index</span><span class="p">)</span> <span class="p">{</span><span style="color: #aa4000">return</span> <span class="n">index</span><span class="p">.</span><span class="n">m_index</span> <span style="color: #aa2211">==</span> <span class="n">field</span><span class="p">;})</span> <span style="color: #aa2211">==</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">());</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span class="n">storage</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Field</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">));</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">constEnd() here too</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/D12659#inline-64904">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:502</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; background: rgba(151, 234, 151, .6);">                                  <span class="p">[</span><span class="n">field</span><span class="p">](</span><span style="color: #aa4000">const</span> <span class="n">Field</span> <span style="color: #aa2211">&</span><span class="n">index</span><span class="p">)</span> <span class="p">{</span><span style="color: #aa4000">return</span> <span class="n">index</span><span class="p">.</span><span class="n">m_index</span> <span style="color: #aa2211">==</span> <span class="n">field</span><span class="p">;})</span> <span style="color: #aa2211">==</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">());</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span class="n">storage</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Field</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">));</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">    <span class="p">}</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">storage.emplace_back(field, value);</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/D12659#inline-64907">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:513</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; background: rgba(151, 234, 151, .6);">        <span class="p">}</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span class="n">storage</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Field</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">));</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">    <span class="p">}</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">emplace_back</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/D12659#inline-64908">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:538</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; background: rgba(151, 234, 151, .6);">    <span class="p">{</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span style="color: #aa4000">auto</span> <span class="n">index</span> <span style="color: #aa2211">=</span> <span class="n">std</span><span style="color: #aa2211">::</span><span class="n">find_if</span><span class="p">(</span><span class="n">storage</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">                                  <span class="p">[</span><span class="n">field</span><span class="p">](</span><span style="color: #aa4000">const</span> <span class="n">Field</span> <span style="color: #aa2211">&</span><span class="n">index</span><span class="p">)</span> <span class="p">{</span><span style="color: #aa4000">return</span> <span class="n">index</span><span class="p">.</span><span class="n">m_index</span> <span style="color: #aa2211">==</span> <span class="n">field</span><span class="p">;});</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">call it "it", find_if returns an iterator.</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/D12659#inline-64909">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:601</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; background: rgba(151, 234, 151, .6);">    <span class="p">{</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span style="color: #aa4000">auto</span> <span class="n">index</span> <span style="color: #aa2211">=</span> <span class="n">std</span><span style="color: #aa2211">::</span><span class="n">lower_bound</span><span class="p">(</span><span class="n">storage</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">field</span><span class="p">,</span> <span class="n">less</span><span class="p">);</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span class="n">Q_ASSERT</span><span class="p">(</span><span class="n">index</span> <span style="color: #aa2211">==</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span style="color: #aa2211">||</span> <span class="n">index</span><span style="color: #aa2211">-></span><span class="n">m_index</span> <span style="color: #aa2211">!=</span> <span class="n">field</span><span class="p">);</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">constBegin() etc. to avoid detaching<br />
it = ...</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/D12659#inline-64910">View Inline</a><span style="color: #4b4d51; font-weight: bold;">udsentry_benchmark.cpp:625</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; background: rgba(151, 234, 151, .6);">        <span style="color: #aa4000">if</span> <span class="p">(</span><span class="n">index</span> <span style="color: #aa2211">!=</span> <span class="n">storage</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span style="color: #aa2211">&&</span> <span class="n">index</span><span style="color: #aa2211">-></span><span class="n">m_index</span> <span style="color: #aa2211">==</span> <span class="n">field</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="n">Q_ASSERT</span><span class="p">(</span><span class="n">index</span><span style="color: #aa2211">-></span><span class="n">m_str</span> <span style="color: #aa2211">!=</span> <span class="n">QStringLiteral</span><span class="p">());</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">            <span class="n">index</span><span style="color: #aa2211">-></span><span class="n">m_long</span> <span style="color: #aa2211">=</span> <span class="n">value</span><span class="p">;</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">!index->m_str.isEmpty()</p>

<p style="padding: 0; margin: 8px;">QStringLiteral() without arguments never makes sense, there's no literal...</p></div></div></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R241 KIO</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D12659">https://phabricator.kde.org/D12659</a></div></div><br /><div><strong>To: </strong>jtamate, dfaure, Frameworks<br /><strong>Cc: </strong>bruns, michaelh<br /></div>