From 967fc370a0f560dfe3fbd35786ddfd659f546587 Mon Sep 17 00:00:00 2001 From: Senthil Date: Tue, 15 Mar 2016 13:23:11 -0700 Subject: [PATCH] Update iterator and merge rid/non-rid assets --- src/corehost/cli/deps_format.cpp | 33 +++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/corehost/cli/deps_format.cpp b/src/corehost/cli/deps_format.cpp index c85db98b5..e013ba89f 100644 --- a/src/corehost/cli/deps_format.cpp +++ b/src/corehost/cli/deps_format.cpp @@ -139,9 +139,14 @@ bool deps_json_t::perform_rid_fallback(rid_specific_assets_t* portable_assets, c assert(!matched_rid.empty()); for (auto iter = package.second.begin(); iter != package.second.end(); /* */) { - iter = (iter->first != matched_rid) - ? package.second.erase(iter) - : iter++; + if (iter->first != matched_rid) + { + iter = package.second.erase(iter); + } + else + { + ++iter; + } } } return true; @@ -221,13 +226,27 @@ bool deps_json_t::load_portable(const json_value& json, const pal::string_t& tar return false; } + std::vector merged; auto package_exists = [&rid_assets, &non_rid_assets](const pal::string_t& package) -> bool { return rid_assets.count(package) || non_rid_assets.count(package); }; - auto get_relpaths = [&rid_assets, &non_rid_assets](const pal::string_t& package, int type_index) -> const std::vector& { - return (rid_assets.count(package)) - ? rid_assets[package].begin()->second[type_index] - : non_rid_assets[package][type_index]; + auto get_relpaths = [&rid_assets, &non_rid_assets, &merged](const pal::string_t& package, int type_index) -> const std::vector& { + if (rid_assets.count(package) && non_rid_assets.count(package)) + { + const std::vector& rel1 = rid_assets[package].begin()->second[type_index]; + const std::vector& rel2 = non_rid_assets[package][type_index]; + merged.clear(); + merged.reserve(rel1.size() + rel2.size()); + merged.insert(merged.end(), rel1.begin(), rel1.end()); + merged.insert(merged.end(), rel2.begin(), rel2.end()); + return merged; + } + else + { + return rid_assets.count(package) + ? rid_assets[package].begin()->second[type_index] + : non_rid_assets[package][type_index]; + } }; reconcile_libraries_with_targets(json, package_exists, get_relpaths);