summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_lists.h
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2017-02-21 00:59:57 +0100
committer couriersud <couriersud@gmx.org>2017-02-22 02:04:02 +0100
commita82ca2d244195ba79fcb34c6ccc964d3d906783d (patch)
tree75bde66f14ff36a23a3dfcb970f28e49dea0f070 /src/lib/netlist/nl_lists.h
parent5c4b7cfef851ab8f13d937fdb4d3686936c63d39 (diff)
Improve readability. Add more c++11 noexcept and swap semantics.
Also fixed clang-5 warnings. (nw)
Diffstat (limited to 'src/lib/netlist/nl_lists.h')
-rw-r--r--src/lib/netlist/nl_lists.h49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/lib/netlist/nl_lists.h b/src/lib/netlist/nl_lists.h
index 788d65f4c1b..a13f14c0da3 100644
--- a/src/lib/netlist/nl_lists.h
+++ b/src/lib/netlist/nl_lists.h
@@ -54,41 +54,53 @@ namespace netlist
struct entry_t final
{
- constexpr entry_t() : m_exec_time(), m_object(nullptr) { }
- constexpr entry_t(const Time &t, const Element &o) : m_exec_time(t), m_object(o) { }
- constexpr entry_t(const entry_t &e) : m_exec_time(e.m_exec_time), m_object(e.m_object) { }
- constexpr entry_t(entry_t &&e) : m_exec_time(e.m_exec_time), m_object(e.m_object) { }
+ constexpr entry_t() noexcept : m_exec_time(), m_object(nullptr) { }
+ constexpr entry_t(const Time &t, const Element &o) noexcept : m_exec_time(t), m_object(o) { }
+ constexpr entry_t(const entry_t &e) noexcept : m_exec_time(e.m_exec_time), m_object(e.m_object) { }
+ entry_t(entry_t &&e) noexcept { swap(e); }
~entry_t() = default;
- entry_t& operator=(entry_t && other)
+ entry_t& operator=(entry_t && other) noexcept
{
- m_exec_time = other.m_exec_time;
- m_object = other.m_object;
+ swap(other);
return *this;
}
+ entry_t& operator=(const entry_t &other) noexcept
+ {
+ entry_t t(other);
+ swap(t);
+ return *this;
+ }
+
+ void swap(entry_t &other) noexcept
+ {
+ std::swap(m_exec_time, other.m_exec_time);
+ std::swap(m_object, other.m_object);
+ }
+
Time m_exec_time;
Element m_object;
};
- timed_queue(unsigned list_size)
+ timed_queue(const std::size_t list_size)
: m_list(list_size)
{
clear();
}
- constexpr std::size_t capacity() const { return m_list.size(); }
- constexpr bool empty() const { return (m_end == &m_list[1]); }
+ constexpr std::size_t capacity() const noexcept { return m_list.size(); }
+ constexpr bool empty() const noexcept { return (m_end == &m_list[1]); }
void push(entry_t &&e) noexcept
{
/* Lock */
tqlock lck(m_lock);
+
entry_t * i = m_end;
- while (e.m_exec_time > (i - 1)->m_exec_time)
+ for (; e.m_exec_time > (i - 1)->m_exec_time; --i)
{
- *(i) = std::move(*(i-1));
- --i;
+ *(i) = *(i-1);
m_prof_sortmove.inc();
}
*i = std::move(e);
@@ -96,13 +108,9 @@ namespace netlist
m_prof_call.inc();
}
-#if 0
- entry_t pop() noexcept { return std::move(*(--m_end)); }
- const entry_t &top() const noexcept { return std::move(*(m_end-1)); }
-#else
entry_t pop() noexcept { return *(--m_end); }
const entry_t &top() const noexcept { return *(m_end-1); }
-#endif
+
void remove(const Element &elem) noexcept
{
/* Lock */
@@ -112,11 +120,8 @@ namespace netlist
if (i->m_object == elem)
{
m_end--;
- while (i < m_end)
- {
+ for (;i < m_end; i++)
*i = std::move(*(i+1));
- ++i;
- }
return;
}
}