diff options
author | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-04-15 15:18:34 +0200 |
---|---|---|
committer | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-05-04 16:08:55 +0200 |
commit | 955d5affa857ec1f358c56da8fb1ff4ab6590704 (patch) | |
tree | b667ac9f6f62bff17ce032683c0eb09727660555 /platform | |
parent | 7ebc866418b075df58cbe4e31fcf8b0c3acd70a1 (diff) | |
download | redot-engine-955d5affa857ec1f358c56da8fb1ff4ab6590704.tar.gz |
Reduce and prevent unnecessary random-access to `List`
Random-access access to `List` when iterating is `O(n^2)` (`O(n)` when
accessing a single element)
* Removed subscript operator, in favor of a more explicit `get`
* Added conversion from `Iterator` to `ConstIterator`
* Remade existing operations into other solutions when applicable
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/export/export_plugin.cpp | 6 | ||||
-rw-r--r-- | platform/android/java_godot_wrapper.cpp | 5 | ||||
-rw-r--r-- | platform/ios/export/godot_plugin_config.cpp | 14 | ||||
-rw-r--r-- | platform/linuxbsd/wayland/wayland_thread.cpp | 2 | ||||
-rw-r--r-- | platform/web/os_web.cpp | 4 | ||||
-rw-r--r-- | platform/windows/display_server_windows.cpp | 4 | ||||
-rw-r--r-- | platform/windows/joypad_windows.cpp | 2 | ||||
-rw-r--r-- | platform/windows/joypad_windows.h | 2 |
8 files changed, 20 insertions, 19 deletions
diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index 3b1a534daf..30d57cade5 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -2974,11 +2974,11 @@ void EditorExportPlatformAndroid::_remove_copied_libs(String p_gdextension_libs_ String EditorExportPlatformAndroid::join_list(const List<String> &p_parts, const String &p_separator) { String ret; - for (int i = 0; i < p_parts.size(); ++i) { - if (i > 0) { + for (List<String>::ConstIterator itr = p_parts.begin(); itr != p_parts.end(); ++itr) { + if (itr != p_parts.begin()) { ret += p_separator; } - ret += p_parts[i]; + ret += *itr; } return ret; } diff --git a/platform/android/java_godot_wrapper.cpp b/platform/android/java_godot_wrapper.cpp index 0e766e7d56..6e7f5ef5a1 100644 --- a/platform/android/java_godot_wrapper.cpp +++ b/platform/android/java_godot_wrapper.cpp @@ -351,8 +351,9 @@ int GodotJavaWrapper::create_new_godot_instance(const List<String> &args) { JNIEnv *env = get_jni_env(); ERR_FAIL_NULL_V(env, 0); jobjectArray jargs = env->NewObjectArray(args.size(), env->FindClass("java/lang/String"), env->NewStringUTF("")); - for (int i = 0; i < args.size(); i++) { - jstring j_arg = env->NewStringUTF(args[i].utf8().get_data()); + int i = 0; + for (List<String>::ConstIterator itr = args.begin(); itr != args.end(); ++itr, ++i) { + jstring j_arg = env->NewStringUTF(itr->utf8().get_data()); env->SetObjectArrayElement(jargs, i, j_arg); env->DeleteLocalRef(j_arg); } diff --git a/platform/ios/export/godot_plugin_config.cpp b/platform/ios/export/godot_plugin_config.cpp index 86d5c7ef5b..90e40b7c42 100644 --- a/platform/ios/export/godot_plugin_config.cpp +++ b/platform/ios/export/godot_plugin_config.cpp @@ -212,8 +212,8 @@ PluginConfigIOS PluginConfigIOS::load_plugin_config(Ref<ConfigFile> config_file, List<String> keys; config_file->get_section_keys(PluginConfigIOS::PLIST_SECTION, &keys); - for (int i = 0; i < keys.size(); i++) { - Vector<String> key_components = keys[i].split(":"); + for (const String &key : keys) { + Vector<String> key_components = key.split(":"); String key_value = ""; PluginConfigIOS::PlistItemType key_type = PluginConfigIOS::PlistItemType::UNKNOWN; @@ -245,29 +245,29 @@ PluginConfigIOS PluginConfigIOS::load_plugin_config(Ref<ConfigFile> config_file, switch (key_type) { case PluginConfigIOS::PlistItemType::STRING: { - String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, keys[i], String()); + String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, key, String()); value = "<string>" + raw_value + "</string>"; } break; case PluginConfigIOS::PlistItemType::INTEGER: { - int raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, keys[i], 0); + int raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, key, 0); Dictionary value_dictionary; String value_format = "<integer>$value</integer>"; value_dictionary["value"] = raw_value; value = value_format.format(value_dictionary, "$_"); } break; case PluginConfigIOS::PlistItemType::BOOLEAN: - if (config_file->get_value(PluginConfigIOS::PLIST_SECTION, keys[i], false)) { + if (config_file->get_value(PluginConfigIOS::PLIST_SECTION, key, false)) { value = "<true/>"; } else { value = "<false/>"; } break; case PluginConfigIOS::PlistItemType::RAW: { - String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, keys[i], String()); + String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, key, String()); value = raw_value; } break; case PluginConfigIOS::PlistItemType::STRING_INPUT: { - String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, keys[i], String()); + String raw_value = config_file->get_value(PluginConfigIOS::PLIST_SECTION, key, String()); value = raw_value; } break; default: diff --git a/platform/linuxbsd/wayland/wayland_thread.cpp b/platform/linuxbsd/wayland/wayland_thread.cpp index 1701aa650d..aabf1abdda 100644 --- a/platform/linuxbsd/wayland/wayland_thread.cpp +++ b/platform/linuxbsd/wayland/wayland_thread.cpp @@ -3427,7 +3427,7 @@ bool WaylandThread::window_get_idle_inhibition(DisplayServer::WindowID p_window_ WaylandThread::ScreenData WaylandThread::screen_get_data(int p_screen) const { ERR_FAIL_INDEX_V(p_screen, registry.wl_outputs.size(), ScreenData()); - return wl_output_get_screen_state(registry.wl_outputs[p_screen])->data; + return wl_output_get_screen_state(registry.wl_outputs.get(p_screen))->data; } int WaylandThread::get_screen_count() const { diff --git a/platform/web/os_web.cpp b/platform/web/os_web.cpp index 6b6c9ddd63..ef8f90421b 100644 --- a/platform/web/os_web.cpp +++ b/platform/web/os_web.cpp @@ -276,8 +276,8 @@ OS_Web::OS_Web() { if (AudioDriverWeb::is_available()) { audio_drivers.push_back(memnew(AudioDriverWorklet)); } - for (int i = 0; i < audio_drivers.size(); i++) { - AudioDriverManager::add_driver(audio_drivers[i]); + for (AudioDriverWeb *audio_driver : audio_drivers) { + AudioDriverManager::add_driver(audio_driver); } idb_available = godot_js_os_fs_is_persistent(); diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index f101d85d58..90c3b8f9ef 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -2525,7 +2525,7 @@ Error DisplayServerWindows::dialog_show(String p_title, String p_description, Ve Char16String title = p_title.utf16(); Char16String message = p_description.utf16(); - List<Char16String> buttons; + LocalVector<Char16String> buttons; for (String s : p_buttons) { buttons.push_back(s.utf16()); } @@ -2533,7 +2533,7 @@ Error DisplayServerWindows::dialog_show(String p_title, String p_description, Ve config.pszWindowTitle = (LPCWSTR)(title.get_data()); config.pszContent = (LPCWSTR)(message.get_data()); - const int button_count = MIN(buttons.size(), 8); + const int button_count = MIN((int)buttons.size(), 8); config.cButtons = button_count; // No dynamic stack array size :( diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp index 60edb00dd2..a5f1629cf0 100644 --- a/platform/windows/joypad_windows.cpp +++ b/platform/windows/joypad_windows.cpp @@ -427,7 +427,7 @@ void JoypadWindows::process_joypads() { const LONG axes[] = { DIJOFS_X, DIJOFS_Y, DIJOFS_Z, DIJOFS_RX, DIJOFS_RY, DIJOFS_RZ, (LONG)DIJOFS_SLIDER(0), (LONG)DIJOFS_SLIDER(1) }; int values[] = { js.lX, js.lY, js.lZ, js.lRx, js.lRy, js.lRz, js.rglSlider[0], js.rglSlider[1] }; - for (int j = 0; j < joy->joy_axis.size(); j++) { + for (uint32_t j = 0; j < joy->joy_axis.size(); j++) { for (int k = 0; k < count; k++) { if (joy->joy_axis[j] == axes[k]) { input->joy_axis(joy->id, (JoyAxis)j, axis_correct(values[k])); diff --git a/platform/windows/joypad_windows.h b/platform/windows/joypad_windows.h index cfddbcc8dc..87c7af7657 100644 --- a/platform/windows/joypad_windows.h +++ b/platform/windows/joypad_windows.h @@ -77,7 +77,7 @@ private: DWORD last_pad; LPDIRECTINPUTDEVICE8 di_joy; - List<LONG> joy_axis; + LocalVector<LONG> joy_axis; GUID guid; dinput_gamepad() { |