trunk/src/emu/netlist/analog/nld_solver.c
| r30702 | r30703 | |
| 37 | 37 | { |
| 38 | 38 | NL_VERBOSE_OUT(("New solver setup\n")); |
| 39 | 39 | |
| 40 | | m_nets.resize(nets.count()); |
| 40 | m_nets.clear(); |
| 41 | 41 | |
| 42 | 42 | for (int k = 0; k < nets.count(); k++) |
| 43 | 43 | { |
| 44 | m_nets.add(net_entry(nets[k])); |
| 45 | } |
| 46 | |
| 47 | for (int k = 0; k < nets.count(); k++) |
| 48 | { |
| 44 | 49 | NL_VERBOSE_OUT(("setting up net\n")); |
| 45 | 50 | |
| 46 | | m_nets[k].m_net = nets[k]; |
| 47 | 51 | netlist_analog_net_t *net = nets[k]; |
| 48 | 52 | |
| 49 | 53 | net->m_solver = this; |
| r30702 | r30703 | |
| 316 | 320 | // netlist_matrix_solver - Direct base |
| 317 | 321 | // ---------------------------------------------------------------------------------------- |
| 318 | 322 | |
| 319 | | |
| 320 | | template <int m_N, int _storage_N> |
| 321 | | ATTR_COLD int netlist_matrix_solver_direct_t<m_N, _storage_N>::get_net_idx(netlist_net_t *net) |
| 323 | ATTR_COLD int netlist_matrix_solver_t::get_net_idx(netlist_net_t *net) |
| 322 | 324 | { |
| 323 | | for (int k = 0; k < N(); k++) |
| 325 | for (int k = 0; k < m_nets.count(); k++) |
| 324 | 326 | if (m_nets[k].m_net == net) |
| 325 | 327 | return k; |
| 326 | 328 | return -1; |
trunk/src/emu/netlist/plists.h
| r30702 | r30703 | |
| 76 | 76 | m_list[m_count++] = elem; |
| 77 | 77 | } |
| 78 | 78 | |
| 79 | | ATTR_HOT inline void resize(const int new_size) |
| 80 | | { |
| 81 | | int cnt = count(); |
| 82 | | if (new_size > 0) |
| 83 | | { |
| 84 | | _ListClass *m_new = new _ListClass[new_size]; |
| 85 | | _ListClass *pd = m_new; |
| 86 | | |
| 87 | | if (cnt > new_size) |
| 88 | | cnt = new_size; |
| 89 | | for (_ListClass *ps = m_list; ps < m_list + cnt; ps++, pd++) |
| 90 | | *pd = *ps; |
| 91 | | if (m_list != NULL) |
| 92 | | delete[] m_list; |
| 93 | | m_list = m_new; |
| 94 | | m_count = cnt; |
| 95 | | } |
| 96 | | else |
| 97 | | { |
| 98 | | if (m_list != NULL) |
| 99 | | delete[] m_list; |
| 100 | | m_list = NULL; |
| 101 | | m_count = 0; |
| 102 | | } |
| 103 | | m_num_elements = new_size; |
| 104 | | } |
| 105 | | |
| 106 | 79 | ATTR_HOT inline void remove(const _ListClass &elem) |
| 107 | 80 | { |
| 108 | 81 | for (int i = 0; i < m_count; i++) |
| r30702 | r30703 | |
| 171 | 144 | ATTR_HOT inline const _ListClass& operator[](const int & index) const { return m_list[index]; } |
| 172 | 145 | |
| 173 | 146 | private: |
| 174 | | int m_count; |
| 147 | ATTR_HOT inline void resize(const int new_size) |
| 148 | { |
| 149 | int cnt = count(); |
| 150 | if (new_size > 0) |
| 151 | { |
| 152 | _ListClass *m_new = new _ListClass[new_size]; |
| 153 | _ListClass *pd = m_new; |
| 154 | |
| 155 | if (cnt > new_size) |
| 156 | cnt = new_size; |
| 157 | for (_ListClass *ps = m_list; ps < m_list + cnt; ps++, pd++) |
| 158 | *pd = *ps; |
| 159 | if (m_list != NULL) |
| 160 | delete[] m_list; |
| 161 | m_list = m_new; |
| 162 | m_count = cnt; |
| 163 | } |
| 164 | else |
| 165 | { |
| 166 | if (m_list != NULL) |
| 167 | delete[] m_list; |
| 168 | m_list = NULL; |
| 169 | m_count = 0; |
| 170 | } |
| 171 | m_num_elements = new_size; |
| 172 | } |
| 173 | |
| 174 | int m_count; |
| 175 | 175 | _ListClass * m_list; |
| 176 | 176 | int m_num_elements; |
| 177 | 177 | }; |