| 217 | /////////////////////////////////////////////////////////////////////////////////////////////////// |
| 218 | |
| 219 | bool GenerateIntermediateData(feature::GenerateInfo & info) |
| 220 | { |
| 221 | auto nodes = cache::CreatePointStorageWriter(info.m_nodeStorageType, info.GetCacheFileName(NODES_FILE)); |
| 222 | cache::IntermediateDataWriter cache(*nodes, info); |
| 223 | TownsDumper towns; |
| 224 | SourceReader reader = info.m_osmFileName.empty() ? SourceReader() : SourceReader(info.m_osmFileName); |
| 225 | |
| 226 | LOG(LINFO, ("Data source:", info.m_osmFileName)); |
| 227 | |
| 228 | auto const processor = [&](OsmElement && element) |
| 229 | { |
| 230 | towns.CheckElement(element); |
| 231 | AddElementToCache(cache, std::move(element)); |
| 232 | }; |
| 233 | |
| 234 | switch (info.m_osmFileType) |
| 235 | { |
| 236 | case feature::GenerateInfo::OsmSourceType::XML: ProcessOsmElementsFromXML(reader, processor); break; |
| 237 | case feature::GenerateInfo::OsmSourceType::O5M: ProcessOsmElementsFromO5M(reader, processor); break; |
| 238 | } |
| 239 | |
| 240 | cache.SaveIndex(); |
| 241 | towns.Dump(info.GetIntermediateFileName(TOWNS_FILE)); |
| 242 | LOG(LINFO, ("Added points count =", nodes->GetNumProcessedPoints())); |
| 243 | return true; |
| 244 | } |
| 245 | } // namespace generator |