diff --git a/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp b/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp index acebfd9254..5faa1cedd7 100644 --- a/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp +++ b/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp @@ -32,7 +32,7 @@ public: SimpleLogger().Write(logWARNING) << "Multitreaded storage was not set on compile time!!! Do " "not use osrm-routed in several threads." #endif - if (!osrm::LoadNodeDataFromFile(nodeDataFile, m_nodeData)) + if (!osrm::LoadNodeDataFromFile(nodeDataFile, m_nodeData)) { SimpleLogger().Write(logDEBUG) << "Can't load node data"; return; @@ -127,7 +127,7 @@ public: } // Get ids of ways used in path. - set wayIds; + set wayIds; for (auto i : osrm::irange(0, raw_route.unpacked_path_segments.size())) { diff --git a/generator/generator_tests/tag_admixer_test.cpp b/generator/generator_tests/tag_admixer_test.cpp index 2c0cd45988..46ab43a827 100644 --- a/generator/generator_tests/tag_admixer_test.cpp +++ b/generator/generator_tests/tag_admixer_test.cpp @@ -2,13 +2,15 @@ #include "generator/tag_admixer.hpp" -#include +#include "std/map.hpp" +#include "std/sstream.hpp" UNIT_TEST(ParserTests) { map ways; WaysParserHelper parser(ways); - parser.ParseString("140247102;world_level\n86398306;another_level\n294584441;world_level"); + istringstream stream("140247102;world_level\n86398306;another_level\n294584441;world_level"); + parser.ParseStream(stream); TEST(ways.find(140247102) != ways.end(), ()); TEST_EQUAL(ways[140247102], string("world_level"), ()); TEST(ways.find(86398306) != ways.end(), ()); diff --git a/generator/osm_source.cpp b/generator/osm_source.cpp index 899f8162b8..cbc5075814 100644 --- a/generator/osm_source.cpp +++ b/generator/osm_source.cpp @@ -396,7 +396,11 @@ void AddElementToCache(TCache & cache, TElement const & em) template void BuildIntermediateDataFromXML(SourceReader & stream, TCache & cache, TownsDumper & towns) { - XMLSource parser([&](OsmElement * e) { towns.CheckElement(*e); AddElementToCache(cache, *e); }); + XMLSource parser([&](OsmElement * e) + { + towns.CheckElement(*e); + AddElementToCache(cache, *e); + }); ParseXMLSequence(stream, parser); } diff --git a/generator/tag_admixer.hpp b/generator/tag_admixer.hpp index 026ae49ece..5d2b6f33b5 100644 --- a/generator/tag_admixer.hpp +++ b/generator/tag_admixer.hpp @@ -2,10 +2,10 @@ #include "generator/osm_element.hpp" -#include "coding/file_reader.hpp" - -#include "base/logging.hpp" +#include "base/logging.hpp" +#include "base/string_utils.hpp" +#include "std/fstream.hpp" #include "std/map.hpp" #include "std/string.hpp" @@ -13,17 +13,16 @@ class WaysParserHelper { public: WaysParserHelper(map & ways) : m_ways(ways) {} - void ParseString(string const & input) + void ParseStream(istream & input) { - stringstream stream(input); - string oneLine; - while (getline(stream, oneLine, '\n')) + while (getline(input, oneLine, '\n')) { auto pos = oneLine.find(';'); if (pos < oneLine.length()) { - uint64_t wayId = stoll(oneLine.substr(0, pos)); + uint64_t wayId; + CHECK(strings::to_uint64(oneLine.substr(0, pos), wayId),()); m_ways[wayId] = oneLine.substr(pos + 1, oneLine.length() - pos - 1); } } @@ -38,21 +37,17 @@ class TagAdmixer public: TagAdmixer(string const & fileName) : m_ferryTag("route", "ferry") { - string data; - try { - FileReader reader(fileName); - reader.ReadAsString(data); + ifstream reader(fileName); + WaysParserHelper parser(m_ways); + parser.ParseStream(reader); } - catch (Reader::OpenException const &) + catch (ifstream::failure const &) { - LOG(LWARNING, ("World level ways file not found! Generating world without roads.")); + LOG(LWARNING, ("Can't read the world level ways file! Generating world without roads. Path:", fileName)); return; } - - WaysParserHelper parser(m_ways); - parser.ParseString(data); } OsmElement * operator()(OsmElement * e) diff --git a/generator/towns_dumper.cpp b/generator/towns_dumper.cpp index e5b906ad8a..f5f0fc79c0 100644 --- a/generator/towns_dumper.cpp +++ b/generator/towns_dumper.cpp @@ -1,13 +1,11 @@ #include "towns_dumper.hpp" -#include "coding/file_writer.hpp" - #include "geometry/distance_on_sphere.hpp" #include "geometry/tree4d.hpp" #include "base/logging.hpp" -#include "std/sstream.hpp" +#include "std/fstream.hpp" #include "std/string.hpp" #include "std/vector.hpp" @@ -59,19 +57,15 @@ void TownsDumper::FilterTowns() LOG(LINFO, ("Preprocessing finished. Have", m_records.size(), "towns.")); } -void TownsDumper::Dump(string filePath) +void TownsDumper::Dump(string const & filePath) { FilterTowns(); ASSERT(!filePath.empty(), ()); - ostringstream stream; + ofstream stream(filePath); stream.precision(9); for (auto const & record : m_records) { string const isCapital = record.capital ? "t" : "f"; stream << record.point.lat << ";" << record.point.lon << ";" << record.id << ";" << isCapital << std::endl; } - string result = stream.str(); - FileWriter file(filePath); - file.Write(result.c_str(), result.length()); - file.Flush(); } diff --git a/generator/towns_dumper.hpp b/generator/towns_dumper.hpp index f79a11de7e..74c292c40b 100644 --- a/generator/towns_dumper.hpp +++ b/generator/towns_dumper.hpp @@ -4,6 +4,8 @@ #include "geometry/mercator.hpp" #include "geometry/rect2d.hpp" +#include "base/string_utils.hpp" + #include "std/string.hpp" #include "std/vector.hpp" @@ -27,14 +29,14 @@ public: { try { - population = stoul(value); + strings::to_uint64(value, population); } catch (std::invalid_argument const &) { continue; } } - else if (key == "capital") + else if (key == "capital" && value == "yes") { capital = true; } @@ -47,7 +49,7 @@ public: m_records.emplace_back(em.lat, em.lon, em.id, capital, population); } - void Dump(string filePath); + void Dump(string const & filePath); private: void FilterTowns(); diff --git a/tools/unix/generate_planet.sh b/tools/unix/generate_planet.sh index 522adcd7de..2e0b97398e 100755 --- a/tools/unix/generate_planet.sh +++ b/tools/unix/generate_planet.sh @@ -258,7 +258,11 @@ if [ "$MODE" == "coast" ]; then # Preprocess coastlines to separate intermediate directory "$GENERATOR_TOOL" --intermediate_data_path="$INTCOASTSDIR/" --node_storage=map --osm_file_type=o5m --osm_file_name="$COASTS_O5M" \ -preprocess 2>> "$LOG_PATH/WorldCoasts.log" - python "$ROADS_SCRIPT" "$INTCOASTSDIR" "$OSRM_URL" >>"$LOG_PATH"/road_runner.log + if [ -z "$OSRM_URL" ]; then + log "STATUS" "OSRM_URL variable not set. World roads will not be calculated." + else + python "$ROADS_SCRIPT" "$INTCOASTSDIR" "$OSRM_URL" >>"$LOG_PATH"/road_runner.log + fi # Generate temporary coastlines file in the coasts intermediate dir if ! "$GENERATOR_TOOL" --intermediate_data_path="$INTCOASTSDIR/" --node_storage=map --osm_file_type=o5m --osm_file_name="$COASTS_O5M" \ --user_resource_path="$DATA_PATH/" -make_coasts -fail_on_coasts 2>&1 | tee -a "$LOG_PATH/WorldCoasts.log" | { grep -i 'not merged\|coastline polygons' || true; }