#pragma once #include "routing/segment.hpp" #include "traffic/traffic_cache.hpp" #include "traffic/traffic_info.hpp" #include "routing_common/num_mwm_id.hpp" #include "indexer/mwm_set.hpp" #include "base/assert.hpp" #include #include #include namespace routing { class TrafficStash final { public: class Guard final { public: explicit Guard(std::shared_ptr stash) : m_stash(std::move(stash)) { if (m_stash) m_stash->CopyTraffic(); } ~Guard() { if (m_stash) m_stash->Clear(); } private: std::shared_ptr m_stash; }; TrafficStash(traffic::TrafficCache const & source, std::shared_ptr numMwmIds); traffic::SpeedGroup GetSpeedGroup(Segment const & segment) const; void SetColoring(NumMwmId numMwmId, std::shared_ptr coloring); bool Has(NumMwmId numMwmId) const; private: void CopyTraffic(); void Clear() { m_mwmToTraffic.clear(); } traffic::TrafficCache const & m_source; std::shared_ptr m_numMwmIds; std::unordered_map> m_mwmToTraffic; }; } // namespace routing