src: avoid copy by using std::views::keys · nodejs/node@9e9ac3c
@@ -88,16 +88,6 @@ Local<String> BuiltinLoader::GetConfigString(Isolate* isolate) {
8888return config_.ToStringChecked(isolate);
8989}
909091-std::vector<std::string_view> BuiltinLoader::GetBuiltinIds() const {
92- std::vector<std::string_view> ids;
93-auto source = source_.read();
94- ids.reserve(source->size());
95-for (auto const& x : *source) {
96- ids.emplace_back(x.first);
97- }
98-return ids;
99-}
100-10191BuiltinLoader::BuiltinCategories BuiltinLoader::GetBuiltinCategories() const {
10292 BuiltinCategories builtin_categories;
10393@@ -515,26 +505,25 @@ bool BuiltinLoader::CompileAllBuiltinsAndCopyCodeCache(
515505 Local<Context> context,
516506const std::vector<std::string>& eager_builtins,
517507 std::vector<CodeCacheInfo>* out) {
518-std::vector<std::string_view> ids = GetBuiltinIds();
508+auto ids = GetBuiltinIds();
519509bool all_succeeded = true;
520- std::string v8_tools_prefix = "internal/deps/v8/tools/";
521- std::string primordial_prefix = "internal/per_context/";
522- std::string bootstrap_prefix = "internal/bootstrap/";
523- std::string main_prefix = "internal/main/";
524- to_eager_compile_ = std::unordered_set<std::string>(eager_builtins.begin(),
525- eager_builtins.end());
510+constexpr std::string_view v8_tools_prefix = "internal/deps/v8/tools/";
511+constexpr std::string_view primordial_prefix = "internal/per_context/";
512+constexpr std::string_view bootstrap_prefix = "internal/bootstrap/";
513+constexpr std::string_view main_prefix = "internal/main/";
514+ to_eager_compile_ =
515+std::unordered_set(eager_builtins.begin(), eager_builtins.end());
526516527517for (const auto& id : ids) {
528-if (id.compare(0, v8_tools_prefix.size(), v8_tools_prefix) == 0) {
518+if (id.starts_with(v8_tools_prefix)) {
529519// No need to generate code cache for v8 scripts.
530520continue;
531521 }
532522533523// Eagerly compile primordials/boostrap/main scripts during code cache
534524// generation.
535-if (id.compare(0, primordial_prefix.size(), primordial_prefix) == 0 ||
536- id.compare(0, bootstrap_prefix.size(), bootstrap_prefix) == 0 ||
537- id.compare(0, main_prefix.size(), main_prefix) == 0) {
525+if (id.starts_with(primordial_prefix) || id.starts_with(bootstrap_prefix) ||
526+ id.starts_with(main_prefix)) {
538527 to_eager_compile_.emplace(id);
539528 }
540529@@ -554,8 +543,8 @@ bool BuiltinLoader::CompileAllBuiltinsAndCopyCodeCache(
554543 }
555544556545 RwLock::ScopedReadLock lock(code_cache_->mutex);
557-for (auto const& item : code_cache_->map) {
558- out->push_back({item.first, item.second});
546+for (const auto& [id, data] : code_cache_->map) {
547+ out->push_back({id, data});
559548 }
560549return all_succeeded;
561550}
@@ -564,8 +553,8 @@ void BuiltinLoader::RefreshCodeCache(const std::vector<CodeCacheInfo>& in) {
564553 RwLock::ScopedLock lock(code_cache_->mutex);
565554 code_cache_->map.reserve(in.size());
566555DCHECK(code_cache_->map.empty());
567-for (auto const& item : in) {
568-auto result = code_cache_->map.emplace(item.id, item.data);
556+for (auto const& [id, data] : in) {
557+auto result = code_cache_->map.emplace(id, data);
569558USE(result.second);
570559DCHECK(result.second);
571560 }
@@ -665,7 +654,7 @@ void BuiltinLoader::BuiltinIdsGetter(Local<Name> property,
665654 Environment* env = Environment::GetCurrent(info);
666655 Isolate* isolate = env->isolate();
667656668-std::vector<std::string_view> ids = env->builtin_loader()->GetBuiltinIds();
657+auto ids = env->builtin_loader()->GetBuiltinIds();
669658 info.GetReturnValue().Set(
670659ToV8Value(isolate->GetCurrentContext(), ids).ToLocalChecked());
671660}