#include "network_set.h" void NetworkSet::Clear() { network_by_item_.clear(); } void NetworkSet::AddLink(int id1, int id2, bool two_way) { if (two_way && id2 > id1) { std::swap(id1, id2); } if (!network_by_item_.count(id1)) { network_by_item_[id1] = {}; } if (!network_by_item_.count(id2)) { network_by_item_[id2] = {}; } NetworkNode node = {id1, id2, two_way}; network_by_item_[id1].insert(node); network_by_item_[id2].insert(node); } void NetworkSet::AddLinkToNetwork(int network_id, int id1, int id2, bool two_way) { if (two_way && id2 > id1) { std::swap(id1, id2); } if (!network_by_item_.count(network_id)) { network_by_item_[network_id] = {}; } NetworkNode node = {id1, id2, two_way}; network_by_item_[network_id].insert(node); } bool NetworkSet::IsItemInNetwork(int id) const { return network_by_item_.count(id); } const std::set& NetworkSet::GetNetworkGraph(int id) const { return network_by_item_.at(id); } bool NetworkNode::operator<(const NetworkNode& rhs) const { if (entry != rhs.entry) return entry < rhs.entry; if (exit != rhs.exit) return exit < rhs.exit; if (two_way != rhs.two_way) return two_way < rhs.two_way; return false; }