| 463 | } |
| 464 | |
| 465 | void Design::orderPackages() { |
| 466 | if (m_orderedPackageNames.empty()) return; |
| 467 | m_orderedPackageDefinitions.resize(m_orderedPackageNames.size()); |
| 468 | uint32_t index = 0; |
| 469 | typedef std::map<std::string, int32_t> MultiDefCount; |
| 470 | MultiDefCount multiDefCount; |
| 471 | for (const auto& packageName : m_orderedPackageNames) { |
| 472 | for (uint32_t i = 0; i < m_packageDefinitions.size(); i++) { |
| 473 | PackageNamePackageDefinitionMultiMap::iterator pos = |
| 474 | m_packageDefinitions.begin(); |
| 475 | std::advance(pos, i); |
| 476 | std::pair<const std::string, Package*>* name_pack; |
| 477 | name_pack = &(*pos); |
| 478 | |
| 479 | if (packageName == name_pack->first) { |
| 480 | MultiDefCount::iterator itr = multiDefCount.find(packageName); |
| 481 | if (itr == multiDefCount.end()) { |
| 482 | multiDefCount.emplace(packageName, 1); |
| 483 | } else { |
| 484 | int32_t level = (*itr).second; |
| 485 | (*itr).second++; |
| 486 | pos = m_packageDefinitions.begin(); |
| 487 | std::advance(pos, i + level); |
| 488 | name_pack = &(*pos); |
| 489 | } |
| 490 | m_orderedPackageDefinitions[index] = name_pack->second; |
| 491 | index++; |
| 492 | break; |
| 493 | } |
| 494 | } |
| 495 | } |
| 496 | } |
| 497 | |
| 498 | Package* Design::addPackageDefinition(std::string_view packageName, |
| 499 | Package* package) { |