| 323 | } |
| 324 | |
| 325 | MwmSubtreeAttrs LoadGroupImpl(size_t depth, json_t * node, CountryId const & parent, StoreInterface & store) |
| 326 | { |
| 327 | CountryId id; |
| 328 | FromJSONObject(node, "id", id); |
| 329 | |
| 330 | vector<string> countryNameSynonyms; |
| 331 | FromJSONObjectOptionalField(node, "country_name_synonyms", countryNameSynonyms); |
| 332 | for (auto const & synonym : countryNameSynonyms) |
| 333 | store.InsertCountryNameSynonym(id, synonym); |
| 334 | |
| 335 | vector<string> affiliations; |
| 336 | FromJSONObjectOptionalField(node, "affiliations", affiliations); |
| 337 | for (auto const & affilationValue : affiliations) |
| 338 | store.InsertAffiliation(id, affilationValue); |
| 339 | |
| 340 | uint64_t geoObjectId = 0; |
| 341 | FromJSONObjectOptionalField(node, "top_city_geo_id", geoObjectId); |
| 342 | if (geoObjectId != 0) |
| 343 | store.InsertMwmTopCityGeoId(id, geoObjectId); |
| 344 | |
| 345 | vector<uint64_t> topCountryIds; |
| 346 | FromJSONObjectOptionalField(node, "top_countries_geo_ids", topCountryIds); |
| 347 | if (!topCountryIds.empty()) |
| 348 | store.InsertTopCountryGeoIds(id, topCountryIds); |
| 349 | |
| 350 | int nodeSize; |
| 351 | FromJSONObjectOptionalField(node, "s", nodeSize); |
| 352 | ASSERT_LESS_OR_EQUAL(0, nodeSize, ()); |
| 353 | |
| 354 | string nodeHash; |
| 355 | FromJSONObjectOptionalField(node, "sha1_base64", nodeHash); |
| 356 | |
| 357 | // We expect that mwm and routing files should be less than 2GB. |
| 358 | Country * addedNode = store.InsertToCountryTree(id, nodeSize, nodeHash, depth, parent); |
| 359 | |
| 360 | MwmCounter mwmCounter = 0; |
| 361 | MwmSize mwmSize = 0; |
| 362 | vector<json_t *> children; |
| 363 | FromJSONObjectOptionalField(node, "g", children); |
| 364 | if (children.empty()) |
| 365 | { |
| 366 | mwmCounter = 1; // It's a leaf. Any leaf contains one mwm. |
| 367 | mwmSize = nodeSize; |
| 368 | } |
| 369 | else |
| 370 | { |
| 371 | for (json_t * child : children) |
| 372 | { |
| 373 | MwmSubtreeAttrs const childAttr = LoadGroupImpl(depth + 1, child, id, store); |
| 374 | mwmCounter += childAttr.first; |
| 375 | mwmSize += childAttr.second; |
| 376 | } |
| 377 | } |
| 378 | |
| 379 | if (addedNode != nullptr) |
| 380 | addedNode->SetSubtreeAttrs(mwmCounter, mwmSize); |
| 381 | |
| 382 | return make_pair(mwmCounter, mwmSize); |
no test coverage detected