| 36 | } |
| 37 | |
| 38 | PostcodePoints::PostcodePoints(MwmValue const & value) |
| 39 | { |
| 40 | auto reader = value.m_cont.GetReader(POSTCODE_POINTS_FILE_TAG); |
| 41 | m_header.Read(*reader.GetPtr()); |
| 42 | |
| 43 | m_trieSubReader = reader.GetPtr()->CreateSubReader(m_header.m_trieOffset, m_header.m_trieSize); |
| 44 | m_root = trie::ReadTrie<SubReaderWrapper<Reader>, SingleUint64Value>(SubReaderWrapper<Reader>(m_trieSubReader.get()), |
| 45 | SingleValueSerializer<Uint64IndexValue>()); |
| 46 | CHECK(m_root, ()); |
| 47 | |
| 48 | version::MwmTraits traits(value.GetMwmVersion()); |
| 49 | auto const format = traits.GetCentersTableFormat(); |
| 50 | CHECK_EQUAL(format, version::MwmTraits::CentersTableFormat::EliasFanoMapWithHeader, ("Unexpected format.")); |
| 51 | |
| 52 | m_pointsSubReader = reader.GetPtr()->CreateSubReader(m_header.m_pointsOffset, m_header.m_pointsSize); |
| 53 | m_points = CentersTable::LoadV1(*m_pointsSubReader); |
| 54 | CHECK(m_points, ()); |
| 55 | |
| 56 | auto constexpr kPostcodeRadiusMultiplier = 5.0; |
| 57 | auto const area = value.GetHeader().GetBounds().Area(); |
| 58 | auto const count = static_cast<double>(m_points->Count()); |
| 59 | CHECK_NOT_EQUAL(count, 0.0, ("Zero postcodes should not be serialized to", POSTCODE_POINTS_FILE_TAG, "section")); |
| 60 | m_radius = kPostcodeRadiusMultiplier * 0.5 * sqrt(area / count); |
| 61 | } |
| 62 | |
| 63 | void PostcodePoints::Get(UniString const & postcode, bool recursive, vector<m2::PointD> & points) const |
| 64 | { |
nothing calls this directly
no test coverage detected