| 128 | } |
| 129 | |
| 130 | bool BuildPostcodePointsImpl(FilesContainerR & container, storage::CountryId const & country, |
| 131 | indexer::PostcodePointsDatasetType type, std::string const & datasetPath, |
| 132 | std::string const & tmpName, storage::CountryInfoGetter const & infoGetter, |
| 133 | Writer & writer) |
| 134 | { |
| 135 | CHECK_EQUAL(writer.Pos(), 0, ()); |
| 136 | |
| 137 | search::PostcodePoints::Header header; |
| 138 | header.Serialize(writer); |
| 139 | |
| 140 | uint64_t bytesWritten = writer.Pos(); |
| 141 | coding::WritePadding(writer, bytesWritten); |
| 142 | |
| 143 | header.m_trieOffset = base::asserted_cast<uint32_t>(writer.Pos()); |
| 144 | |
| 145 | std::vector<ZipIndexValue> postcodesKeyValuePairs; |
| 146 | std::vector<m2::PointD> valueMapping; |
| 147 | switch (type) |
| 148 | { |
| 149 | case indexer::PostcodePointsDatasetType::UK: |
| 150 | GetUKPostcodes(datasetPath, country, infoGetter, valueMapping, postcodesKeyValuePairs); |
| 151 | break; |
| 152 | case indexer::PostcodePointsDatasetType::US: |
| 153 | GetUSPostcodes(datasetPath, country, infoGetter, valueMapping, postcodesKeyValuePairs); |
| 154 | break; |
| 155 | default: UNREACHABLE(); |
| 156 | } |
| 157 | |
| 158 | if (postcodesKeyValuePairs.empty()) |
| 159 | return false; |
| 160 | |
| 161 | std::sort(postcodesKeyValuePairs.begin(), postcodesKeyValuePairs.end()); |
| 162 | |
| 163 | { |
| 164 | FileWriter tmpWriter(tmpName); |
| 165 | SingleValueSerializer<typename ZipIndexValue::second_type> serializer; |
| 166 | trie::Build<Writer, typename ZipIndexValue::first_type, SingleUint64Value>(tmpWriter, serializer, |
| 167 | postcodesKeyValuePairs); |
| 168 | } |
| 169 | |
| 170 | rw_ops::Reverse(FileReader(tmpName), writer); |
| 171 | |
| 172 | header.m_trieSize = base::asserted_cast<uint32_t>(writer.Pos() - header.m_trieOffset); |
| 173 | |
| 174 | bytesWritten = writer.Pos(); |
| 175 | coding::WritePadding(writer, bytesWritten); |
| 176 | |
| 177 | header.m_pointsOffset = base::asserted_cast<uint32_t>(writer.Pos()); |
| 178 | |
| 179 | { |
| 180 | search::CentersTableBuilder builder; |
| 181 | |
| 182 | builder.SetGeometryParams(feature::DataHeader(container).GetBounds()); |
| 183 | for (size_t i = 0; i < valueMapping.size(); ++i) |
| 184 | builder.Put(base::asserted_cast<uint32_t>(i), valueMapping[i]); |
| 185 | |
| 186 | builder.Freeze(writer); |
| 187 | } |
no test coverage detected