}
void
-PortSet::add_port(Port* port)
+PortSet::add(Port* port)
{
- const size_t list_index = port->type().to_index();
- assert(list_index < _ports.size());
-
- PortVec& v = _ports[list_index];
+ PortVec& v = _ports[port->type()];
v.push_back(port);
sort(v.begin(), v.end(), sort_ports_by_name);
_count.set(port->type(), _count.get(port->type()) + 1);
- assert(_count.get(port->type()) == _ports[port->type().to_index()].size());
+ assert(_count.get(port->type()) == _ports[port->type()].size());
}
+bool
+PortSet::remove(Port* port)
+{
+ for (std::vector<PortVec>::iterator l = _ports.begin(); l != _ports.end(); ++l) {
+ PortVec::iterator i = find(l->begin(), l->end(), port);
+ if (i != l->end()) {
+ l->erase(i);
+ _count.set(port->type(), _count.get(port->type()) - 1);
+ return true;
+ }
+ }
+
+ return false;
+}
/** Get the total number of ports (of all types) in the PortSet
*/
Port*
PortSet::port(size_t n) const
{
- // This is awesome
+ // This is awesome. Awesomely slow.
size_t size_so_far = 0;
if (type == DataType::NIL) {
return port(n);
} else {
- const PortVec& v = _ports[type.to_index()];
+ const PortVec& v = _ports[type];
assert(n < v.size());
return v[n];
}