diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 6c0d24a2b00..5e3e3569442 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1410,8 +1410,7 @@ void ProjectSettings::load_scene_groups_cache() { Ref cf; cf.instantiate(); if (cf->load(get_scene_groups_cache_path()) == OK) { - List scene_paths; - cf->get_sections(&scene_paths); + Vector scene_paths = cf->get_sections(); for (const String &E : scene_paths) { Array scene_groups = cf->get_value(E, "groups", Array()); HashSet cache; diff --git a/core/extension/gdextension_library_loader.cpp b/core/extension/gdextension_library_loader.cpp index 1d6be752ce2..3eb7f59776a 100644 --- a/core/extension/gdextension_library_loader.cpp +++ b/core/extension/gdextension_library_loader.cpp @@ -38,8 +38,7 @@ Vector GDExtensionLibraryLoader::find_extension_dependencies(const String &p_path, Ref p_config, std::function p_has_feature) { Vector dependencies_shared_objects; if (p_config->has_section("dependencies")) { - List config_dependencies; - p_config->get_section_keys("dependencies", &config_dependencies); + Vector config_dependencies = p_config->get_section_keys("dependencies"); for (const String &dependency : config_dependencies) { Vector dependency_tags = dependency.split("."); @@ -73,8 +72,7 @@ Vector GDExtensionLibraryLoader::find_extension_dependencies(const String GDExtensionLibraryLoader::find_extension_library(const String &p_path, Ref p_config, std::function p_has_feature, PackedStringArray *r_tags) { // First, check the explicit libraries. if (p_config->has_section("libraries")) { - List libraries; - p_config->get_section_keys("libraries", &libraries); + Vector libraries = p_config->get_section_keys("libraries"); // Iterate the libraries, finding the best matching tags. String best_library_path; @@ -378,8 +376,7 @@ Error GDExtensionLibraryLoader::parse_gdextension_file(const String &p_path) { // Handle icons if any are specified. if (config->has_section("icons")) { - List keys; - config->get_section_keys("icons", &keys); + Vector keys = config->get_section_keys("icons"); for (const String &key : keys) { String icon_path = config->get_value("icons", key); if (icon_path.is_relative_path()) { diff --git a/core/io/config_file.cpp b/core/io/config_file.cpp index 64c9769b45b..793287079d2 100644 --- a/core/io/config_file.cpp +++ b/core/io/config_file.cpp @@ -34,32 +34,6 @@ #include "core/string/string_builder.h" #include "core/variant/variant_parser.h" -PackedStringArray ConfigFile::_get_sections() const { - List s; - get_sections(&s); - PackedStringArray arr; - arr.resize(s.size()); - int idx = 0; - for (const String &E : s) { - arr.set(idx++, E); - } - - return arr; -} - -PackedStringArray ConfigFile::_get_section_keys(const String &p_section) const { - List s; - get_section_keys(p_section, &s); - PackedStringArray arr; - arr.resize(s.size()); - int idx = 0; - for (const String &E : s) { - arr.set(idx++, E); - } - - return arr; -} - void ConfigFile::set_value(const String &p_section, const String &p_key, const Variant &p_value) { if (p_value.get_type() == Variant::NIL) { // Erase key. if (!values.has(p_section)) { @@ -101,18 +75,33 @@ bool ConfigFile::has_section_key(const String &p_section, const String &p_key) c return values[p_section].has(p_key); } -void ConfigFile::get_sections(List *r_sections) const { +Vector ConfigFile::get_sections() const { + Vector sections; + sections.resize(values.size()); + + int i = 0; + String *sections_write = sections.ptrw(); for (const KeyValue> &E : values) { - r_sections->push_back(E.key); + sections_write[i++] = E.key; } + + return sections; } -void ConfigFile::get_section_keys(const String &p_section, List *r_keys) const { - ERR_FAIL_COND_MSG(!values.has(p_section), vformat("Cannot get keys from nonexistent section \"%s\".", p_section)); +Vector ConfigFile::get_section_keys(const String &p_section) const { + Vector keys; + ERR_FAIL_COND_V_MSG(!values.has(p_section), keys, vformat("Cannot get keys from nonexistent section \"%s\".", p_section)); - for (const KeyValue &E : values[p_section]) { - r_keys->push_back(E.key); + const HashMap &keys_map = values[p_section]; + keys.resize(keys_map.size()); + + int i = 0; + String *keys_write = keys.ptrw(); + for (const KeyValue &E : keys_map) { + keys_write[i++] = E.key; } + + return keys; } void ConfigFile::erase_section(const String &p_section) { @@ -325,8 +314,8 @@ void ConfigFile::_bind_methods() { ClassDB::bind_method(D_METHOD("has_section", "section"), &ConfigFile::has_section); ClassDB::bind_method(D_METHOD("has_section_key", "section", "key"), &ConfigFile::has_section_key); - ClassDB::bind_method(D_METHOD("get_sections"), &ConfigFile::_get_sections); - ClassDB::bind_method(D_METHOD("get_section_keys", "section"), &ConfigFile::_get_section_keys); + ClassDB::bind_method(D_METHOD("get_sections"), &ConfigFile::get_sections); + ClassDB::bind_method(D_METHOD("get_section_keys", "section"), &ConfigFile::get_section_keys); ClassDB::bind_method(D_METHOD("erase_section", "section"), &ConfigFile::erase_section); ClassDB::bind_method(D_METHOD("erase_section_key", "section", "key"), &ConfigFile::erase_section_key); diff --git a/core/io/config_file.h b/core/io/config_file.h index 01a860becf5..518361f4a7f 100644 --- a/core/io/config_file.h +++ b/core/io/config_file.h @@ -40,8 +40,6 @@ class ConfigFile : public RefCounted { HashMap> values; - PackedStringArray _get_sections() const; - PackedStringArray _get_section_keys(const String &p_section) const; Error _internal_load(const String &p_path, Ref f); Error _internal_save(Ref file); @@ -57,8 +55,8 @@ public: bool has_section(const String &p_section) const; bool has_section_key(const String &p_section, const String &p_key) const; - void get_sections(List *r_sections) const; - void get_section_keys(const String &p_section, List *r_keys) const; + Vector get_sections() const; + Vector get_section_keys(const String &p_section) const; void erase_section(const String &p_section); void erase_section_key(const String &p_section, const String &p_key); diff --git a/editor/debugger/editor_file_server.cpp b/editor/debugger/editor_file_server.cpp index 999bb68ff6b..5fc5d734837 100644 --- a/editor/debugger/editor_file_server.cpp +++ b/editor/debugger/editor_file_server.cpp @@ -69,8 +69,7 @@ void EditorFileServer::_scan_files_changed(EditorFileSystemDirectory *efd, const continue; } - List remaps; - cf->get_section_keys("remap", &remaps); + Vector remaps = cf->get_section_keys("remap"); for (const String &remap : remaps) { if (remap == "path") { diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 066d8e0451b..5f48d34f6c5 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -2585,8 +2585,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector } if (config->has_section("params")) { - List sk; - config->get_section_keys("params", &sk); + Vector sk = config->get_section_keys("params"); for (const String ¶m : sk) { Variant value = config->get_value("params", param); //override with whatever is in file @@ -2769,8 +2768,7 @@ Error EditorFileSystem::_reimport_file(const String &p_file, const HashMapload(p_file + ".import"); if (err == OK) { if (cf->has_section("params")) { - List sk; - cf->get_section_keys("params", &sk); + Vector sk = cf->get_section_keys("params"); for (const String &E : sk) { if (!params.has(E)) { params[E] = cf->get_value("params", E); @@ -3408,8 +3406,7 @@ void EditorFileSystem::_move_group_files(EditorFileSystemDirectory *efd, const S config->set_value("remap", "group_file", p_new_location); } - List sk; - config->get_section_keys("params", &sk); + Vector sk = config->get_section_keys("params"); for (const String ¶m : sk) { //not very clean, but should work String value = config->get_value("params", param); diff --git a/editor/editor_layouts_dialog.cpp b/editor/editor_layouts_dialog.cpp index 0ba5fb1f944..fb7148eaa56 100644 --- a/editor/editor_layouts_dialog.cpp +++ b/editor/editor_layouts_dialog.cpp @@ -95,8 +95,7 @@ void EditorLayoutsDialog::_post_popup() { return; } - List layouts; - config.ptr()->get_sections(&layouts); + Vector layouts = config->get_sections(); for (const String &E : layouts) { layout_names->add_item(E); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index a3a152ab344..ae8f132b82f 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -1649,8 +1649,7 @@ void EditorNode::_load_editor_plugin_states_from_config(const Ref &p return; } - List esl; - p_config_file->get_section_keys("editor_states", &esl); + Vector esl = p_config_file->get_section_keys("editor_states"); Dictionary md; for (const String &E : esl) { @@ -2379,8 +2378,7 @@ void EditorNode::_dialog_action(String p_file) { } // Erase key values. - List keys; - config->get_section_keys(p_file, &keys); + Vector keys = config->get_section_keys(p_file); for (const String &key : keys) { config->set_value(p_file, key, Variant()); } @@ -5778,8 +5776,7 @@ void EditorNode::_update_layouts_menu() { return; // No config. } - List layouts; - config.ptr()->get_sections(&layouts); + Vector layouts = config->get_sections(); for (const String &layout : layouts) { if (layout == TTR("Default")) { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 82d96c014d8..547d4664828 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -1072,8 +1072,7 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { } if (p_extra_config->has_section("presets")) { - List keys; - p_extra_config->get_section_keys("presets", &keys); + Vector keys = p_extra_config->get_section_keys("presets"); for (const String &key : keys) { Variant val = p_extra_config->get_value("presets", key); @@ -1660,8 +1659,7 @@ void EditorSettings::load_favorites_and_recent_dirs() { Ref cf; cf.instantiate(); if (cf->load(favorite_properties_file) == OK) { - List secs; - cf->get_sections(&secs); + Vector secs = cf->get_sections(); for (String &E : secs) { PackedStringArray properties = PackedStringArray(cf->get_value(E, "properties")); @@ -1730,8 +1728,7 @@ void EditorSettings::load_text_editor_theme() { return; } - List keys; - cf->get_section_keys("color_theme", &keys); + Vector keys = cf->get_section_keys("color_theme"); for (const String &key : keys) { String val = cf->get_value("color_theme", key); @@ -2150,8 +2147,7 @@ void EditorSettings::get_argument_options(const StringName &p_function, int p_id r_options->push_back(E.key.quote()); } } else if (pf == "get_project_metadata" && project_metadata.is_valid()) { - List sections; - project_metadata->get_sections(§ions); + Vector sections = project_metadata->get_sections(); for (const String §ion : sections) { r_options->push_back(section.quote()); } diff --git a/editor/export/editor_export.cpp b/editor/export/editor_export.cpp index 07729680775..9ea76b32a3b 100644 --- a/editor/export/editor_export.cpp +++ b/editor/export/editor_export.cpp @@ -330,8 +330,7 @@ void EditorExport::load_config() { String option_section = "preset." + itos(index) + ".options"; - List options; - config->get_section_keys(option_section, &options); + Vector options = config->get_section_keys(option_section); for (const String &E : options) { Variant value = config->get_value(option_section, E); @@ -339,8 +338,7 @@ void EditorExport::load_config() { } if (credentials->has_section(option_section)) { - options.clear(); - credentials->get_section_keys(option_section, &options); + options = credentials->get_section_keys(option_section); for (const String &E : options) { // Drop values for secret properties that no longer exist, or during the next save they would end up in the regular config file. diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index c7310e90dff..d9defd8a932 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -1378,8 +1378,7 @@ Error EditorExportPlatform::export_project_files(const Ref & config->set_value("remap", "type", ResourceLoader::get_resource_type(export_path)); // Erase all Paths. - List keys; - config->get_section_keys("remap", &keys); + Vector keys = config->get_section_keys("remap"); for (const String &K : keys) { if (K.begins_with("path")) { config->erase_section_key("remap", K); @@ -1414,9 +1413,7 @@ Error EditorExportPlatform::export_project_files(const Ref & } } else { // File is imported and not customized, replace by what it imports. - List remaps; - config->get_section_keys("remap", &remaps); - + Vector remaps = config->get_section_keys("remap"); HashSet remap_features; for (const String &F : remaps) { diff --git a/editor/gui/editor_quick_open_dialog.cpp b/editor/gui/editor_quick_open_dialog.cpp index 108a19233d5..3d15cd2dd58 100644 --- a/editor/gui/editor_quick_open_dialog.cpp +++ b/editor/gui/editor_quick_open_dialog.cpp @@ -348,8 +348,7 @@ void QuickOpenResultContainer::init(const Vector &p_base_types) { file_type_icons.insert(SNAME("__default_icon"), get_editor_theme_icon(SNAME("Object"))); bool history_modified = false; - List history_keys; - history_file->get_section_keys("selected_history", &history_keys); + Vector history_keys = history_file->get_section_keys("selected_history"); for (const String &type : history_keys) { const StringName type_name = type; const PackedStringArray paths = history_file->get_value("selected_history", type); diff --git a/editor/import/3d/scene_import_settings.cpp b/editor/import/3d/scene_import_settings.cpp index b582866320f..be0ed8b68ae 100644 --- a/editor/import/3d/scene_import_settings.cpp +++ b/editor/import/3d/scene_import_settings.cpp @@ -755,8 +755,7 @@ void SceneImportSettingsDialog::open_settings(const String &p_path, const String config.instantiate(); Error err = config->load(p_path + ".import"); if (err == OK) { - List keys; - config->get_section_keys("params", &keys); + Vector keys = config->get_section_keys("params"); for (const String &E : keys) { Variant value = config->get_value("params", E); if (E == "_subresources") { diff --git a/editor/import/audio_stream_import_settings.cpp b/editor/import/audio_stream_import_settings.cpp index 3c6e2d42793..373cad126c3 100644 --- a/editor/import/audio_stream_import_settings.cpp +++ b/editor/import/audio_stream_import_settings.cpp @@ -440,8 +440,7 @@ void AudioStreamImportSettingsDialog::edit(const String &p_path, const String &p loop_offset->set_value(config_file->get_value("params", "loop_offset", 0)); bar_beats_edit->set_value(config_file->get_value("params", "bar_beats", 4)); - List keys; - config_file->get_section_keys("params", &keys); + Vector keys = config_file->get_section_keys("params"); for (const String &K : keys) { params[K] = config_file->get_value("params", K); } diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp index c7a60c26219..e5a43974b92 100644 --- a/editor/import/dynamic_font_import_settings.cpp +++ b/editor/import/dynamic_font_import_settings.cpp @@ -1201,8 +1201,7 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { Error err = config->load(p_path + ".import"); print_verbose("Loading import settings:"); if (err == OK) { - List keys; - config->get_section_keys("params", &keys); + Vector keys = config->get_section_keys("params"); for (const String &key : keys) { print_verbose(String(" ") + key + " == " + String(config->get_value("params", key))); if (key == "preload") { diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 706e0e10d2c..ff78487adbf 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -190,8 +190,7 @@ void ImportDock::_update_options(const String &p_path, const Ref &p_ HashMap import_options; if (p_config.is_valid() && p_config->has_section("params")) { - List section_keys; - p_config->get_section_keys("params", §ion_keys); + Vector section_keys = p_config->get_section_keys("params"); for (const String §ion_key : section_keys) { import_options[section_key] = p_config->get_value("params", section_key); } @@ -258,8 +257,7 @@ void ImportDock::set_edit_multiple_paths(const Vector &p_paths) { continue; } - List keys; - config->get_section_keys("params", &keys); + Vector keys = config->get_section_keys("params"); for (const String &E : keys) { if (!value_frequency.has(E)) { diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index da31447b561..ee6c5143773 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -889,8 +889,7 @@ Vector AnimationLibraryEditor::_load_mixer_libs_folding() { //The scene/mixer combination is no longer valid and we'll try to recover uint64_t current_mixer_id = uint64_t(mixer->get_instance_id()); String current_mixer_signature = _get_mixer_signature(); - List sections; - config->get_sections(§ions); + Vector sections = config->get_sections(); for (const String §ion : sections) { Variant mixer_id = config->get_value(section, "mixer"); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 8064de79207..0e6b2d9f335 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -569,8 +569,7 @@ void ScriptEditor::_clear_breakpoints() { } // Clear from closed scripts. - List cached_editors; - script_editor_cache->get_sections(&cached_editors); + Vector cached_editors = script_editor_cache->get_sections(); for (const String &E : cached_editors) { Array breakpoints = _get_cached_breakpoints_for_script(E); for (int breakpoint : breakpoints) { @@ -1872,8 +1871,7 @@ Vector ScriptEditor::_get_breakpoints() { } // Load breakpoints that are in closed scripts. - List cached_editors; - script_editor_cache->get_sections(&cached_editors); + Vector cached_editors = script_editor_cache->get_sections(); for (const String &E : cached_editors) { if (loaded_scripts.has(E)) { continue; @@ -1913,8 +1911,7 @@ void ScriptEditor::get_breakpoints(List *p_breakpoints) { } // Load breakpoints that are in closed scripts. - List cached_editors; - script_editor_cache->get_sections(&cached_editors); + Vector cached_editors = script_editor_cache->get_sections(); for (const String &E : cached_editors) { if (loaded_scripts.has(E)) { continue; @@ -3547,8 +3544,7 @@ void ScriptEditor::set_window_layout(Ref p_layout) { // Remove any deleted editors that have been removed between launches. // and if a Script, register breakpoints with the debugger. - List cached_editors; - script_editor_cache->get_sections(&cached_editors); + Vector cached_editors = script_editor_cache->get_sections(); for (const String &E : cached_editors) { if (loaded_scripts.has(E)) { continue; diff --git a/editor/project_manager/project_list.cpp b/editor/project_manager/project_list.cpp index ee889ea337d..263da08eeff 100644 --- a/editor/project_manager/project_list.cpp +++ b/editor/project_manager/project_list.cpp @@ -862,9 +862,8 @@ void ProjectList::find_projects_multiple(const PackedStringArray &p_paths) { } void ProjectList::load_project_list() { - List sections; _config.load(_config_path); - _config.get_sections(§ions); + Vector sections = _config.get_sections(); for (const String &path : sections) { bool favorite = _config.get_value(path, "favorite", false); diff --git a/platform/ios/export/godot_plugin_config.cpp b/platform/ios/export/godot_plugin_config.cpp index e3ae70152af..96938ff567e 100644 --- a/platform/ios/export/godot_plugin_config.cpp +++ b/platform/ios/export/godot_plugin_config.cpp @@ -209,8 +209,7 @@ PluginConfigIOS PluginConfigIOS::load_plugin_config(Ref config_file, } if (config_file->has_section(PluginConfigIOS::PLIST_SECTION)) { - List keys; - config_file->get_section_keys(PluginConfigIOS::PLIST_SECTION, &keys); + Vector keys = config_file->get_section_keys(PluginConfigIOS::PLIST_SECTION); for (const String &key : keys) { Vector key_components = key.split(":");