#pragma once #include "track_analyzing/exceptions.hpp" #include "track_analyzing/track.hpp" #include "routing/geometry.hpp" #include "routing_common/num_mwm_id.hpp" #include "storage/storage.hpp" #include "platform/platform.hpp" #include #include #include #include #include namespace track_analyzing { using StringFilter = std::function; double CalcSubtrackLength(MatchedTrack::const_iterator begin, MatchedTrack::const_iterator end, routing::Geometry & geometry); double CalcTrackLength(MatchedTrack const & track, routing::Geometry & geometry); double CalcSpeedKMpH(double meters, uint64_t secondsElapsed); void ReadTracks(std::shared_ptr numMwmIds, std::string const & filename, MwmToMatchedTracks & mwmToMatchedTracks); MatchedTrack const & GetMatchedTrack(MwmToMatchedTracks const & mwmToMatchedTracks, routing::NumMwmIds const & numMwmIds, std::string const & mwmName, std::string const & user, size_t trackIdx); std::string GetCurrentVersionMwmFile(storage::Storage const & storage, std::string const & mwmName); template void ForTracksSortedByMwmName(MwmToTracks const & mwmToTracks, routing::NumMwmIds const & numMwmIds, ToDo && toDo) { std::vector mwmNames; mwmNames.reserve(mwmToTracks.size()); for (auto const & it : mwmToTracks) mwmNames.push_back(numMwmIds.GetFile(it.first).GetName()); sort(mwmNames.begin(), mwmNames.end()); for (auto const & mwmName : mwmNames) { auto const mwmId = numMwmIds.GetId(platform::CountryFile(mwmName)); auto mwmIt = mwmToTracks.find(mwmId); CHECK(mwmIt != mwmToTracks.cend(), ()); toDo(mwmName, mwmIt->second); } } void ForEachTrackFile( std::string const & filepath, std::string const & extension, shared_ptr numMwmIds, std::function && toDo); } // namespace track_analyzing