summaryrefslogtreecommitdiff
path: root/libs/androidfw/LoadedArsc.cpp
diff options
context:
space:
mode:
author Yurii Zubrytskyi <zyy@google.com> 2025-03-24 10:48:09 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-24 10:48:09 -0700
commitf882c532b142f9a5b88676e2efebcc021b61a211 (patch)
tree807372016dc0155ba2f281f7343decfa69bdff3a /libs/androidfw/LoadedArsc.cpp
parent8c33f1cb2845e31409bc78cd9f81e976a4f43517 (diff)
parent984a84eed846b5c04265057075d574b440564168 (diff)
Merge "[res] A bit more efficient locale collection" into main
Diffstat (limited to 'libs/androidfw/LoadedArsc.cpp')
-rw-r--r--libs/androidfw/LoadedArsc.cpp12
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);
+ }
}
}
}