mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-02 20:00:17 +02:00
rm tmp string uses
commit 2d0a4f8e9a8b46faa2ba91e1be636c3c3ad95a7f Author: James Cherry <[email protected]> Date: Sat Mar 25 21:25:37 2023 -0700 leaks Signed-off-by: James Cherry <[email protected]> commit 5514910a91707d615bac0bbed3a29f579eca8de2 Author: James Cherry <[email protected]> Date: Sat Mar 25 18:21:54 2023 -0700 foo Signed-off-by: James Cherry <[email protected]> commit 076a51d5816444e883232933c2ded7309291d0bc Author: James Cherry <[email protected]> Date: Sat Mar 25 16:38:42 2023 -0700 parse bus string Signed-off-by: James Cherry <[email protected]> commit 2b80e563cbbb6563a6b716431f391bbb6639f816 Author: James Cherry <[email protected]> Date: Sat Mar 25 15:57:05 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 9e4f2308658232d0b1ee9efcd948bb19ae5dd30f Author: James Cherry <[email protected]> Date: Sat Mar 25 14:37:35 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit ebad3afd49b08e7194452dd082c3c7c05767f875 Author: James Cherry <[email protected]> Date: Sat Mar 25 10:59:11 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 69647913932312a04ca06e7a04cca17ed50d4daf Author: James Cherry <[email protected]> Date: Fri Mar 24 21:02:20 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 55e67996a7b0651dbb5ee06cb89fe0410648c3c1 Author: James Cherry <[email protected]> Date: Sat Mar 25 10:42:43 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 73cee43925c0d32940989c616440b4da18640121 Author: James Cherry <[email protected]> Date: Sat Mar 25 09:55:17 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit eba6d1413b8d87a64a90141e5263a56eede1df51 Author: James Cherry <[email protected]> Date: Sat Mar 25 09:40:16 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 95d6ed78144512a37fd7c1d3d8a62fc4c8965818 Author: James Cherry <[email protected]> Date: Sat Mar 25 08:18:46 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit faf82464d7be7fd6c958a21d401fa48ece4ac341 Author: James Cherry <[email protected]> Date: Sat Mar 25 07:49:11 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit cfc9064496cb6f46ec562b104bc7fff2fbc1b32e Author: James Cherry <[email protected]> Date: Sat Mar 25 07:37:12 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit 057933a6ac356a7541883aa64b5109c7a0e8b8d1 Author: James Cherry <[email protected]> Date: Fri Mar 24 21:02:20 2023 -0700 rm tmp string Signed-off-by: James Cherry <[email protected]> commit fdeb6436a72413356a627dd1de1d8cec7fca4c4a Author: James Cherry <[email protected]> Date: Fri Mar 24 19:53:44 2023 -0700 rm TmpString uses Signed-off-by: James Cherry <[email protected]> Signed-off-by: James Cherry <[email protected]>
This commit is contained in:
+35
-33
@@ -25,6 +25,8 @@
|
||||
|
||||
namespace sta {
|
||||
|
||||
using std::map;
|
||||
|
||||
static constexpr char escape_ = '\\';
|
||||
|
||||
ConcreteLibrary::ConcreteLibrary(const char *name,
|
||||
@@ -381,7 +383,7 @@ ConcreteCell::groupBusPorts(const char bus_brkt_left,
|
||||
{
|
||||
const char bus_brkts_left[2]{bus_brkt_left, '\0'};
|
||||
const char bus_brkts_right[2]{bus_brkt_right, '\0'};
|
||||
BusPortMap port_map;
|
||||
map<string, BusPort*> port_map;
|
||||
// Find ungrouped bus ports.
|
||||
// Remove bus bit ports from the ports_ vector during the scan by
|
||||
// keeping an index to the next insertion index and skipping over
|
||||
@@ -390,19 +392,21 @@ ConcreteCell::groupBusPorts(const char bus_brkt_left,
|
||||
ports_.clear();
|
||||
for (ConcretePort *port : ports) {
|
||||
const char *port_name = port->name();
|
||||
char *bus_name;
|
||||
bool is_bus;
|
||||
string bus_name;
|
||||
int index;
|
||||
parseBusName(port_name, bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name, index);
|
||||
if (bus_name) {
|
||||
is_bus, bus_name, index);
|
||||
if (is_bus) {
|
||||
if (!port->isBusBit()) {
|
||||
BusPort *bus_port = port_map.findKey(bus_name);
|
||||
if (bus_port)
|
||||
stringDelete(bus_name);
|
||||
else {
|
||||
bus_port = new BusPort(bus_name, index, port->direction());
|
||||
auto name_bus_port = port_map.find(bus_name);
|
||||
BusPort *bus_port;
|
||||
if (name_bus_port == port_map.end()) {
|
||||
bus_port = new BusPort(bus_name.c_str(), index, port->direction());
|
||||
port_map[bus_name] = bus_port;
|
||||
}
|
||||
else
|
||||
bus_port = name_bus_port->second;
|
||||
bus_port->pushMember(port);
|
||||
}
|
||||
else
|
||||
@@ -413,47 +417,45 @@ ConcreteCell::groupBusPorts(const char bus_brkt_left,
|
||||
}
|
||||
|
||||
// Make the bus ports.
|
||||
BusPortMap::Iterator bus_iter(port_map);
|
||||
while (bus_iter.hasNext()) {
|
||||
BusPort *bus_port = bus_iter.next();
|
||||
const char *bus_name = bus_port->name();
|
||||
bool msb_first = port_msb_first(bus_name);
|
||||
for (auto name_bus : port_map) {
|
||||
const string &bus_name = name_bus.first;
|
||||
BusPort *bus_port = name_bus.second;
|
||||
bool msb_first = port_msb_first(bus_name.c_str());
|
||||
ConcretePortSeq *members = bus_port->members();
|
||||
sort(members, [&](ConcretePort *port1,
|
||||
ConcretePort *port2) {
|
||||
char *bus_name;
|
||||
int index1, index2;
|
||||
parseBusName(port1->name(), bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name, index1);
|
||||
stringDelete(bus_name);
|
||||
parseBusName(port2->name(), bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name, index2);
|
||||
stringDelete(bus_name);
|
||||
return msb_first ? index1 > index2 : index1 < index2;
|
||||
});
|
||||
bool is_bus;
|
||||
string bus_name;
|
||||
int index1, index2;
|
||||
parseBusName(port1->name(), bus_brkts_left, bus_brkts_right, escape_,
|
||||
is_bus, bus_name, index1);
|
||||
parseBusName(port2->name(), bus_brkts_left, bus_brkts_right, escape_,
|
||||
is_bus, bus_name, index2);
|
||||
return msb_first ? index1 > index2 : index1 < index2;
|
||||
});
|
||||
|
||||
char *bus_name1;
|
||||
bool is_bus1;
|
||||
string bus_name1;
|
||||
int from_index, to_index;
|
||||
parseBusName((*members)[0]->name(),
|
||||
bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name1, from_index);
|
||||
stringDelete(bus_name1);
|
||||
is_bus1, bus_name1, from_index);
|
||||
parseBusName((*members)[members->size() - 1]->name(),
|
||||
bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name1, to_index);
|
||||
stringDelete(bus_name1);
|
||||
is_bus1, bus_name1, to_index);
|
||||
|
||||
ConcretePort *port = makeBusPort(bus_name, from_index, to_index, members);
|
||||
ConcretePort *port = makeBusPort(bus_name.c_str(), from_index,
|
||||
to_index, members);
|
||||
port->setDirection(bus_port->direction());
|
||||
delete bus_port;
|
||||
|
||||
for (ConcretePort *port : *members) {
|
||||
char *bus_name;
|
||||
bool is_bus;
|
||||
string bus_name;
|
||||
int index;
|
||||
parseBusName(port->name(), bus_brkts_left, bus_brkts_right, escape_,
|
||||
bus_name, index);
|
||||
is_bus, bus_name, index);
|
||||
port->setBusBitIndex(index);
|
||||
stringDelete(bus_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user