Repo created
This commit is contained in:
parent
4af19165ec
commit
68073add76
12458 changed files with 12350765 additions and 2 deletions
61
libs/storage/country_tree_helpers.cpp
Normal file
61
libs/storage/country_tree_helpers.cpp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#include "storage/country_tree_helpers.hpp"
|
||||
|
||||
#include "base/logging.hpp"
|
||||
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace storage
|
||||
{
|
||||
CountryId GetTopmostParentFor(CountryTree const & countries, CountryId const & countryId)
|
||||
{
|
||||
CountryTree::NodesBufferT nodes;
|
||||
countries.Find(countryId, nodes);
|
||||
if (nodes.empty())
|
||||
{
|
||||
LOG(LWARNING, ("CountryId =", countryId, "not found in countries."));
|
||||
return {};
|
||||
}
|
||||
|
||||
if (nodes.size() > 1)
|
||||
{
|
||||
// Disputed territory. Has multiple parents.
|
||||
CHECK(nodes[0]->HasParent(), ());
|
||||
auto const parentId = nodes[0]->Parent().Value().Name();
|
||||
for (size_t i = 1; i < nodes.size(); ++i)
|
||||
if (nodes[i]->Parent().Value().Name() != parentId)
|
||||
return countryId;
|
||||
return GetTopmostParentFor(countries, parentId);
|
||||
}
|
||||
|
||||
auto result = nodes[0];
|
||||
|
||||
if (!result->HasParent())
|
||||
return result->Value().Name();
|
||||
|
||||
auto parent = &(result->Parent());
|
||||
while (parent->HasParent())
|
||||
{
|
||||
result = parent;
|
||||
parent = &(result->Parent());
|
||||
}
|
||||
|
||||
return result->Value().Name();
|
||||
}
|
||||
|
||||
std::optional<CountryTree> LoadCountriesFromFile(std::string const & path)
|
||||
{
|
||||
Affiliations affiliations;
|
||||
CountryNameSynonyms countryNameSynonyms;
|
||||
MwmTopCityGeoIds mwmTopCityGeoIds;
|
||||
MwmTopCountryGeoIds mwmTopCountryGeoIds;
|
||||
CountryTree countries;
|
||||
auto const res =
|
||||
LoadCountriesFromFile(path, countries, affiliations, countryNameSynonyms, mwmTopCityGeoIds, mwmTopCountryGeoIds);
|
||||
|
||||
if (res == -1)
|
||||
return {};
|
||||
|
||||
return std::optional<CountryTree>(std::move(countries));
|
||||
}
|
||||
} // namespace storage
|
||||
Loading…
Add table
Add a link
Reference in a new issue