diff options
Diffstat (limited to 'src/lib/netlist/nl_lists.h')
-rw-r--r-- | src/lib/netlist/nl_lists.h | 29 |
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 |