diff options
Diffstat (limited to 'src/lib/netlist/plib/plists.h')
-rw-r--r-- | src/lib/netlist/plib/plists.h | 122 |
1 files changed, 10 insertions, 112 deletions
diff --git a/src/lib/netlist/plib/plists.h b/src/lib/netlist/plib/plists.h index c2fee9c2f8e..5fefa658b83 100644 --- a/src/lib/netlist/plib/plists.h +++ b/src/lib/netlist/plib/plists.h @@ -12,8 +12,6 @@ #include "pstring.h" -#include <array> -#include <type_traits> #include <vector> namespace plib { @@ -31,13 +29,14 @@ class uninitialised_array_t { public: - using iterator = C *; - using const_iterator = const C *; + typedef C* iterator; + typedef const C* const_iterator; - uninitialised_array_t() noexcept = default; + uninitialised_array_t() + { + } - COPYASSIGNMOVE(uninitialised_array_t, delete) - ~uninitialised_array_t() noexcept + ~uninitialised_array_t() { for (std::size_t i=0; i<N; i++) (*this)[i].~C(); @@ -52,7 +51,7 @@ public: const C& operator[](const std::size_t &index) const noexcept { - return *reinterpret_cast<const C *>(&m_buf[index]); + return *reinterpret_cast<C *>(&m_buf[index]); } template<typename... Args> @@ -76,8 +75,7 @@ protected: private: /* ensure proper alignment */ - PALIGNAS_VECTOROPT() - std::array<typename std::aligned_storage<sizeof(C), alignof(C)>::type, N> m_buf; + typename std::aligned_storage<sizeof(C), alignof(C)>::type m_buf[N]; }; // ---------------------------------------------------------------------------------------- @@ -85,7 +83,6 @@ private: // the list allows insertions / deletions if used properly // ---------------------------------------------------------------------------------------- -#if 0 template <class LC> class linkedlist_t { @@ -155,10 +152,9 @@ public: void remove(const LC *elem) noexcept { auto p = &m_head; - while(*p != elem) + for ( ; *p != elem; p = &((*p)->m_next)) { //nl_assert(*p != nullptr); - p = &((*p)->m_next); } (*p) = elem->m_next; } @@ -170,105 +166,7 @@ public: private: LC *m_head; }; -#else -template <class LC> -class linkedlist_t -{ -public: - - struct element_t - { - public: - - friend class linkedlist_t<LC>; - - constexpr element_t() : m_next(nullptr), m_prev(nullptr) {} - ~element_t() noexcept = default; - - COPYASSIGNMOVE(element_t, delete) - - constexpr LC *next() const noexcept { return m_next; } - constexpr LC *prev() const noexcept { return m_prev; } - private: - LC * m_next; - LC * m_prev; - }; - - struct iter_t final : public std::iterator<std::forward_iterator_tag, LC> - { - private: - LC* p; - public: - explicit constexpr iter_t(LC* x) noexcept : p(x) { } - constexpr iter_t(iter_t &rhs) noexcept : p(rhs.p) { } - iter_t(iter_t &&rhs) noexcept { std::swap(*this, rhs); } - iter_t& operator=(const iter_t &rhs) noexcept { iter_t t(rhs); std::swap(*this, t); return *this; } - iter_t& operator=(iter_t &&rhs) noexcept { std::swap(*this, rhs); return *this; } - iter_t& operator++() noexcept {p = p->next();return *this;} - // NOLINTNEXTLINE(cert-dcl21-cpp) - iter_t operator++(int) & noexcept {const iter_t tmp(*this); operator++(); return tmp;} - - ~iter_t() = default; - - constexpr bool operator==(const iter_t& rhs) const noexcept {return p == rhs.p;} - constexpr bool operator!=(const iter_t& rhs) const noexcept {return p != rhs.p;} - /* constexpr */ LC& operator*() noexcept {return *p;} - /* constexpr */ LC* operator->() noexcept {return p;} - - constexpr LC& operator*() const noexcept {return *p;} - constexpr LC* operator->() const noexcept {return p;} - }; - - constexpr linkedlist_t() : m_head(nullptr) {} - constexpr iter_t begin() const noexcept { return iter_t(m_head); } - constexpr iter_t end() const noexcept { return iter_t(nullptr); } - - void push_front(LC *elem) noexcept - { - if (m_head) - m_head->m_prev = elem; - elem->m_next = m_head; - elem->m_prev = nullptr; - m_head = elem; - } - - void push_back(LC *elem) noexcept - { - LC ** p(&m_head); - LC * prev(nullptr); - while (*p != nullptr) - { - prev = *p; - p = &((*p)->m_next); - } - *p = elem; - elem->m_prev = prev; - elem->m_next = nullptr; - } - - void remove(const LC *elem) noexcept - { - if (elem->m_prev) - elem->m_prev->m_next = elem->m_next; - else - m_head = elem->m_next; - if (elem->m_next) - elem->m_next->m_prev = elem->m_prev; - else - { - /* update tail */ - } - } - - LC *front() const noexcept { return m_head; } - void clear() noexcept { m_head = nullptr; } - constexpr bool empty() const noexcept { return (m_head == nullptr); } - -private: - LC *m_head; -}; -#endif -} // namespace plib +} #endif /* PLISTS_H_ */ |