diff --git a/design_dump.cc b/design_dump.cc index 3aabb3fdd..c53a54315 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -1148,12 +1148,9 @@ void NetScope::dump(ostream&o) const } // Dump the signals, - if (signals_) { - NetNet*cur = signals_->sig_next_; - do { - cur->dump_net(o, 4); - cur = cur->sig_next_; - } while (cur != signals_->sig_next_); + for (signals_map_iter_t cur = signals_map_.begin() + ; cur != signals_map_.end() ; cur ++) { + cur->second->dump_net(o, 4); } // Dump specparams diff --git a/emit.cc b/emit.cc index 6d1be63a8..4bdb7a98f 100644 --- a/emit.cc +++ b/emit.cc @@ -373,23 +373,20 @@ void NetScope::emit_scope(struct target_t*tgt) const for (NetScope*cur = sub_ ; cur ; cur = cur->sib_) cur->emit_scope(tgt); - if (signals_) { - NetNet*cur = signals_->sig_next_; - do { - tgt->signal(cur); - cur = cur->sig_next_; - } while (cur != signals_->sig_next_); + for (signals_map_iter_t cur = signals_map_.begin() + ; cur != signals_map_.end() ; cur ++) { + tgt->signal(cur->second); + } - /* Run the signals again, but this time to connect the - delay paths. This is done as a second pass because - the paths reference other signals that may be later - in the list. We can do it here because delay paths are - always connected within the scope. */ - cur = signals_->sig_next_; - do { - tgt->signal_paths(cur); - cur = cur->sig_next_; - } while (cur != signals_->sig_next_); + // Run the signals again, but this time to connect the + // delay paths. This is done as a second pass because + // the paths reference other signals that may be later + // in the list. We can do it here because delay paths are + // always connected within the scope. + for (signals_map_iter_t cur = signals_map_.begin() + ; cur != signals_map_.end() ; cur ++) { + + tgt->signal_paths(cur->second); } } diff --git a/functor.cc b/functor.cc index 406d0ff9f..0b41bff24 100644 --- a/functor.cc +++ b/functor.cc @@ -111,20 +111,12 @@ void NetScope::run_functor(Design*des, functor_t*fun) // apply to signals. Each iteration, allow for the possibility // that the current signal deletes itself. - if (signals_) { - unsigned count = 0; - NetNet*cur = signals_->sig_next_; - do { - count += 1; - cur = cur->sig_next_; - } while (cur != signals_->sig_next_); - cur = signals_->sig_next_; - for (unsigned idx = 0 ; idx < count ; idx += 1) { - NetNet*tmp = cur->sig_next_; - fun->signal(des, cur); - cur = tmp; - } + signals_map_iter_t cur = signals_map_.begin(); + while (cur != signals_map_.end()) { + signals_map_iter_t tmp = cur; + cur ++; + fun->signal(des, tmp->second); } } diff --git a/net_scope.cc b/net_scope.cc index e1a8a3be1..ed9853f1a 100644 --- a/net_scope.cc +++ b/net_scope.cc @@ -38,7 +38,6 @@ NetScope::NetScope(NetScope*up, const hname_t&n, NetScope::TYPE t) : type_(t), up_(up), sib_(0), sub_(0) { - signals_ = 0; events_ = 0; lcounter_ = 0; is_auto_ = false; @@ -360,16 +359,6 @@ NetEvent* NetScope::find_event(perm_string name) void NetScope::add_signal(NetNet*net) { - if (signals_ == 0) { - net->sig_next_ = net; - net->sig_prev_ = net; - } else { - net->sig_next_ = signals_->sig_next_; - net->sig_prev_ = signals_; - net->sig_next_->sig_prev_ = net; - net->sig_prev_->sig_next_ = net; - } - signals_ = net; signals_map_[net->name()]=net; } @@ -377,15 +366,6 @@ void NetScope::rem_signal(NetNet*net) { assert(net->scope() == this); signals_map_.erase(net->name()); - if (signals_ == net) - signals_ = net->sig_prev_; - - if (signals_ == net) { - signals_ = 0; - } else { - net->sig_prev_->sig_next_ = net->sig_next_; - net->sig_next_->sig_prev_ = net->sig_prev_; - } } /* @@ -395,21 +375,10 @@ void NetScope::rem_signal(NetNet*net) */ NetNet* NetScope::find_signal(perm_string key) { - if (signals_ == 0) - return 0; - if (signals_map_.find(key)!=signals_map_.end()) - return signals_map_[key]; + return signals_map_[key]; else - return 0; - - NetNet*cur = signals_; - do { - if (cur->name() == key) - return cur; - cur = cur->sig_prev_; - } while (cur != signals_); - return 0; + return 0; } /* diff --git a/netlist.cc b/netlist.cc index 9cd711a8c..c27f907b1 100644 --- a/netlist.cc +++ b/netlist.cc @@ -427,7 +427,7 @@ const Link& NetDelaySrc::condit_pin() const } NetNet::NetNet(NetScope*s, perm_string n, Type t, unsigned npins) -: NetObj(s, n, 1), sig_next_(0), sig_prev_(0), +: NetObj(s, n, 1), type_(t), port_type_(NOT_A_PORT), data_type_(IVL_VT_NO_TYPE), signed_(false), isint_(false), discipline_(0), msb_(npins-1), lsb_(0), dimensions_(0), @@ -466,8 +466,7 @@ NetNet::NetNet(NetScope*s, perm_string n, Type t, unsigned npins) NetNet::NetNet(NetScope*s, perm_string n, Type t, long ms, long ls) -: NetObj(s, n, 1), - sig_next_(0), sig_prev_(0), type_(t), +: NetObj(s, n, 1), type_(t), port_type_(NOT_A_PORT), data_type_(IVL_VT_NO_TYPE), signed_(false), isint_(false), discipline_(0), msb_(ms), lsb_(ls), dimensions_(0), s0_(0), e0_(0), local_flag_(false), eref_count_(0), lref_count_(0) @@ -514,7 +513,7 @@ static unsigned calculate_count(long s, long e) NetNet::NetNet(NetScope*s, perm_string n, Type t, long ms, long ls, long array_s, long array_e) : NetObj(s, n, calculate_count(array_s, array_e)), - sig_next_(0), sig_prev_(0), type_(t), port_type_(NOT_A_PORT), + type_(t), port_type_(NOT_A_PORT), data_type_(IVL_VT_NO_TYPE), signed_(false), isint_(false), discipline_(0), msb_(ms), lsb_(ls), dimensions_(1), s0_(array_s), e0_(array_e), local_flag_(false), eref_count_(0), lref_count_(0) diff --git a/netlist.h b/netlist.h index 4c7293039..1e12ca021 100644 --- a/netlist.h +++ b/netlist.h @@ -614,11 +614,6 @@ class NetNet : public NetObj { virtual void dump_net(ostream&, unsigned) const; - private: - // The NetScope class uses this for listing signals. - friend class NetScope; - NetNet*sig_next_, *sig_prev_; - private: Type type_; PortType port_type_; @@ -861,8 +856,8 @@ class NetScope : public Attrib { NetNet::Type default_nettype_; NetEvent *events_; + typedef std::map::const_iterator signals_map_iter_t; std::map signals_map_; - NetNet *signals_; perm_string module_name_; union { NetTaskDef*task_;