#pragma once #include "editor/editable_data_source.hpp" #include "indexer/scales.hpp" #include "base/assert.hpp" #include "base/macros.hpp" #include "base/thread_checker.hpp" #include #include class FeatureType; struct FeatureID; namespace search { class FeatureLoader { public: explicit FeatureLoader(DataSourceBase const & dataSource); WARN_UNUSED_RESULT bool Load(FeatureID const & id, FeatureType & ft); void Reset(); void ForEachInRect(m2::RectD const & rect, std::function const & fn) { ASSERT(m_checker.CalledOnOriginalThread(), ()); m_dataSource.ForEachInRect(fn, rect, scales::GetUpperScale()); } private: DataSourceBase const & m_dataSource; std::unique_ptr m_guard; ThreadChecker m_checker; }; } // namespace search