diff options
Diffstat (limited to 'src/network_set.cpp')
| -rw-r--r-- | src/network_set.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
| diff --git a/src/network_set.cpp b/src/network_set.cpp index 2a9e12c..45911e3 100644 --- a/src/network_set.cpp +++ b/src/network_set.cpp | |||
| @@ -4,9 +4,8 @@ void NetworkSet::Clear() { | |||
| 4 | network_by_item_.clear(); | 4 | network_by_item_.clear(); |
| 5 | } | 5 | } |
| 6 | 6 | ||
| 7 | void NetworkSet::AddLink(int id1, int id2) { | 7 | void NetworkSet::AddLink(int id1, int id2, bool two_way) { |
| 8 | if (id2 > id1) { | 8 | if (two_way && id2 > id1) { |
| 9 | // Make sure id1 < id2 | ||
| 10 | std::swap(id1, id2); | 9 | std::swap(id1, id2); |
| 11 | } | 10 | } |
| 12 | 11 | ||
| @@ -17,13 +16,14 @@ void NetworkSet::AddLink(int id1, int id2) { | |||
| 17 | network_by_item_[id2] = {}; | 16 | network_by_item_[id2] = {}; |
| 18 | } | 17 | } |
| 19 | 18 | ||
| 20 | network_by_item_[id1].insert({id1, id2}); | 19 | NetworkNode node = {id1, id2, two_way}; |
| 21 | network_by_item_[id2].insert({id1, id2}); | 20 | |
| 21 | network_by_item_[id1].insert(node); | ||
| 22 | network_by_item_[id2].insert(node); | ||
| 22 | } | 23 | } |
| 23 | 24 | ||
| 24 | void NetworkSet::AddLinkToNetwork(int network_id, int id1, int id2) { | 25 | void NetworkSet::AddLinkToNetwork(int network_id, int id1, int id2, bool two_way) { |
| 25 | if (id2 > id1) { | 26 | if (two_way && id2 > id1) { |
| 26 | // Make sure id1 < id2 | ||
| 27 | std::swap(id1, id2); | 27 | std::swap(id1, id2); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| @@ -31,13 +31,22 @@ void NetworkSet::AddLinkToNetwork(int network_id, int id1, int id2) { | |||
| 31 | network_by_item_[network_id] = {}; | 31 | network_by_item_[network_id] = {}; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | network_by_item_[network_id].insert({id1, id2}); | 34 | NetworkNode node = {id1, id2, two_way}; |
| 35 | |||
| 36 | network_by_item_[network_id].insert(node); | ||
| 35 | } | 37 | } |
| 36 | 38 | ||
| 37 | bool NetworkSet::IsItemInNetwork(int id) const { | 39 | bool NetworkSet::IsItemInNetwork(int id) const { |
| 38 | return network_by_item_.count(id); | 40 | return network_by_item_.count(id); |
| 39 | } | 41 | } |
| 40 | 42 | ||
| 41 | const std::set<std::pair<int, int>>& NetworkSet::GetNetworkGraph(int id) const { | 43 | const std::set<NetworkNode>& NetworkSet::GetNetworkGraph(int id) const { |
| 42 | return network_by_item_.at(id); | 44 | return network_by_item_.at(id); |
| 43 | } | 45 | } |
| 46 | |||
| 47 | bool NetworkNode::operator<(const NetworkNode& rhs) const { | ||
| 48 | if (entry != rhs.entry) return entry < rhs.entry; | ||
| 49 | if (exit != rhs.exit) return exit < rhs.exit; | ||
| 50 | if (two_way != rhs.two_way) return two_way < rhs.two_way; | ||
| 51 | return false; | ||
| 52 | } | ||
