#pragma once #include "indexer/feature.hpp" #include "indexer/features_vector.hpp" #include "indexer/mwm_set.hpp" #include "geometry/rect2d.hpp" #include #include #include #include enum class FeatureStatus { Untouched, // The feature hasn't been saved in the editor. Deleted, // The feature has been marked as deleted. Obsolete, // The feature has been marked for deletion via note. Modified, // The feature has been saved in the editor and differs from the original one. Created // The feature was created by a user and has been saved in the editor. // Note: If a feature was created by a user but hasn't been saved in the editor yet // its status is Untouched. }; // enum class FeatureStatus std::string ToString(FeatureStatus fs); inline std::string DebugPrint(FeatureStatus fs) { return ToString(fs); } class FeatureSource { public: explicit FeatureSource(MwmSet::MwmHandle const & handle); virtual ~FeatureSource() {} size_t GetNumFeatures() const; std::unique_ptr GetOriginalFeature(uint32_t index) const; FeatureID GetFeatureId(uint32_t index) const { return FeatureID(m_handle.GetId(), index); } virtual FeatureStatus GetFeatureStatus(uint32_t index) const; virtual std::unique_ptr GetModifiedFeature(uint32_t index) const; // Runs |fn| for each feature, that is not present in the mwm. virtual void ForEachAdditionalFeature(m2::RectD const & rect, int scale, std::function const & fn) const; protected: MwmSet::MwmHandle const & m_handle; std::unique_ptr m_vector; }; // class FeatureSource // Lightweight FeatureSource factory. Each DataSource owns factory object. class FeatureSourceFactory { public: virtual ~FeatureSourceFactory() = default; virtual std::unique_ptr operator()(MwmSet::MwmHandle const & handle) const { return std::make_unique(handle); } };