diff options
author | 2025-03-24 10:48:09 -0700 | |
---|---|---|
committer | 2025-03-24 10:48:09 -0700 | |
commit | f882c532b142f9a5b88676e2efebcc021b61a211 (patch) | |
tree | 807372016dc0155ba2f281f7343decfa69bdff3a /libs/androidfw/LoadedArsc.cpp | |
parent | 8c33f1cb2845e31409bc78cd9f81e976a4f43517 (diff) | |
parent | 984a84eed846b5c04265057075d574b440564168 (diff) |
Merge "[res] A bit more efficient locale collection" into main
Diffstat (limited to 'libs/androidfw/LoadedArsc.cpp')
-rw-r--r-- | libs/androidfw/LoadedArsc.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp index d9166a16cdea..7cebb6d79502 100644 --- a/libs/androidfw/LoadedArsc.cpp +++ b/libs/androidfw/LoadedArsc.cpp @@ -361,14 +361,18 @@ base::expected<std::monostate, IOError> LoadedPackage::CollectConfigurations( return {}; } -void LoadedPackage::CollectLocales(bool canonicalize, std::set<std::string>* out_locales) const { - char temp_locale[RESTABLE_MAX_LOCALE_LEN]; +void LoadedPackage::CollectLocales(bool canonicalize, + Locales* out_locales) const { for (const auto& type_spec : type_specs_) { for (const auto& type_entry : type_spec.second.type_entries) { if (type_entry.config.locale != 0) { + char temp_locale[RESTABLE_MAX_LOCALE_LEN]; type_entry.config.getBcp47Locale(temp_locale, canonicalize); - std::string locale(temp_locale); - out_locales->insert(std::move(locale)); + auto locale_sv = std::string_view(temp_locale); + if (auto it = out_locales->lower_bound(locale_sv); + it == out_locales->end() || *it != locale_sv) { + out_locales->emplace_hint(it, locale_sv); + } } } } |