netlist_t::netlist_t(const pstring &aname, plib::unique_ptr<callbacks_t> callbacks) : m_state(plib::make_unique<netlist_state_t>(aname, *this, std::move(callbacks))) , m_solver(nullptr) , m_time(netlist_time::zero()) , m_mainclock(nullptr) , m_queue(*m_state) { devices::initialize_factory(nlstate().setup().factory()); NETLIST_NAME(base)(nlstate().setup()); run_state_manager().save_item(this, static_cast<plib::state_manager_t::callback_t &>(m_queue), "m_queue"); run_state_manager().save_item(this, m_time, "m_time"); }
void load_state(std::vector<char> &buf) { std::size_t size = 0; for (auto const & s : run_state_manager().save_list()) size += s->m_dt.size * s->m_count; if (buf.size() != size) throw netlist::nl_exception("Size different during load state."); char *p = buf.data(); for (auto const & s : run_state_manager().save_list()) { std::size_t sz = s->m_dt.size * s->m_count; if (s->m_dt.is_float || s->m_dt.is_integral) std::copy(p, p + sz, static_cast<char *>(s->m_ptr)); else log().fatal("found unsupported save element {1}\n", s->m_name); p += sz; } run_state_manager().post_load(); nlstate().rebuild_lists(); }
netlist::setup_t &setup() { return nlstate().setup(); }