From 59e6b15f513cc998ce13e9e49e2a6a3ace445ebb Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 15 Mar 2018 21:05:06 +0300 Subject: LIST<> iterators: - new method LIST::removeItem added to save a pointer to removed record; - code cleaning related to the fact that LIST::remove() shall be the last operation inside an iterator, because otherwise the reference to it will point to a record next to deleted one; - a few remaining cycles converted to iterators --- src/mir_app/src/extraicons.cpp | 11 +++++------ src/mir_app/src/hotkey_opts.cpp | 2 +- src/mir_app/src/hotkeys.cpp | 4 ++-- src/mir_app/src/icolib.cpp | 8 +++----- src/mir_app/src/meta_services.cpp | 2 +- src/mir_app/src/newplugins.cpp | 2 +- src/mir_app/src/options.cpp | 9 +++++---- src/mir_app/src/proto_accs.cpp | 2 +- src/mir_app/src/srmm_toolbar.cpp | 2 +- 9 files changed, 20 insertions(+), 22 deletions(-) (limited to 'src/mir_app') diff --git a/src/mir_app/src/extraicons.cpp b/src/mir_app/src/extraicons.cpp index 937b5e61a8..6428fc4b11 100644 --- a/src/mir_app/src/extraicons.cpp +++ b/src/mir_app/src/extraicons.cpp @@ -196,13 +196,12 @@ MIR_APP_DLL(void) KillModuleExtraIcons(int _hLang) { LIST arDeleted(1); - for (int i = registeredExtraIcons.getCount() - 1; i >= 0; i--) { - BaseExtraIcon *p = registeredExtraIcons[i]; - if (p->m_hLangpack == _hLang) { - registeredExtraIcons.remove(i); - arDeleted.insert(p); + auto T = registeredExtraIcons.rev_iter(); + for (auto &it : T) + if (it->m_hLangpack == _hLang) { + arDeleted.insert(it); + registeredExtraIcons.remove(T.indexOf(&it)); } - } if (arDeleted.getCount() == 0) return; diff --git a/src/mir_app/src/hotkey_opts.cpp b/src/mir_app/src/hotkey_opts.cpp index 80d30e2531..5b3c7dc21c 100644 --- a/src/mir_app/src/hotkey_opts.cpp +++ b/src/mir_app/src/hotkey_opts.cpp @@ -758,8 +758,8 @@ static INT_PTR CALLBACK sttOptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, auto T = hotkeys.rev_iter(); for (auto &p : T) { if (p->OptNew && p->OptDeleted || p->rootHotkey && !p->OptHotkey || (lpnmhdr->code == PSN_APPLY) && p->OptDeleted || (lpnmhdr->code == PSN_RESET) && p->OptNew) { - hotkeys.remove(T.indexOf(&p)); FreeHotkey(p); + hotkeys.remove(T.indexOf(&p)); } } } diff --git a/src/mir_app/src/hotkeys.cpp b/src/mir_app/src/hotkeys.cpp index 4c3eabbcdf..e6f74830aa 100644 --- a/src/mir_app/src/hotkeys.cpp +++ b/src/mir_app/src/hotkeys.cpp @@ -223,8 +223,8 @@ MIR_APP_DLL(int) Hotkey_Unregister(const char *pszName) auto T = hotkeys.rev_iter(); for (auto &it : T) if (it->UnregisterHotkey) { - hotkeys.remove(T.indexOf(&it)); FreeHotkey(it); + hotkeys.remove(T.indexOf(&it)); } return 0; @@ -291,8 +291,8 @@ MIR_APP_DLL(void) KillModuleHotkeys(int _hLang) auto T = hotkeys.rev_iter(); for (auto &it : T) if (it->hLangpack == _hLang) { - hotkeys.remove(T.indexOf(&it)); FreeHotkey(it); + hotkeys.remove(T.indexOf(&it)); } } diff --git a/src/mir_app/src/icolib.cpp b/src/mir_app/src/icolib.cpp index 131df93618..b6c5405e81 100644 --- a/src/mir_app/src/icolib.cpp +++ b/src/mir_app/src/icolib.cpp @@ -601,8 +601,8 @@ MIR_APP_DLL(void) KillModuleIcons(int _hLang) auto T = iconList.rev_iter(); for (auto &it : T) if (it->hLangpack == _hLang) { - iconList.remove(T.indexOf(&it)); delete it; + iconList.remove(T.indexOf(&it)); } } @@ -810,11 +810,9 @@ void UnloadIcoLibModule(void) delete p; iconSourceList.destroy(); - while (iconSourceFileList.getCount() > 0) { - IconSourceFile *p = iconSourceFileList[0]; - iconSourceFileList.remove(0); + for (auto &p : iconSourceFileList) mir_free(p); - } + iconSourceFileList.destroy(); for (auto &p : sectionList) delete p; diff --git a/src/mir_app/src/meta_services.cpp b/src/mir_app/src/meta_services.cpp index f304f9452b..604b3064dc 100644 --- a/src/mir_app/src/meta_services.cpp +++ b/src/mir_app/src/meta_services.cpp @@ -557,7 +557,7 @@ static int Meta_MessageWindowEvent(WPARAM, LPARAM lParam) else if (mwed->uType == MSG_WINDOW_EVT_CLOSING) for (auto &p : arMetaWindows) if (p->m_hWnd == mwed->hwndWindow) { - arMetaWindows.remove(p); + arMetaWindows.removeItem(&p); break; } diff --git a/src/mir_app/src/newplugins.cpp b/src/mir_app/src/newplugins.cpp index b9ea1e7080..3dbd984dfa 100644 --- a/src/mir_app/src/newplugins.cpp +++ b/src/mir_app/src/newplugins.cpp @@ -728,7 +728,7 @@ void EnsureCheckerLoaded(bool bEnable) Plugin_Uninit(p); else { p->pclass |= PCLASS_LOADED; - servicePlugins.remove(p); + servicePlugins.removeItem(&p); } } } diff --git a/src/mir_app/src/options.cpp b/src/mir_app/src/options.cpp index a9fe26c40a..ad7876ecca 100644 --- a/src/mir_app/src/options.cpp +++ b/src/mir_app/src/options.cpp @@ -1108,16 +1108,17 @@ public: void KillModule(int _hLang) { - for (int i = m_arOpd.getCount() - 1; i >= 0; i--) { - OptionsPageData *opd = m_arOpd[i]; + auto T = m_arOpd.rev_iter(); + for (auto &opd : T) { if (opd->hLangpack != _hLang) continue; - if (m_currentPage > i) + int idx = T.indexOf(&opd); + if (m_currentPage > idx) m_currentPage--; - m_arOpd.remove(i); delete opd; + m_arOpd.remove(idx); m_timerRebuild.Start(50); } } diff --git a/src/mir_app/src/proto_accs.cpp b/src/mir_app/src/proto_accs.cpp index 187a4212b1..6132d25bcc 100644 --- a/src/mir_app/src/proto_accs.cpp +++ b/src/mir_app/src/proto_accs.cpp @@ -404,8 +404,8 @@ void UnloadAccountsModule() auto T = accounts.rev_iter(); for (auto &it : T) { - accounts.remove(T.indexOf(&it)); UnloadAccount(it, false, false); + accounts.remove(T.indexOf(&it)); } accounts.destroy(); diff --git a/src/mir_app/src/srmm_toolbar.cpp b/src/mir_app/src/srmm_toolbar.cpp index b0ba74df6d..a92343c2da 100644 --- a/src/mir_app/src/srmm_toolbar.cpp +++ b/src/mir_app/src/srmm_toolbar.cpp @@ -786,8 +786,8 @@ void KillModuleToolbarIcons(int _hLang) auto T = arButtonsList.rev_iter(); for (auto &cbd : T) if (cbd->m_hLangpack == _hLang) { - arButtonsList.remove(T.indexOf(&cbd)); delete cbd; + arButtonsList.remove(T.indexOf(&cbd)); } } -- cgit v1.2.3