ATTR_HOT void net_t::inc_active(core_terminal_t &term) { m_active++; m_list_active.insert(term); nl_assert(m_active <= num_cons()); if (m_active == 1) { if (netlist().use_deactivate()) { railterminal().device().inc_active(); //m_cur_Q = m_new_Q; } if (m_in_queue == 0) { if (m_time > netlist().time()) { m_in_queue = 1; /* pending */ netlist().push_to_queue(*this, m_time); } else { m_cur_Q = m_new_Q; m_in_queue = 2; } } //else if (netlist().use_deactivate()) // m_cur_Q = m_new_Q; } }
ATTR_COLD void analog_net_t::process_net(pvector_t<list_t> &groups) { if (num_cons() == 0) return; /* add the net */ groups.back().push_back(this); for (core_terminal_t *p : m_core_terms) { if (p->isType(terminal_t::TERMINAL)) { terminal_t *pt = static_cast<terminal_t *>(p); analog_net_t *other_net = &pt->m_otherterm->net(); if (!other_net->already_processed(groups)) other_net->process_net(groups); } } }
ATTR_COLD void analog_net_t::process_net(list_t *groups, int &cur_group) { if (num_cons() == 0) return; /* add the net */ groups[cur_group].add(this); for (std::size_t i = 0; i < m_core_terms.size(); i++) { core_terminal_t *p = m_core_terms[i]; if (p->isType(terminal_t::TERMINAL)) { terminal_t *pt = static_cast<terminal_t *>(p); analog_net_t *other_net = &pt->m_otherterm->net().as_analog(); if (!other_net->already_processed(groups, cur_group)) other_net->process_net(groups, cur_group); } } }
ATTR_COLD void netlist_analog_net_t::process_net(list_t *groups, int &cur_group) { if (num_cons() == 0) return; /* add the net */ //SOLVER_VERBOSE_OUT(("add %d - %s\n", cur_group, name().cstr())); groups[cur_group].add(this); for (int i = 0; i < m_core_terms.count(); i++) { netlist_core_terminal_t *p = m_core_terms[i]; //SOLVER_VERBOSE_OUT(("terminal %s\n", p->name().cstr())); if (p->isType(netlist_terminal_t::TERMINAL)) { //SOLVER_VERBOSE_OUT(("isterminal\n")); netlist_terminal_t *pt = static_cast<netlist_terminal_t *>(p); netlist_analog_net_t *other_net = &pt->m_otherterm->net().as_analog(); if (!other_net->already_processed(groups, cur_group)) other_net->process_net(groups, cur_group); } } }
void detail::net_t::inc_active(core_terminal_t &term) { m_active++; m_list_active.push_front(&term); nl_assert(m_active <= static_cast<int>(num_cons())); if (m_active == 1) { railterminal().device().do_inc_active(); if (m_in_queue == 0) { if (m_time > netlist().time()) { m_in_queue = 1; /* pending */ netlist().push_to_queue(*this, m_time); } else { m_cur_Q = m_new_Q; m_in_queue = 2; } } } }