MCPcopy Create free account
hub / github.com/comaps/comaps / BuildPostcodePointsImpl

Function BuildPostcodePointsImpl

generator/postcode_points_builder.cpp:130–195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

128}
129
130bool 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 }

Callers 1

Calls 15

WritePaddingFunction · 0.85
GetUKPostcodesFunction · 0.85
GetUSPostcodesFunction · 0.85
ReverseFunction · 0.85
DataHeaderClass · 0.85
SetGeometryParamsMethod · 0.80
FileReaderClass · 0.70
PosMethod · 0.45
SerializeMethod · 0.45
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected