diff options
author | 2022-06-20 20:01:03 +0200 | |
---|---|---|
committer | 2022-06-20 20:01:03 +0200 | |
commit | 0dad442511fc3e96bae721c38fe8040a222cc21a (patch) | |
tree | b0eb0732f9e7f438a41a889621d36193d16d6e1b /src/lib/netlist/core/queue.h | |
parent | 3fbfe0b1d76573ee8971eaaee6b37b4024575624 (diff) |
netlist: fix bug, prepare for future changes and improve readability (#9947)
* netlist: fix bug, prepare for future changes and improve readability
- fix a bug where a net processing error may trigger a nullptr access
- applied some clang-tidy recommendations
- add no_return to plib::terminate
- properly encapsulate dynamic_cast usage
- more review of noexcept
- added a clang-format file. Over time, all source files will be
processed with clang-format
- Used clang format on a number of files
- Rewrote 74174
- all device constructors now use a struct to pass data on
to base classes. Neither netlist state nor the name are intended
to be used in a constructor. After the base class was
constructed, they can be accessed by state() and name().
- The device construction macros can now be removed. Changes to
the core will not need to be reflected in constructors.
- Change truth table macros so that going forward NETLIST_END and
TRUTH_TABLE_END can be replaced by a closing curly brace. netlists can
than use curly braces enclosed blocks.
- more clang-format
- removed some macros completely
- all derived classes from base_device_t now don't use macros
any longer.
- as a result, delegator_t was removed. This class was only used
to support macros :-(
Diffstat (limited to 'src/lib/netlist/core/queue.h')
-rw-r--r-- | src/lib/netlist/core/queue.h | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/lib/netlist/core/queue.h b/src/lib/netlist/core/queue.h index 19600f0198c..9fdd6ac1c64 100644 --- a/src/lib/netlist/core/queue.h +++ b/src/lib/netlist/core/queue.h @@ -8,10 +8,9 @@ #ifndef NL_CORE_QUEUE_H_ #define NL_CORE_QUEUE_H_ -#include "queue.h" - #include "../nl_errstr.h" #include "../nltypes.h" +#include "queue.h" #include "../plib/pstate.h" #include "../plib/pstring.h" @@ -33,17 +32,18 @@ namespace netlist::detail // solvers will update inputs after parallel processing. template <typename A, typename O> - class queue_base : - public config::timed_queue<A, plib::queue_entry_t<netlist_time_ext, O *>>, - public plib::state_manager_t::callback_t + class queue_base + : public config::timed_queue<A, plib::queue_entry_t<netlist_time_ext, O *>> + , public plib::state_manager_t::callback_t { public: using entry_t = plib::queue_entry_t<netlist_time_ext, O *>; using base_queue = config::timed_queue<A, entry_t>; - using id_delegate = plib::pmfp<std::size_t (const O *)>; - using obj_delegate = plib::pmfp<O * (std::size_t)>; + using id_delegate = plib::pmfp<std::size_t(const O *)>; + using obj_delegate = plib::pmfp<O *(std::size_t)>; - explicit queue_base(A &arena, std::size_t size, id_delegate get_id, obj_delegate get_obj) + explicit queue_base(A &arena, std::size_t size, id_delegate get_id, + obj_delegate get_obj) : base_queue(arena, size) , m_size(0) , m_times(size) @@ -61,43 +61,47 @@ namespace netlist::detail queue_base &operator=(queue_base &&) = delete; protected: - - void register_state(plib::state_manager_t &manager, const pstring &module) override + void register_state(plib::state_manager_t &manager, + const pstring & module) override { manager.save_item(this, m_size, module + "." + "size"); - manager.save_item(this, &m_times[0], module + "." + "times", m_times.size()); - manager.save_item(this, &m_net_ids[0], module + "." + "names", m_net_ids.size()); + manager.save_item(this, &m_times[0], module + "." + "times", + m_times.size()); + manager.save_item(this, &m_net_ids[0], module + "." + "names", + m_net_ids.size()); } - void on_pre_save([[maybe_unused]] plib::state_manager_t &manager) override + void on_pre_save( + [[maybe_unused]] plib::state_manager_t &manager) override { m_size = this->size(); - for (std::size_t i = 0; i < m_size; i++ ) + for (std::size_t i = 0; i < m_size; i++) { - m_times[i] = this->list_pointer()[i].exec_time().as_raw(); + m_times[i] = this->list_pointer()[i].exec_time().as_raw(); m_net_ids[i] = m_get_id(this->list_pointer()[i].object()); } } - void on_post_load([[maybe_unused]] plib::state_manager_t &manager) override + void on_post_load( + [[maybe_unused]] plib::state_manager_t &manager) override { this->clear(); - for (std::size_t i = 0; i < m_size; i++ ) + for (std::size_t i = 0; i < m_size; i++) { O *n = m_obj_by_id(m_net_ids[i]); - this->template push<false>(entry_t(netlist_time_ext::from_raw(m_times[i]),n)); + this->template push<false>( + entry_t(netlist_time_ext::from_raw(m_times[i]), n)); } } private: - std::size_t m_size; + std::size_t m_size; std::vector<netlist_time_ext::internal_type> m_times; - std::vector<std::size_t> m_net_ids; - id_delegate m_get_id; - obj_delegate m_obj_by_id; + std::vector<std::size_t> m_net_ids; + id_delegate m_get_id; + obj_delegate m_obj_by_id; }; using queue_t = queue_base<device_arena, net_t>; } // namespace netlist::detail - #endif // NL_CORE_QUEUE_H_ |