summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_lists.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/nl_lists.h')
-rw-r--r--src/lib/netlist/nl_lists.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/lib/netlist/nl_lists.h b/src/lib/netlist/nl_lists.h
index 8b79e9553b1..f4b1c4e8ff5 100644
--- a/src/lib/netlist/nl_lists.h
+++ b/src/lib/netlist/nl_lists.h
@@ -132,6 +132,7 @@ namespace netlist
{
/* Lock */
lock_guard_type lck(m_lock);
+#if 1
T * i(m_end-1);
for (; QueueOp::less(*(i), e); --i)
{
@@ -139,6 +140,14 @@ namespace netlist
}
*(i+1) = std::move(e);
++m_end;
+#else
+ T * i(m_end++);
+ while (QueueOp::less(*(--i), e))
+ {
+ *(i+1) = *(i);
+ }
+ *(i+1) = std::move(e);
+#endif
}
T pop() noexcept { return *(--m_end); }
@@ -147,10 +156,16 @@ namespace netlist
template <class R>
void remove(const R &elem) noexcept
{
- /* Lock */
- lock_guard_type lck(m_lock);
m_prof_remove.inc();
+ remove_nostats(elem);
+ }
+ template <class R>
+ void remove_nostats(const R &elem) noexcept
+ {
+ /* Lock */
+ lock_guard_type lck(m_lock);
+#if 1
for (T * i = m_end - 1; i > &m_list[0]; --i)
{
if (QueueOp::equal(*i, elem))
@@ -159,6 +174,16 @@ namespace netlist
return;
}
}
+#else
+ for (T * i = &m_list[1]; i < m_end; ++i)
+ {
+ if (QueueOp::equal(*i, elem))
+ {
+ std::copy(i+1, m_end--, i);
+ return;
+ }
+ }
+#endif
}
void retime(T && elem) noexcept