From df0d573e34e2520f548bd7fdde3272532d9745d3 Mon Sep 17 00:00:00 2001 From: Maksim Andrianov Date: Fri, 26 Feb 2021 06:27:14 +0300 Subject: [PATCH] [generator] Changed a format of access conditional csv. --- generator/road_access_generator.cpp | 33 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/generator/road_access_generator.cpp b/generator/road_access_generator.cpp index 57fb03479f..ccb9b41162 100644 --- a/generator/road_access_generator.cpp +++ b/generator/road_access_generator.cpp @@ -281,29 +281,39 @@ void ParseRoadAccessConditional( array pointToAccessConditional; string buffer; + string line; VehicleType vehicleType = VehicleType::Count; - while (stream >> buffer) + while (getline(stream, line)) { + using It = strings::TokenizeIterator; + It strIt(line, strings::SimpleDelimiter('\t')); + + buffer = *strIt; + strings::Trim(buffer); FromString(buffer, vehicleType); CHECK_NOT_EQUAL(vehicleType, VehicleType::Count, (buffer)); uint64_t osmId = 0; - stream >> osmId; + buffer = *(++strIt); + strings::Trim(buffer); + CHECK(strings::to_uint64(buffer, osmId), (buffer)); size_t accessNumber = 0; - stream >> accessNumber; + buffer = *(++strIt); + strings::Trim(buffer); + CHECK(strings::to_size_t(buffer, accessNumber), (buffer)); CHECK_NOT_EQUAL(accessNumber, 0, ()); RoadAccess::Conditional conditional; - char const newline = stream.get(); - CHECK_EQUAL(newline, '\n', ()); for (size_t i = 0; i < accessNumber; ++i) { - getline(stream, buffer); + buffer = *(++strIt); + strings::Trim(buffer); RoadAccess::Type roadAccessType = RoadAccess::Type::Count; FromString(buffer, roadAccessType); CHECK_NOT_EQUAL(roadAccessType, RoadAccess::Type::Count, ()); - getline(stream, buffer); + buffer = *(++strIt); + strings::Trim(buffer); osmoh::OpeningHours openingHours(buffer); if (!openingHours.IsValid()) continue; @@ -499,9 +509,14 @@ void RoadAccessTagProcessor::WriteWayToAccessConditional(std::ostream & stream) for (auto const & [osmId, accesses] : m_wayToAccessConditional) { CHECK(!accesses.empty(), ()); - stream << ToString(m_vehicleType) << " " << osmId << " " << accesses.size() << endl; + stream << ToString(m_vehicleType) << '\t' << osmId << '\t' << accesses.size() << '\t'; for (auto const & access : accesses) - stream << ToString(access.m_accessType) << endl << access.m_openingHours << endl; + { + string oh; + replace_copy(cbegin(access.m_openingHours), cend(access.m_openingHours), back_inserter(oh), '\t', ' '); + stream << ToString(access.m_accessType) << '\t' << oh << '\t'; + } + stream << endl; } }