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 | } | ||