基本数据结构
std::unordered_map<std::string, int> _gate_name_indexs;
std::unordered_map<int, std::string> _gate_index_names;
std::unordered_map<std::string, int> _gate_P;
核心函数
#include <ot/timer/timer.hpp>
namespace ot
{
void Timer::dump_gate_sort(std::ostream &os) const
{
std::shared_lock lock(_mutex);
_dump_gate_sort(os);
}
void Timer::_dump_gate_sort(std::ostream &os) const
{
for (const auto &[gate_name, gate] : _gates)
{
os << gate_name << std::endl;
}
}
void Timer::dump_hypergraph_gate(std::ostream &os)
{
std::shared_lock lock(_mutex);
_dump_hypergraph_gate(os);
}
void Timer::_dump_hypergraph_gate(std::ostream &os)
{
std::string gatename;
std::string buffer;
int net_size = 0;
std::unordered_set<std::string> uset;
for (const auto &[net_name, net] : _nets)
{
if (net.is_normal_net())
{
for (const auto pin : net._pins)
{
std::string gateName = pin->gate()->name();
auto gate = _gate_name_indexs.find(gateName);
assert(gate != _gate_name_indexs.end());
buffer += to_string(gate->second) + " ";
uset.emplace(gateName);
}
buffer += "\n";
net_size++;
}
}
assert(uset.size() <= _gate_name_indexs.size());
os << net_size << " " << _gate_name_indexs.size() << "\n";
os << buffer;
}
void Timer::read_gate_sort(std::filesystem::path path)
{
std::shared_lock lock(_mutex);
std::ifstream ifs(path);
assert(ifs.good());
std::string gatename;
int index = 1;
while (getline(ifs, gatename