| 35 | }; |
| 36 | |
| 37 | std::vector<MetalineData> ReadMetalinesFromFile(MwmSet::MwmId const & mwmId) |
| 38 | { |
| 39 | try |
| 40 | { |
| 41 | std::vector<MetalineData> model; |
| 42 | ModelReaderPtr reader = |
| 43 | FilesContainerR(mwmId.GetInfo()->GetLocalFile().GetPath(MapFileType::Map)).GetReader(METALINES_FILE_TAG); |
| 44 | ReaderSrc src(reader.GetPtr()); |
| 45 | auto const version = ReadPrimitiveFromSource<uint8_t>(src); |
| 46 | if (version == 1) |
| 47 | { |
| 48 | for (auto metalineIndex = ReadVarUint<uint32_t>(src); metalineIndex > 0; --metalineIndex) |
| 49 | { |
| 50 | MetalineData data{}; |
| 51 | for (auto i = ReadVarUint<uint32_t>(src); i > 0; --i) |
| 52 | { |
| 53 | auto const fid = ReadVarInt<int32_t>(src); |
| 54 | FeatureID const featureId(mwmId, static_cast<uint32_t>(std::abs(fid))); |
| 55 | data.m_features.emplace_back(featureId); |
| 56 | if (fid <= 0) |
| 57 | data.m_reversed.insert(featureId); |
| 58 | } |
| 59 | if (!data.m_features.empty()) |
| 60 | model.push_back(std::move(data)); |
| 61 | } |
| 62 | } |
| 63 | return model; |
| 64 | } |
| 65 | catch (Reader::Exception const &) |
| 66 | { |
| 67 | return {}; |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | ankerl::unordered_dense::map<FeatureID, std::vector<m2::PointD>> ReadPoints(df::MapDataProvider & model, |
| 72 | MetalineData const & metaline) |
no test coverage detected