diff options
author | VladiMihaylenko <vxmihaylenko@gmail.com> | 2017-04-24 18:10:57 +0300 |
---|---|---|
committer | Ilya Grechuhin <i.grechuhin@gmail.com> | 2017-04-25 11:48:26 +0300 |
commit | 668cfd0f21825e175d422f2ea327e08d86dfbdec (patch) | |
tree | 9d5f2926ec58087564ac172306ed48ad780eecca /storage | |
parent | aec19c9b1ef640204a5ac4849777944d7701ca72 (diff) |
Fixed problem with disputed countries status.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/storage.cpp | 12 | ||||
-rw-r--r-- | storage/storage.hpp | 3 |
2 files changed, 10 insertions, 5 deletions
diff --git a/storage/storage.cpp b/storage/storage.cpp index 69d900493b..515b0ce6dc 100644 --- a/storage/storage.cpp +++ b/storage/storage.cpp @@ -1196,7 +1196,9 @@ void Storage::GetChildrenInGroups(TCountryId const & parent, TCountriesVec & dow TCountriesVec allDisputedTerritories; parentNode->ForEachChild([&](TCountryTreeNode const & childNode) { vector<pair<TCountryId, NodeStatus>> disputedTerritoriesAndStatus; - StatusAndError const childStatus = GetNodeStatusInfo(childNode, disputedTerritoriesAndStatus); + StatusAndError const childStatus = GetNodeStatusInfo(childNode, + disputedTerritoriesAndStatus, + true /* isDisputedTerritoriesCounted */); TCountryId const & childValue = childNode.Value().Name(); ASSERT_NOT_EQUAL(childStatus.status, NodeStatus::Undefined, ()); @@ -1298,7 +1300,7 @@ void Storage::DeleteNode(TCountryId const & countryId) StatusAndError Storage::GetNodeStatus(TCountryTreeNode const & node) const { vector<pair<TCountryId, NodeStatus>> disputedTerritories; - return GetNodeStatusInfo(node, disputedTerritories); + return GetNodeStatusInfo(node, disputedTerritories, false /* isDisputedTerritoriesCounted */); } bool Storage::IsDisputed(TCountryTreeNode const & node) const @@ -1309,7 +1311,8 @@ bool Storage::IsDisputed(TCountryTreeNode const & node) const } StatusAndError Storage::GetNodeStatusInfo( - TCountryTreeNode const & node, vector<pair<TCountryId, NodeStatus>> & disputedTerritories) const + TCountryTreeNode const & node, vector<pair<TCountryId, NodeStatus>> & disputedTerritories, + bool isDisputedTerritoriesCounted) const { // Leaf node status. if (node.ChildrenCount() == 0) @@ -1327,7 +1330,8 @@ StatusAndError Storage::GetNodeStatusInfo( auto groupStatusCalculator = [&](TCountryTreeNode const & nodeInSubtree) { StatusAndError const statusAndError = ParseStatus(CountryStatusEx(nodeInSubtree.Value().Name())); - if (IsDisputed(nodeInSubtree)) + + if (IsDisputed(nodeInSubtree) && isDisputedTerritoriesCounted) { disputedTerritories.push_back(make_pair(nodeInSubtree.Value().Name(), statusAndError.status)); return; diff --git a/storage/storage.hpp b/storage/storage.hpp index 1a96a2a171..57e9c8a92f 100644 --- a/storage/storage.hpp +++ b/storage/storage.hpp @@ -607,7 +607,8 @@ private: /// Returns status for a node (group node or not). /// Fills |disputedTeritories| with all disputed teritories in subtree with the root == |node|. StatusAndError GetNodeStatusInfo(TCountryTreeNode const & node, - vector<pair<TCountryId, NodeStatus>> & disputedTeritories) const; + vector<pair<TCountryId, NodeStatus>> & disputedTeritories, + bool isDisputedTerritoriesCounted) const; void NotifyStatusChanged(TCountryId const & countryId); void NotifyStatusChangedForHierarchy(TCountryId const & countryId); |