diff options
author | couriersud <couriersud@gmx.org> | 2017-02-21 00:59:57 +0100 |
---|---|---|
committer | couriersud <couriersud@gmx.org> | 2017-02-22 02:04:02 +0100 |
commit | a82ca2d244195ba79fcb34c6ccc964d3d906783d (patch) | |
tree | 75bde66f14ff36a23a3dfcb970f28e49dea0f070 /src/lib/netlist/nl_lists.h | |
parent | 5c4b7cfef851ab8f13d937fdb4d3686936c63d39 (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.h | 49 |
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; } } |