From 0cbd8758d94b9e44fb5a15ad77c3784f306211dc Mon Sep 17 00:00:00 2001 From: Alex Alabuzhev Date: Sat, 27 Feb 2016 16:06:54 +0000 Subject: [PATCH] refactoring & renamings --- far/PluginA.cpp | 92 +++++++++++++----------- far/RegExp.cpp | 66 ++++++++--------- far/changelog | 8 ++- far/cmdline.cpp | 3 + far/codepage.cpp | 3 +- far/codepage_selection.cpp | 10 +-- far/config.cpp | 4 +- far/delete.cpp | 6 +- far/dialog.cpp | 6 +- far/dialog.hpp | 2 +- far/dirinfo.cpp | 56 +++++---------- far/dirinfo.hpp | 4 +- far/dizlist.cpp | 10 +-- far/editor.cpp | 15 ++-- far/editor.hpp | 2 +- far/execute.cpp | 8 +-- far/farwinapi.cpp | 3 + far/filefilter.cpp | 3 + far/filelist.cpp | 143 +++++++++++++++++++------------------ far/filelist.hpp | 2 +- far/filemasks.cpp | 6 +- far/fileowner.cpp | 1 + far/filestr.cpp | 2 +- far/fileview.cpp | 4 +- far/findfile.cpp | 22 +++--- far/flink.cpp | 44 ++++++------ far/fnparce.cpp | 1 + far/hilight.cpp | 1 + far/hotplug.cpp | 1 + far/keyboard.cpp | 4 +- far/main.cpp | 15 ++-- far/manager.cpp | 4 +- far/mix.hpp | 7 ++ far/notification.cpp | 2 + far/panelmix.cpp | 67 +++++++++-------- far/pathmix.cpp | 102 +++++++++++++------------- far/pathmix.hpp | 10 +-- far/plclass.cpp | 2 +- far/plugapi.cpp | 68 +++++++++++------- far/plugapi.hpp | 2 +- far/plugins.cpp | 4 +- far/plugins.hpp | 4 +- far/plugsettings.cpp | 29 ++++---- far/scantree.cpp | 5 +- far/scantree.hpp | 2 +- far/shortcuts.cpp | 1 + far/strmix.hpp | 2 +- far/syslog.cpp | 6 +- far/tracer.cpp | 13 ++-- far/tracer.hpp | 2 +- far/treelist.cpp | 3 +- far/vbuild.m4 | 2 +- far/viewer.cpp | 51 +++++++------ 53 files changed, 495 insertions(+), 440 deletions(-) diff --git a/far/PluginA.cpp b/far/PluginA.cpp index de50bfe658..8bc862c082 100644 --- a/far/PluginA.cpp +++ b/far/PluginA.cpp @@ -263,37 +263,37 @@ static const char *FirstSlashA(const char *String) return nullptr; } -static void AnsiToUnicodeBin(const char *lpszAnsiString, wchar_t *lpwszUnicodeString, size_t nLength, uintptr_t CodePage = CP_OEMCP) +static void AnsiToUnicodeBin(const char* AnsiString, wchar_t* UnicodeString, size_t Length, uintptr_t CodePage = CP_OEMCP) { - if (lpszAnsiString && lpwszUnicodeString && nLength) + if (AnsiString && UnicodeString && Length) { // BUGBUG, error checking - *lpwszUnicodeString = 0; - unicode::from(CodePage, lpszAnsiString, nLength, lpwszUnicodeString, nLength); + *UnicodeString = 0; + unicode::from(CodePage, AnsiString, Length, UnicodeString, Length); } } -static wchar_t *AnsiToUnicodeBin(const char *lpszAnsiString, size_t nLength, uintptr_t CodePage = CP_OEMCP) +static wchar_t *AnsiToUnicodeBin(const char* AnsiString, size_t Length, uintptr_t CodePage = CP_OEMCP) { - const auto Result = new wchar_t[nLength + 1]; - AnsiToUnicodeBin(lpszAnsiString, Result, nLength, CodePage); - Result[nLength] = 0; + const auto Result = new wchar_t[Length + 1]; + AnsiToUnicodeBin(AnsiString, Result, Length, CodePage); + Result[Length] = 0; return Result; } -static wchar_t *AnsiToUnicode(const char *lpszAnsiString) +static wchar_t *AnsiToUnicode(const char* AnsiString) { - return lpszAnsiString? AnsiToUnicodeBin(lpszAnsiString, strlen(lpszAnsiString) + 1, CP_OEMCP) : nullptr; + return AnsiString? AnsiToUnicodeBin(AnsiString, strlen(AnsiString) + 1, CP_OEMCP) : nullptr; } -static char *UnicodeToAnsiBin(const wchar_t *lpwszUnicodeString, size_t nLength, uintptr_t CodePage = CP_OEMCP) +static char *UnicodeToAnsiBin(const wchar_t* UnicodeString, size_t nLength, uintptr_t CodePage = CP_OEMCP) { /* $ 06.01.2008 TS ! Увеличил размер выделяемой под строку памяти на 1 байт для нормальной работы старых плагинов, которые не знали, что надо смотреть на длину, а не на завершающий ноль (например в EditorGetString.StringText). */ - if (!lpwszUnicodeString) + if (!UnicodeString) return nullptr; const auto Result = new char[nLength + 1]; @@ -303,21 +303,34 @@ static char *UnicodeToAnsiBin(const wchar_t *lpwszUnicodeString, size_t nLength, if (nLength) { // BUGBUG, error checking - unicode::to(CodePage, lpwszUnicodeString, nLength, Result, nLength); + unicode::to(CodePage, UnicodeString, nLength, Result, nLength); } return Result; } -static char *UnicodeToAnsi(const wchar_t *lpwszUnicodeString) +static char *UnicodeToAnsi(const wchar_t* UnicodeString) { - if (!lpwszUnicodeString) + if (!UnicodeString) return nullptr; - return UnicodeToAnsiBin(lpwszUnicodeString, wcslen(lpwszUnicodeString), CP_OEMCP); + return UnicodeToAnsiBin(UnicodeString, wcslen(UnicodeString), CP_OEMCP); +} + +static wchar_t **AnsiArrayToUnicode(const char* const* lpaszAnsiString, size_t iCount) +{ + wchar_t** Result = nullptr; + + if (lpaszAnsiString && iCount) + { + Result = new wchar_t*[iCount]; + std::transform(lpaszAnsiString, lpaszAnsiString + iCount, Result, AnsiToUnicode); + } + + return Result; } -static wchar_t **ArrayAnsiToUnicode(const char* const* lpaszAnsiString, size_t iCount) +static wchar_t **AnsiArrayToUnicodeMagic(const char* const* lpaszAnsiString, size_t iCount) { wchar_t** Result = nullptr; @@ -332,13 +345,13 @@ static wchar_t **ArrayAnsiToUnicode(const char* const* lpaszAnsiString, size_t i return Result; } -static void FreeArrayUnicode(const wchar_t* const* lpawszUnicodeString) +static void FreeUnicodeArrayMagic(const wchar_t* const* Array) { - if (lpawszUnicodeString) + if (Array) { - const auto RealPtr = lpawszUnicodeString - 1; + const auto RealPtr = Array - 1; const auto Size = reinterpret_cast(RealPtr[0]); - std::for_each(lpawszUnicodeString, lpawszUnicodeString + Size, std::default_delete()); + std::for_each(Array, Array + Size, std::default_delete()); delete[] RealPtr; } } @@ -463,7 +476,7 @@ static void ConvertPanelModesA(const oldfar::PanelMode *pnmA, PanelMode **ppnmW, Dest.ColumnTypes = AnsiToUnicode(Src.ColumnTypes); Dest.ColumnWidths = AnsiToUnicode(Src.ColumnWidths); - Dest.ColumnTitles = ArrayAnsiToUnicode(Src.ColumnTitles, iColumnCount); + Dest.ColumnTitles = AnsiArrayToUnicodeMagic(Src.ColumnTitles, iColumnCount); Dest.StatusColumnTypes = AnsiToUnicode(Src.StatusColumnTypes); Dest.StatusColumnWidths = AnsiToUnicode(Src.StatusColumnWidths); Dest.Flags = 0; @@ -483,7 +496,7 @@ static void FreeUnicodePanelModes(const PanelMode *pnmW, size_t iCount) { delete[] Item.ColumnTypes; delete[] Item.ColumnWidths; - FreeArrayUnicode(Item.ColumnTitles); + FreeUnicodeArrayMagic(Item.ColumnTitles); delete[] Item.StatusColumnTypes; delete[] Item.StatusColumnWidths; }); @@ -595,7 +608,7 @@ static PluginPanelItem* ConvertAnsiPanelItemsToUnicode(const oldfar::PluginPanel if (Src.CustomColumnNumber) { Dst.CustomColumnNumber = Src.CustomColumnNumber; - Dst.CustomColumnData = ArrayAnsiToUnicode(Src.CustomColumnData, Src.CustomColumnNumber); + Dst.CustomColumnData = AnsiArrayToUnicode(Src.CustomColumnData, Src.CustomColumnNumber); } if (Src.Flags&oldfar::PPIF_USERDATA) @@ -690,7 +703,7 @@ static void FreeUnicodePanelItem(PluginPanelItem *PanelItem, size_t ItemsNumber) { delete[] i.Description; delete[] i.Owner; - FreeArrayUnicode(i.CustomColumnData); + DeleteRawArray(i.CustomColumnData, i.CustomColumnNumber); FreePluginPanelItem(i); }); @@ -704,8 +717,7 @@ static void FreePanelItemA(const oldfar::PluginPanelItem *PanelItem, size_t Item delete[] Item.Description; delete[] Item.Owner; - std::for_each(Item.CustomColumnData, Item.CustomColumnData + Item.CustomColumnNumber, std::default_delete()); - delete[] Item.CustomColumnData; + DeleteRawArray(Item.CustomColumnData, Item.CustomColumnNumber); if (Item.Flags & oldfar::PPIF_USERDATA) { @@ -1828,26 +1840,26 @@ static char* WINAPI TruncPathStrA(char *Str, int MaxLength) noexcept if (nLength > MaxLength) { - char *lpStart = nullptr; + char *Start = nullptr; if (*Str && (Str[1] == ':') && IsSlash(Str[2])) - lpStart = Str + 3; + Start = Str + 3; else { if ((Str[0] == '\\') && (Str[1] == '\\')) { - if ((lpStart = const_cast(FirstSlashA(Str + 2))) != nullptr) - if ((lpStart = const_cast(FirstSlashA(lpStart + 1))) != nullptr) - lpStart++; + if ((Start = const_cast(FirstSlashA(Str + 2))) != nullptr) + if ((Start = const_cast(FirstSlashA(Start + 1))) != nullptr) + Start++; } } - if (!lpStart || (lpStart - Str > MaxLength - 5)) + if (!Start || (Start - Str > MaxLength - 5)) return TruncStrA(Str, MaxLength); - const auto lpInPos = lpStart + 3 + (nLength - MaxLength); - std::copy_n(lpInPos, strlen(lpInPos) + 1, lpStart + 3); - std::copy_n("...", 3, lpStart); + const auto lpInPos = Start + 3 + (nLength - MaxLength); + std::copy_n(lpInPos, strlen(lpInPos) + 1, Start + 3); + std::copy_n("...", 3, Start); } return Str; } @@ -5024,8 +5036,8 @@ static void RegisterSendKeyToPluginHook() } -PluginA::PluginA(OEMPluginModel* model, const string& lpwszModuleName) : - Plugin(model,lpwszModuleName), +PluginA::PluginA(OEMPluginModel* model, const string& ModuleName) : + Plugin(model,ModuleName), PI(), OPI(), pFDPanelItemA(nullptr), @@ -5665,7 +5677,7 @@ void PluginA::FreeOpenPanelInfo() delete[] OPI.Format; delete[] OPI.PanelTitle; FreeUnicodeInfoPanelLines(OPI.InfoLines, OPI.InfoLinesNumber); - FreeArrayUnicode(OPI.DescrFiles); + DeleteRawArray(OPI.DescrFiles, OPI.DescrFilesNumber); FreeUnicodePanelModes(OPI.PanelModesArray, OPI.PanelModesNumber); FreeUnicodeKeyBarTitles(const_cast(OPI.KeyBar)); delete OPI.KeyBar; @@ -5721,7 +5733,7 @@ void PluginA::ConvertOpenPanelInfo(const oldfar::OpenPanelInfo &Src, OpenPanelIn if (Src.DescrFiles && Src.DescrFilesNumber) { - OPI.DescrFiles = ArrayAnsiToUnicode(Src.DescrFiles, Src.DescrFilesNumber); + OPI.DescrFiles = AnsiArrayToUnicode(Src.DescrFiles, Src.DescrFilesNumber); OPI.DescrFilesNumber = Src.DescrFilesNumber; } diff --git a/far/RegExp.cpp b/far/RegExp.cpp index dcd3e24e5d..2903d7bea2 100644 --- a/far/RegExp.cpp +++ b/far/RegExp.cpp @@ -2037,7 +2037,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.pos=op; st.min=match[op->bracket.index].start; st.max=match[op->bracket.index].end; - stack.push_back(st); + stack.emplace_back(st); } match[op->bracket.index].start = str - start; @@ -2049,7 +2049,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op = opAlternative; st.pos=op->bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } continue; @@ -2075,7 +2075,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.pos = op; st.min = m2->start; st.max = m2->end; - stack.push_back(st); + stack.emplace_back(st); } m2->start = str - start; @@ -2087,7 +2087,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op = opAlternative; st.pos = op->bracket.nextalt; st.savestr = str; - stack.push_back(st); + stack.emplace_back(st); } continue; @@ -2171,7 +2171,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.startstr=str; st.savestr=str; op=st.pos; - stack.push_back(st); + stack.emplace_back(st); if (op->range.bracket.index>=0 && op->range.bracket.indexrange.bracket.index].start; Item.max=match[op->range.bracket.index].end; - stack.push_back(Item); + stack.emplace_back(Item); } if (op->range.bracket.nextalt) @@ -2190,7 +2190,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch Item.op=opAlternative; Item.pos=op->range.bracket.nextalt; Item.savestr=str; - stack.push_back(Item); + stack.emplace_back(Item); } continue; @@ -2253,7 +2253,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.startstr=str; st.savestr=str; op=st.pos; - stack.push_back(st); + stack.emplace_back(st); if (op->range.bracket.index>=0 && op->range.bracket.indexrange.bracket.index].start; Item.max=match[op->range.bracket.index].end; - stack.push_back(Item); + stack.emplace_back(Item); match[op->range.bracket.index].start = str-start; } @@ -2272,7 +2272,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch Item.op=opAlternative; Item.pos=op->range.bracket.nextalt; Item.savestr=str; - stack.push_back(Item); + stack.emplace_back(Item); } continue; @@ -2291,7 +2291,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.startstr=str; st.savestr=str; op=st.pos; - stack.push_back(st); + stack.emplace_back(st); if (op->range.bracket.index>=0 && op->range.bracket.indexrange.bracket.index].start; st.max=match[op->range.bracket.index].end; - stack.push_back(st); + stack.emplace_back(st); } if (op->range.bracket.nextalt) @@ -2325,7 +2325,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op=opAlternative; st.pos=op->range.bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } continue; @@ -2361,14 +2361,14 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.forward=str>ps.startstr?1:0; st.startstr=str; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); if (op->range.bracket.nextalt) { st.op=opAlternative; st.pos=op->range.bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } continue; @@ -2532,7 +2532,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opSymbolRange: @@ -2593,7 +2593,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opNotSymbolRange: @@ -2654,7 +2654,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opClassRange: @@ -2690,7 +2690,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opTypeRange: @@ -2726,7 +2726,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opNotTypeRange: @@ -2762,7 +2762,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opNamedRefRange: @@ -2816,7 +2816,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.savestr=str; st.pos=op; - stack.push_back(st); + stack.emplace_back(st); continue; } case opBracketRange: @@ -2829,7 +2829,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.pos=op->range.bracket.pairindex; st.min=match[op->range.bracket.index].start; st.max=match[op->range.bracket.index].end; - stack.push_back(st); + stack.emplace_back(st); } { @@ -2841,7 +2841,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.startstr = str; st.savestr = str; st.forward = 1; - stack.push_back(st); + stack.emplace_back(st); } if (op->range.nextalt) @@ -2850,7 +2850,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op=opAlternative; st.pos=op->range.bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } if (op->range.bracket.index>=0 && op->range.bracket.indexassert.nextalt) { @@ -2886,7 +2886,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch Item.op=opAlternative; Item.pos=op->assert.nextalt; Item.savestr=str; - stack.push_back(Item); + stack.emplace_back(Item); } continue; @@ -2909,7 +2909,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.pos = op; st.forward = 1; str -= op->assert.length; - stack.push_back(st); + stack.emplace_back(st); } if (op->assert.nextalt) @@ -2918,7 +2918,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op=opAlternative; st.pos=op->assert.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } continue; @@ -2927,7 +2927,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch { StateStackItem st; st.op=opNoReturn; - stack.push_back(st); + stack.emplace_back(st); continue; } case opRegExpEnd:return 1; @@ -3223,7 +3223,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op=opAlternative; st.pos=op->range.bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } // if(op->bracket.index>=0 && op->bracket.indexrange.bracket.index].start; st.max=match[op->range.bracket.index].end; - stack.push_back(st); + stack.emplace_back(st); } if (op->range.nextalt) @@ -3283,7 +3283,7 @@ int RegExp::InnerMatch(const wchar_t* const start, const wchar_t* str, const wch st.op=opAlternative; st.pos=op->range.bracket.nextalt; st.savestr=str; - stack.push_back(st); + stack.emplace_back(st); } inrangebracket++; diff --git a/far/changelog b/far/changelog index 3bce624af1..cc3a9ef45e 100644 --- a/far/changelog +++ b/far/changelog @@ -1,4 +1,10 @@ -w17 26.02.2016 19:47:29 +0300 - build 4563 +drkns 27.02.2016 18:05:26 +0200 - build 4564 + +1. Рефакторинг. + +2. Немного переименований. + +w17 26.02.2016 19:47:29 +0300 - build 4563 1. Experimental: M#2983: Far3, подсчёт размера папки на удалённом компе, глюк с links ВСЕ пройденные реальные каталоги пишутся в std::set VisitedDirs. diff --git a/far/cmdline.cpp b/far/cmdline.cpp index 746831618a..53bd8b8497 100644 --- a/far/cmdline.cpp +++ b/far/cmdline.cpp @@ -607,6 +607,7 @@ std::list> CommandLine::GetPrompt() if (Ptr != Format.cbegin()) { Str.resize(Str.find(L'(')); + // TODO: direct emplace_back after decommissioning VC10 Result.emplace_back(VALUE_TYPE(Result)(Str, F)); } Ptr += Pos+2; @@ -628,6 +629,7 @@ std::list> CommandLine::GetPrompt() } } } + // TODO: direct emplace_back after decommissioning VC10 Result.emplace_back(VALUE_TYPE(Result)(Str, F)); std::for_each(RANGE(Result, i) @@ -779,6 +781,7 @@ std::list> CommandLine::GetPrompt() else { // default prompt = "$p$g" + // TODO: direct emplace_back after decommissioning VC10 Result.emplace_back(VALUE_TYPE(Result)(m_CurDir + L">", PrefixColor)); } SetPromptSize(NewPromptSize); diff --git a/far/codepage.cpp b/far/codepage.cpp index e405c91218..21203dcf5a 100644 --- a/far/codepage.cpp +++ b/far/codepage.cpp @@ -45,7 +45,8 @@ class installed_codepages private: void insert(UINT Codepage, UINT MaxCharSize, const string& Name) { - m_InstalledCp.insert(std::make_pair(Codepage, std::make_pair(MaxCharSize, Name))); + // TODO: direct emplace after decommissioning VC10 + m_InstalledCp.emplace(std::make_pair(Codepage, std::make_pair(MaxCharSize, Name))); } friend class system_codepages_enumerator; diff --git a/far/codepage_selection.cpp b/far/codepage_selection.cpp index 0418908bf5..27bc9b1269 100644 --- a/far/codepage_selection.cpp +++ b/far/codepage_selection.cpp @@ -852,8 +852,8 @@ F8CP::F8CP(bool viewer): } if (cp && Codepages().IsCodePageSupported(cp, viewer ? 2:20) && used_cps.find(cp) == used_cps.end()) { - m_F8CpOrder.push_back(cp); - used_cps.insert(cp); + m_F8CpOrder.emplace_back(cp); + used_cps.emplace(cp); } }); } @@ -862,11 +862,11 @@ F8CP::F8CP(bool viewer): UINT acp = GetACP(), oemcp = GetOEMCP(); if (cps != L"-1") defcp = acp; - m_F8CpOrder.push_back(defcp); + m_F8CpOrder.emplace_back(defcp); if (acp != defcp) - m_F8CpOrder.push_back(acp); + m_F8CpOrder.emplace_back(acp); if (oemcp != defcp && oemcp != acp) - m_F8CpOrder.push_back(oemcp); + m_F8CpOrder.emplace_back(oemcp); } } diff --git a/far/config.cpp b/far/config.cpp index 7e9b1d39aa..ec12d71b04 100644 --- a/far/config.cpp +++ b/far/config.cpp @@ -1872,9 +1872,9 @@ void Options::InitConfigData() }; - #undef MAGIC - + // TODO: direct emplace_back after decommissioning VC10 Config.emplace_back(farconfig(RoamingData, ARRAYSIZE(RoamingData), ConfigProvider().GeneralCfg().get())); + // TODO: direct emplace_back after decommissioning VC10 Config.emplace_back(farconfig(LocalData, ARRAYSIZE(LocalData), ConfigProvider().LocalGeneralCfg().get())); } diff --git a/far/delete.cpp b/far/delete.cpp index 7fc104cc2e..0cf8c2ebb3 100644 --- a/far/delete.cpp +++ b/far/delete.cpp @@ -415,7 +415,7 @@ ShellDelete::ShellDelete(panel_ptr SrcPanel, bool Wipe): int mshow = std::min(std::max((int)Global->Opt->DelOpt.ShowSelected, 1), ScrY/2); std::vector items; - items.push_back(strDeleteFilesMsg); + items.emplace_back(strDeleteFilesMsg); if (SelCount == 1) { @@ -460,12 +460,12 @@ ShellDelete::ShellDelete(panel_ptr SrcPanel, bool Wipe): { if (i == (size_t)mshow-1 && i+1 < SelCount) { - items.push_back(L"..."); + items.emplace_back(L"..."); break; } SrcPanel->GetSelName(&name, attr); QuoteOuterSpace(name); - items.push_back(name); + items.emplace_back(name); } } } diff --git a/far/dialog.cpp b/far/dialog.cpp index 86778f345b..68c65c68ad 100644 --- a/far/dialog.cpp +++ b/far/dialog.cpp @@ -2187,10 +2187,10 @@ int Dialog::LenStrItem(size_t ID) return LenStrItem(Items[ID]); } -int Dialog::LenStrItem(size_t ID, const string& lpwszStr) const +int Dialog::LenStrItem(size_t ID, const string& Str) const { SCOPED_ACTION(CriticalSectionLock)(CS); - return static_cast((Items[ID].Flags & DIF_SHOWAMPERSAND)? lpwszStr.size() : HiStrlen(lpwszStr)); + return static_cast((Items[ID].Flags & DIF_SHOWAMPERSAND)? Str.size() : HiStrlen(Str)); } int Dialog::LenStrItem(const DialogItemEx& Item) @@ -6344,7 +6344,7 @@ Dialog::dialogs_set& Dialog::DialogsList() void Dialog::AddToList() { - if (!DialogsList().insert(this).second) assert(false); + if (!DialogsList().emplace(this).second) assert(false); } void Dialog::RemoveFromList() diff --git a/far/dialog.hpp b/far/dialog.hpp index d5f5100c3e..cd03ff6d8d 100644 --- a/far/dialog.hpp +++ b/far/dialog.hpp @@ -252,7 +252,7 @@ class Dialog: public Modal void Construct(const FarDialogItem* const* SrcItem, size_t SrcItemCount); void Init(); void DeleteDialogObjects(); - int LenStrItem(size_t ID, const string& lpwszStr) const; + int LenStrItem(size_t ID, const string& Str) const; int LenStrItem(size_t ID); int LenStrItem(const DialogItemEx& Item); void ShowDialog(size_t ID=(size_t)-1); // ID=-1 - отрисовать весь диалог diff --git a/far/dirinfo.cpp b/far/dirinfo.cpp index 85669e89a8..0e5eccc5b3 100644 --- a/far/dirinfo.cpp +++ b/far/dirinfo.cpp @@ -274,7 +274,6 @@ int GetDirInfo(const wchar_t *Title, const string& DirName, DirInfoData& Data, g return 1; } -static int StopSearch; static PluginHandle* hDirListPlugin; static int PluginSearchMsgOut; @@ -338,7 +337,7 @@ static void PushPluginDirItem(std::vector& PluginDirList, const PluginDirList.back().UserData.FreeData=nullptr; } -static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, std::vector& PluginDirList) +static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, std::vector& PluginDirList, bool StopSearch) { PluginPanelItem *PanelData=nullptr; size_t ItemCount=0; @@ -358,7 +357,7 @@ static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, st AbortOp=TRUE; if (ConfirmAbortOp()) - StopSearch=TRUE; + StopSearch = true; } FarGetPluginDirListMsg(strDirName,AbortOp?0:MSG_KEEPBACKGROUND); @@ -395,7 +394,7 @@ static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, st { strPluginSearchPath += CurPanelItem->FileName; strPluginSearchPath += L"\x1"; - ScanPluginDir(OpMode,strPluginSearchPath, PluginDirList); + ScanPluginDir(OpMode,strPluginSearchPath, PluginDirList, StopSearch); size_t pos = strPluginSearchPath.rfind(L'\x1'); if (pos != string::npos) strPluginSearchPath.resize(pos); @@ -407,7 +406,7 @@ static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, st if (!Global->CtrlObject->Plugins->SetDirectory(hDirListPlugin,L"..",OPM_FIND|OpMode)) { - StopSearch=TRUE; + StopSearch = true; break; } } @@ -417,8 +416,10 @@ static void ScanPluginDir(OPERATION_MODES OpMode,string& strPluginSearchPath, st Global->CtrlObject->Plugins->FreeFindData(hDirListPlugin,PanelData,ItemCount,true); } -int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, PluginPanelItem **pPanelItem, size_t *pItemsNumber) +int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, std::vector& Items) { + Items.clear(); + if (Dir == L"." || TestParentFolderName(Dir)) return FALSE; @@ -446,6 +447,7 @@ int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, Pl DirListPlugin.hPlugin=hPlugin; } + bool StopSearch = false; { SCOPED_ACTION(SaveScreen); @@ -459,15 +461,7 @@ int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, Pl FarGetPluginDirListMsg(strDirName,0); PluginSearchMsgOut=FALSE; hDirListPlugin = &DirListPlugin; - StopSearch=FALSE; - - const auto PluginDirList = new std::vector; - // first item is reserved for internal needs - PluginDirList->emplace_back(VALUE_TYPE(*PluginDirList)()); - PluginDirList->front().Reserved[0] = reinterpret_cast(PluginDirList); - *pItemsNumber = 0; - *pPanelItem = nullptr; OpenPanelInfo Info; Global->CtrlObject->Plugins->GetOpenPanelInfo(hDirListPlugin,&Info); string strPrevDir = NullToEmpty(Info.CurDir); @@ -478,11 +472,7 @@ int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, Pl { string strPluginSearchPath = Dir; strPluginSearchPath += L"\x1"; - ScanPluginDir(OpMode,strPluginSearchPath, *PluginDirList); - - - *pPanelItem = PluginDirList->data() + 1; - *pItemsNumber = PluginDirList->size() - 1; + ScanPluginDir(OpMode,strPluginSearchPath, Items, StopSearch); Global->CtrlObject->Plugins->SetDirectory(hDirListPlugin,L"..",OPM_SILENT|OpMode); OpenPanelInfo NewInfo; @@ -506,15 +496,9 @@ int GetPluginDirList(Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, Pl return !StopSearch; } -void FreePluginDirList(HANDLE hPlugin, const PluginPanelItem *PanelItem) +void FreePluginDirList(HANDLE hPlugin, std::vector& Items) { - if (!PanelItem) - return; - - const auto PluginDirList = reinterpret_cast*>((PanelItem - 1)->Reserved[0]); - - // first item is reserved for internal needs - std::for_each(PluginDirList->begin() + 1, PluginDirList->end(), LAMBDA_PREDICATE(*PluginDirList, i) + std::for_each(RANGE(Items, i) { if(i.UserData.FreeData) { @@ -524,27 +508,24 @@ void FreePluginDirList(HANDLE hPlugin, const PluginPanelItem *PanelItem) FreePluginPanelItem(i); delete[] i.Description; delete[] i.Owner; - for(size_t jj=0; jjpPlugin, ph->hPlugin, DirName, &PanelItem,&ItemsNumber))==TRUE) //intptr_t - BUGBUG + std::vector PanelItems; + if ((ExitCode = GetPluginDirList(ph->pPlugin, ph->hPlugin, DirName, PanelItems)) == TRUE) //intptr_t - BUGBUG { - std::for_each(PanelItem, PanelItem + ItemsNumber, [&](PluginPanelItem& i) + std::for_each(ALL_CONST_RANGE(PanelItems), [&](const PluginPanelItem& i) { if (i.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) { @@ -559,10 +540,7 @@ int GetPluginDirInfo(PluginHandle* ph,const string& DirName,unsigned long &DirCo }); } - if (PanelItem) - { - FreePluginDirList(ph->hPlugin, PanelItem); - } + FreePluginDirList(ph->hPlugin, PanelItems); return ExitCode; } diff --git a/far/dirinfo.hpp b/far/dirinfo.hpp index 309d539add..d38d97bdcd 100644 --- a/far/dirinfo.hpp +++ b/far/dirinfo.hpp @@ -72,7 +72,7 @@ int GetPluginDirInfo(PluginHandle* hPlugin,const string& DirName,unsigned long & unsigned long &FileCount,unsigned __int64 &FileSize, unsigned __int64 &CompressedFileSize); -int GetPluginDirList(class Plugin* PluginNumber,HANDLE hPlugin,const string& Dir, PluginPanelItem **pPanelItem,size_t *pItemsNumber); -void FreePluginDirList(HANDLE hPlugin, const PluginPanelItem *pPanelItem); +int GetPluginDirList(class Plugin* PluginNumber, HANDLE hPlugin, const string& Dir, std::vector& Items); +void FreePluginDirList(HANDLE hPlugin, std::vector& Items); #endif // DIRINFO_HPP_DA86BD11_D517_4EC9_8324_44EDF0CC7C9A diff --git a/far/dizlist.cpp b/far/dizlist.cpp index 0f9f054aff..fdab64fe82 100644 --- a/far/dizlist.cpp +++ b/far/dizlist.cpp @@ -167,10 +167,11 @@ DizList::desc_map::iterator DizList::AddRecord(const string& Name, const string& Modified=true; std::list DescStrings; DescStrings.emplace_back(Description); - const auto Result = DizData.insert(VALUE_TYPE(DizData)(Name, std::move(DescStrings))); + // TODO: direct emplace after decommissioning VC10 + const auto Result = DizData.emplace(VALUE_TYPE(DizData)(Name, std::move(DescStrings))); if (Result.second) { - m_OrderForWrite.push_back(&*Result.first); + m_OrderForWrite.emplace_back(&*Result.first); } return Result.first; } @@ -423,10 +424,11 @@ bool DizList::CopyDiz(const string& Name, const string& ShortName, const string& return false; DestDiz->DeleteDiz(DestName, DestShortName); - const auto it = DestDiz->DizData.insert(VALUE_TYPE(DizData)(DestName, i->second)); + // TODO: direct emplace after decommissioning VC10 + const auto it = DestDiz->DizData.emplace(VALUE_TYPE(DizData)(DestName, i->second)); if (it.second) { - DestDiz->m_OrderForWrite.push_back(&*it.first); + DestDiz->m_OrderForWrite.emplace_back(&*it.first); } DestDiz->Modified = true; diff --git a/far/editor.cpp b/far/editor.cpp index 5da61ed479..0cd8fc5815 100644 --- a/far/editor.cpp +++ b/far/editor.cpp @@ -3688,6 +3688,7 @@ BOOL Editor::Search(int Next) const int service_len = 12; MenuItemEx Item(FormatString() << fmt::LeftAlign() << fmt::ExactWidth(service_len) << fmt::FillChar(L' ') << (FormatString() << CurPtr.Number() + 1 << L':' << CurPos+1) << BoxSymbols[BS_V1] << CurPtr->GetString()); + // TODO: direct emplace_back after decommissioning VC10 Item.Annotations.emplace_back(VALUE_TYPE(Item.Annotations)(CurPos + service_len + 1, NextPos - CurPos)); FindCoord coord = { (UINT)CurPtr.Number(), (UINT)CurPos, (UINT)SearchLength }; Item.UserData = coord; @@ -4793,6 +4794,7 @@ void Editor::AddUndoData(int Type, const string& Str, const wchar_t *Eol, int St } m_Flags.Clear(FEDITOR_NEWUNDO); + // TODO: direct emplace_back after decommissioning VC10 UndoData.emplace_back(VALUE_TYPE(UndoData)(Type,Str,Eol,StrNum,StrPos)); UndoPos=UndoData.end(); --UndoPos; @@ -5978,7 +5980,7 @@ int Editor::EditorControl(int Command, intptr_t Param1, void *Param2) } CurPtr->AddColor(newcol, SortColorLocked()); - if (col->Flags&ECF_AUTODELETE) m_AutoDeletedColors.insert(&*CurPtr); + if (col->Flags&ECF_AUTODELETE) m_AutoDeletedColors.emplace(&*CurPtr); SortColorUpdate=true; return TRUE; } @@ -6186,7 +6188,7 @@ int Editor::EditorControl(int Command, intptr_t Param1, void *Param2) return TRUE; } - ChangeEventSubscribers.insert(esce->PluginId); + ChangeEventSubscribers.emplace(esce->PluginId); return TRUE; } break; @@ -6981,10 +6983,11 @@ Editor::EditorPreRedrawItem::EditorPreRedrawItem(): { } -Editor::numbered_iterator Editor::InsertString(const wchar_t *lpwszStr, int nLength, const numbered_iterator& Where) +Editor::numbered_iterator Editor::InsertString(const wchar_t* Str, int nLength, const numbered_iterator& Where) { bool Empty = Lines.empty(); + // TODO: direct emplace after decommissioning VC10 const auto NewLine = numbered_iterator(Lines.emplace(Where, Edit(GetOwner())), Where.Number()); m_LinesCount++; @@ -6998,8 +7001,8 @@ Editor::numbered_iterator Editor::InsertString(const wchar_t *lpwszStr, int nLen NewLine->SetPersistentBlocks(EdOpt.PersistentBlocks); - if (lpwszStr) - NewLine->SetString(lpwszStr, nLength); + if (Str) + NewLine->SetString(Str, nLength); NewLine->SetCurPos(0); NewLine->SetEditorMode(true); @@ -7203,7 +7206,7 @@ bool Editor::TryCodePage(uintptr_t codepage, int &X, int &Y) bool def = false, *p_def = m_codepage == CP_UTF8? nullptr : &def; for (int j = 0; j < i->m_Str.size(); ++j) { - wchar_offsets.push_back(total_len); + wchar_offsets.emplace_back(total_len); char *s = decoded.data() + total_len; const size_t len = unicode::to(m_codepage, i->m_Str.data() + j, 1, s, 3, p_def); diff --git a/far/editor.hpp b/far/editor.hpp index 4d867baaf0..12816a7b95 100644 --- a/far/editor.hpp +++ b/far/editor.hpp @@ -289,7 +289,7 @@ class Editor: public SimpleScreenObject string VBlock2Text(); void Change(EDITOR_CHANGETYPE Type,int StrNum); DWORD EditSetCodePage(const iterator& edit, uintptr_t codepage, bool check_only); - numbered_iterator InsertString(const wchar_t *lpwszStr, int nLength, const numbered_iterator& Where); + numbered_iterator InsertString(const wchar_t *Str, int Length, const numbered_iterator& Where); numbered_iterator PushString(const wchar_t* Str, size_t Size) { return InsertString(Str, static_cast(Size), EndIterator()); } void TurnOffMarkingBlock(); void SwapState(Editor& swap_state); diff --git a/far/execute.cpp b/far/execute.cpp index 749bf8a4b3..3a103c8cf8 100644 --- a/far/execute.cpp +++ b/far/execute.cpp @@ -1291,17 +1291,17 @@ bool ExpandOSAliases(string &strStr) PartCmdLine(strStr,strNewCmdStr,strNewCmdPar); - const wchar_t *lpwszExeName=PointToName(Global->g_strFarModuleName); + const wchar_t* ExeName=PointToName(Global->g_strFarModuleName); wchar_t_ptr Buffer(4096); - int ret = Console().GetAlias(strNewCmdStr.data(), Buffer.get(), Buffer.size() * sizeof(wchar_t), lpwszExeName); + int ret = Console().GetAlias(strNewCmdStr.data(), Buffer.get(), Buffer.size() * sizeof(wchar_t), ExeName); if (!ret) { const auto strComspec(os::env::get_variable(L"COMSPEC")); if (!strComspec.empty()) { - lpwszExeName=PointToName(strComspec); - ret = Console().GetAlias(strNewCmdStr.data(), Buffer.get(), Buffer.size() * sizeof(wchar_t) , lpwszExeName); + ExeName=PointToName(strComspec); + ret = Console().GetAlias(strNewCmdStr.data(), Buffer.get(), Buffer.size() * sizeof(wchar_t) , ExeName); } } diff --git a/far/farwinapi.cpp b/far/farwinapi.cpp index fc0900449b..0274dcc012 100644 --- a/far/farwinapi.cpp +++ b/far/farwinapi.cpp @@ -655,6 +655,7 @@ bool file_walker::InitWalk(size_t BlockSize) const UINT64 RangeEndOffset = i.FileOffset.QuadPart + i.Length.QuadPart; for(UINT64 j = i.FileOffset.QuadPart; j < RangeEndOffset; j+=ChunkSize) { + // TODO: direct emplace_back after decommissioning VC10 ChunkList.emplace_back(Chunk(j, static_cast(std::min(RangeEndOffset - j, static_cast(ChunkSize))))); } } @@ -671,6 +672,7 @@ bool file_walker::InitWalk(size_t BlockSize) else { AllocSize = FileSize; + // TODO: direct emplace_back after decommissioning VC10 ChunkList.emplace_back(Chunk(0, static_cast(std::min(static_cast(BlockSize), FileSize)))); Result = true; } @@ -1443,6 +1445,7 @@ std::vector GetLogicalDriveStrings() FOR(const auto& i, os::enum_strings(Ptr)) { + // TODO: direct emplace_back after decommissioning VC10 Result.emplace_back(string(i.data(), i.size())); } } diff --git a/far/filefilter.cpp b/far/filefilter.cpp index 7139bd27f2..7cdc643045 100644 --- a/far/filefilter.cpp +++ b/far/filefilter.cpp @@ -289,6 +289,7 @@ bool FileFilter::FilterEdit() SelPos = std::min(FilterData().size(), SelPos); + // TODO: direct emplace after decommissioning VC10 auto& NewFilter = *FilterData().emplace(FilterData().begin() + SelPos, FileFilterParams()); if (Key==KEY_F5) @@ -524,6 +525,7 @@ void FileFilter::ProcessSelection(VMenu2 *FilterList) if (Check && !CurFilterData) { + // TODO: direct emplace after decommissioning VC10 auto& NewFilter = *TempFilterData().emplace(TempFilterData().begin() + j, FileFilterParams()); NewFilter.SetMask(1, Mask); //Авто фильтры они только для файлов, папки не должны к ним подходить @@ -951,6 +953,7 @@ int FileFilter::ParseAndAddMasks(std::list>& Extensions, if (std::any_of(CONST_RANGE(Extensions, i) {return !StrCmpI(i.first, strMask);})) return -1; + // TODO: direct emplace_back after decommissioning VC10 Extensions.emplace_back(VALUE_TYPE(Extensions)(strMask, Check)); return 1; } diff --git a/far/filelist.cpp b/far/filelist.cpp index a425a9e170..6db6103ae4 100644 --- a/far/filelist.cpp +++ b/far/filelist.cpp @@ -194,11 +194,7 @@ struct FileList::PrevDataItem: swapable FileListItem::~FileListItem() { - if (CustomColumnNumber && CustomColumnData) - { - std::for_each(CustomColumnData, CustomColumnData + CustomColumnNumber, std::default_delete()); - delete[] CustomColumnData; - } + DeleteRawArray(CustomColumnData, CustomColumnNumber); if (DeleteDiz) delete[] DizText; @@ -377,11 +373,21 @@ static struct list_less bool UseReverseNameSort = false; const wchar_t *Ext1=nullptr,*Ext2=nullptr; - if (a.strName == L".." && (a.strShortName.empty() || a.strShortName == L"..")) - return true; + const auto IsParentDir = [](const FileListItem& Item) + { + return (Item.FileAttr & FILE_ATTRIBUTE_DIRECTORY) && TestParentFolderName(Item.strName) && (Item.strShortName.empty() || TestParentFolderName(Item.strShortName)); + }; - if (b.strName == L".." && (b.strShortName.empty() || b.strShortName == L"..")) + const auto IsParentDirB = IsParentDir(b); + + if (IsParentDir(a)) + { + return IsParentDirB? a.Position < b.Position : true; + } + else if (IsParentDirB) + { return false; + } if (ListSortMode == panel_sort::UNSORTED) { @@ -2021,10 +2027,10 @@ int FileList::ProcessKey(const Manager::Key& Key) if (m_PanelMode == panel_mode::PLUGIN_PANEL && !Global->CtrlObject->Plugins->UseFarCommand(m_hPlugin, PLUGIN_FARMAKEDIRECTORY)) { string strDirName; - const wchar_t *lpwszDirName=strDirName.data(); - int MakeCode=Global->CtrlObject->Plugins->MakeDirectory(m_hPlugin,&lpwszDirName,0); + const wchar_t* DirName=strDirName.data(); + int MakeCode=Global->CtrlObject->Plugins->MakeDirectory(m_hPlugin,&DirName,0); Global->CatchError(); - strDirName=lpwszDirName; + strDirName = DirName; if (!MakeCode) Message(MSG_WARNING, 1, MSG(MError), MSG(MCannotCreateFolder), strDirName.data(), MSG(MOk)); @@ -4622,7 +4628,7 @@ void FileList::SelectSortMode() static_assert(ARRAYSIZE(InitSortMenuOptions) == SortOptCount, "Incomplete InitSortMenuOptions array"); SortMenu.reserve(SortMenu.size() + 1 + ARRAYSIZE(InitSortMenuOptions)); // + 1 for separator - SortMenu.push_back(MenuSeparator); + SortMenu.emplace_back(MenuSeparator); SortMenu.insert(SortMenu.end(), ALL_CONST_RANGE(InitSortMenuOptions)); int SortCode = -1; @@ -5076,6 +5082,7 @@ PluginHandle* FileList::OpenFilePlugin(const string* FileName, int PushPrev, OPE { if (PushPrev) { + // TODO: direct emplace_back after decommissioning VC10 PrevDataList.emplace_back(VALUE_TYPE(PrevDataList)(FileName? *FileName : L"", std::move(m_ListData), m_CurTopFile)); } @@ -5160,11 +5167,11 @@ void FileList::ProcessCopyKeys(int Key) } } - const wchar_t *lpwszDestPath=strDestPath.data(); + const wchar_t* DestPath=strDestPath.data(); - PluginGetFiles(&lpwszDestPath,Move); + PluginGetFiles(&DestPath,Move); // BUGBUG, never used - strDestPath=lpwszDestPath; + strDestPath=DestPath; } } } @@ -5324,6 +5331,7 @@ void FileList::ClearAllItem() void FileList::PushPlugin(PluginHandle* hPlugin,const string& HostFile) { + // TODO: direct emplace_back after decommissioning VC10 PluginsList.emplace_back(VALUE_TYPE(PluginsList)(hPlugin, HostFile, strOriginalCurDir, FALSE, m_ViewMode, m_SortMode, m_ReverseSortOrder, m_NumericSort, m_CaseSensitiveSort, m_DirectoriesFirst, m_ViewSettings)); ++Global->PluginPanelsCount; } @@ -5600,7 +5608,10 @@ void FileList::PluginToFileListItem(const PluginPanelItem& pi,FileListItem& fi) fi.DeleteDiz=true; } else - fi.DizText=nullptr; + { + fi.DizText = nullptr; + fi.DeleteDiz = false; + } fi.FileSize=pi.FileSize; fi.AllocationSize=pi.AllocationSize; @@ -5680,15 +5691,17 @@ std::vector FileList::CreatePluginItemList(bool AddTwoDot) { if ((!(FileAttr & FILE_ATTRIBUTE_DIRECTORY) || !TestParentFolderName(strSelName)) && LastSelPosition>=0 && static_cast(LastSelPosition) < m_ListData.size()) { - ItemList.emplace_back(VALUE_TYPE(ItemList)()); - FileListToPluginItem(m_ListData[LastSelPosition], ItemList.back()); + PluginPanelItem NewItem; + FileListToPluginItem(m_ListData[LastSelPosition], NewItem); + ItemList.emplace_back(NewItem); } } if (AddTwoDot && ItemList.empty() && (FileAttr & FILE_ATTRIBUTE_DIRECTORY)) // это про ".." { - ItemList.emplace_back(VALUE_TYPE(ItemList)()); - FileListToPluginItem(m_ListData[0], ItemList.front()); + PluginPanelItem NewItem; + FileListToPluginItem(m_ListData[0], NewItem); + ItemList.emplace_back(NewItem); } LastSelPosition=OldLastSelPosition; @@ -5878,9 +5891,9 @@ void FileList::PluginToPluginFiles(int Move) if (!ItemList.empty()) { - const wchar_t *lpwszTempDir=strTempDir.data(); - int PutCode = Global->CtrlObject->Plugins->GetFiles(m_hPlugin, ItemList.data(), ItemList.size(), false, &lpwszTempDir, OPM_SILENT); - strTempDir=lpwszTempDir; + const wchar_t* TempDir=strTempDir.data(); + int PutCode = Global->CtrlObject->Plugins->GetFiles(m_hPlugin, ItemList.data(), ItemList.size(), false, &TempDir, OPM_SILENT); + strTempDir=TempDir; if (PutCode==1 || PutCode==2) { @@ -5964,9 +5977,9 @@ void FileList::PluginHostGetFiles() if (Global->CtrlObject->Plugins->GetFindData(hCurPlugin,&ItemList,&ItemNumber,OpMode)) { _ALGO(SysLog(L"call Plugins.GetFiles()")); - const wchar_t *lpwszDestPath=strDestPath.data(); - ExitLoop = Global->CtrlObject->Plugins->GetFiles(hCurPlugin, ItemList, ItemNumber, false, &lpwszDestPath, OpMode) != 1; - strDestPath=lpwszDestPath; + const wchar_t* DestPath=strDestPath.data(); + ExitLoop = Global->CtrlObject->Plugins->GetFiles(hCurPlugin, ItemList, ItemNumber, false, &DestPath, OpMode) != 1; + strDestPath=DestPath; if (!ExitLoop) { @@ -6828,9 +6841,6 @@ void FileList::ReadFileNames(int KeepSelection, int UpdateEvenIfPanelInvisible, if ((Global->Opt->ShowDotsInRoot || !bCurDirRoot) || (NetRoot && Global->CtrlObject->Plugins->FindPlugin(Global->Opt->KnownIDs.Network.Id))) // NetWork Plugin { - m_ListData.emplace_back(VALUE_TYPE(m_ListData)()); - auto& NewItem = m_ListData.back(); - string TwoDotsOwner; if (ReadOwners) { @@ -6840,7 +6850,9 @@ void FileList::ReadFileNames(int KeepSelection, int UpdateEvenIfPanelInvisible, FILETIME TwoDotsTimes[4]={}; os::GetFileTimeSimple(m_CurDir,&TwoDotsTimes[0],&TwoDotsTimes[1],&TwoDotsTimes[2],&TwoDotsTimes[3]); - AddParentPoint(&NewItem, m_ListData.size(), TwoDotsTimes, TwoDotsOwner); + FileListItem NewItem; + FillParentPoint(NewItem, m_ListData.size() + 1, TwoDotsTimes, TwoDotsOwner); + m_ListData.emplace_back(std::move(NewItem)); } if (IsColumnDisplayed(DIZ_COLUMN)) @@ -7143,7 +7155,7 @@ void FileList::UpdatePlugin(int KeepSelection, int UpdateEvenIfPanelInvisible) //Рефреш текущему времени для фильтра перед началом операции m_Filter->UpdateCurrentTime(); Global->CtrlObject->HiFiles->UpdateCurrentTime(); - int DotsPresent=FALSE; + bool TwoDotsPresent = false; bool UseFilter=m_Filter->IsEnabledOnPanel(); m_ListData.reserve(PluginFileCount); @@ -7160,31 +7172,27 @@ void FileList::UpdatePlugin(int KeepSelection, int UpdateEvenIfPanelInvisible) if (!Global->Opt->ShowHidden && (PanelData[i].FileAttributes & (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))) continue; - m_ListData.emplace_back(VALUE_TYPE(m_ListData)()); - auto& CurListData = m_ListData.back(); - - PluginToFileListItem(PanelData[i], CurListData); - CurListData.Position=i; + FileListItem NewItem; + PluginToFileListItem(PanelData[i], NewItem); + NewItem.Position = i; - if (!(Info.Flags & OPIF_DISABLESORTGROUPS)/* && !(CurListData->FileAttr & FILE_ATTRIBUTE_DIRECTORY)*/) - CurListData.SortGroup=Global->CtrlObject->HiFiles->GetGroup(&CurListData); - else - CurListData.SortGroup=DEFAULT_SORT_GROUP; + NewItem.SortGroup = (Info.Flags & OPIF_DISABLESORTGROUPS)? DEFAULT_SORT_GROUP : Global->CtrlObject->HiFiles->GetGroup(&NewItem); - if (!CurListData.DizText) + const auto IsParentDirName = !(Info.Flags & OPIF_ADDDOTS) && !TwoDotsPresent && TestParentFolderName(NewItem.strName); + if (IsParentDirName) { - CurListData.DeleteDiz=false; - //CurListData.DizText=nullptr; + TwoDotsPresent = TRUE; + NewItem.FileAttr |= FILE_ATTRIBUTE_DIRECTORY; } - if (TestParentFolderName(CurListData.strName)) - { - DotsPresent=TRUE; - CurListData.FileAttr|=FILE_ATTRIBUTE_DIRECTORY; - } - else + const auto IsDir = NewItem.FileAttr & FILE_ATTRIBUTE_DIRECTORY; + const auto Size = NewItem.FileSize; + + m_ListData.emplace_back(std::move(NewItem)); + + if (!IsParentDirName) { - if (CurListData.FileAttr & FILE_ATTRIBUTE_DIRECTORY) + if (IsDir) { ++m_TotalDirCount; } @@ -7192,9 +7200,8 @@ void FileList::UpdatePlugin(int KeepSelection, int UpdateEvenIfPanelInvisible) { ++m_TotalFileCount; } + TotalFileSize += Size; } - - TotalFileSize += CurListData.FileSize; } if (!(Info.Flags & OPIF_DISABLEHIGHLIGHTING) || (Info.Flags & OPIF_USEATTRHIGHLIGHTING)) @@ -7205,14 +7212,13 @@ void FileList::UpdatePlugin(int KeepSelection, int UpdateEvenIfPanelInvisible) }); } - if ((Info.Flags & OPIF_ADDDOTS) && !DotsPresent) + if ((Info.Flags & OPIF_ADDDOTS) && !TwoDotsPresent) { - m_ListData.emplace_back(VALUE_TYPE(m_ListData)()); - auto& NewItem = m_ListData.back(); - AddParentPoint(&NewItem, m_ListData.size()); + FileListItem NewItem; + FillParentPoint(NewItem, m_ListData.size() + 1); if (!(Info.Flags & OPIF_DISABLEHIGHLIGHTING) || (Info.Flags & OPIF_USEATTRHIGHLIGHTING)) - Global->CtrlObject->HiFiles->GetHiColor(&m_ListData.back(), (Info.Flags&OPIF_USEATTRHIGHLIGHTING)!=0); + Global->CtrlObject->HiFiles->GetHiColor(&NewItem, (Info.Flags&OPIF_USEATTRHIGHLIGHTING) != 0); if (Info.HostFile && *Info.HostFile) { @@ -7226,6 +7232,7 @@ void FileList::UpdatePlugin(int KeepSelection, int UpdateEvenIfPanelInvisible) NewItem.ChangeTime=FindData.ftChangeTime; } } + m_ListData.emplace_back(std::move(NewItem)); } if (m_CurFile >= static_cast(m_ListData.size())) @@ -7377,23 +7384,23 @@ void FileList::ReadSortGroups(bool UpdateFilterCurrentTime) } } -// занести предопределенные данные для каталога "..". Ожидается, что CurPtr пуст. -void FileList::AddParentPoint(FileListItem *CurPtr, size_t CurFilePos, const FILETIME* Times, const string& Owner) +// занести предопределенные данные для каталога ".." +void FileList::FillParentPoint(FileListItem& Item, size_t CurFilePos, const FILETIME* Times, const string& Owner) { - CurPtr->FileAttr = FILE_ATTRIBUTE_DIRECTORY; - CurPtr->strName = L".."; - CurPtr->strShortName = L".."; + Item.FileAttr = FILE_ATTRIBUTE_DIRECTORY; + Item.strName = L".."; + Item.strShortName = L".."; if (Times) { - CurPtr->CreationTime = Times[0]; - CurPtr->AccessTime = Times[1]; - CurPtr->WriteTime = Times[2]; - CurPtr->ChangeTime = Times[3]; + Item.CreationTime = Times[0]; + Item.AccessTime = Times[1]; + Item.WriteTime = Times[2]; + Item.ChangeTime = Times[3]; } - CurPtr->strOwner = Owner; - CurPtr->Position = CurFilePos; + Item.strOwner = Owner; + Item.Position = CurFilePos; } // flshow.cpp diff --git a/far/filelist.hpp b/far/filelist.hpp index 7d2af3233e..307410f451 100644 --- a/far/filelist.hpp +++ b/far/filelist.hpp @@ -349,7 +349,7 @@ class FileList:public Panel bool IsColumnDisplayed(std::function Compare); static void DeletePluginItemList(std::vector &ItemList); - static void AddParentPoint(FileListItem *CurPtr, size_t CurFilePos, const FILETIME* Times = nullptr, const string& Owner = string()); + static void FillParentPoint(FileListItem& Item, size_t CurFilePos, const FILETIME* Times = nullptr, const string& Owner = string()); std::unique_ptr m_Filter; DizList Diz; diff --git a/far/filemasks.cpp b/far/filemasks.cpp index 77149e97ad..b4220e91c8 100644 --- a/far/filemasks.cpp +++ b/far/filemasks.cpp @@ -225,8 +225,10 @@ bool filemasks::Set(const string& masks, DWORD Flags) if (Result && Include.empty() && !Exclude.empty()) { - Include.emplace_back(VALUE_TYPE(Include)()); - Result = Include.back().Set(L"*", Flags); + filemasks::masks m; + Result = m.Set(L"*", Flags); + if (Result) + Include.emplace_back(std::move(m)); } Result = !empty(); diff --git a/far/fileowner.cpp b/far/fileowner.cpp index 360c8e24f2..692ccfe91f 100644 --- a/far/fileowner.cpp +++ b/far/fileowner.cpp @@ -125,6 +125,7 @@ static bool SidToNameCached(PSID Sid, string& Name, const string& Computer) { if (SidToName(Sid, Name, Computer)) { + // TODO: direct emplace after decommissioning VC10 SIDCache.emplace(std::make_pair(std::move(SidCopy), Name)); Result = true; } diff --git a/far/filestr.cpp b/far/filestr.cpp index 3072a248f7..53ed790a4f 100644 --- a/far/filestr.cpp +++ b/far/filestr.cpp @@ -359,7 +359,7 @@ bool GetFileString::GetTString(std::vector& From, std::vector& To, bool bB ++ReadBufPtr; } } - To.push_back(0); + To.emplace_back(0); return ExitCode; } diff --git a/far/fileview.cpp b/far/fileview.cpp index d7e49b1d79..6f5333b009 100644 --- a/far/fileview.cpp +++ b/far/fileview.cpp @@ -515,9 +515,9 @@ void FileViewer::ShowStatus() NameLength = std::max(NameLength, 20); TruncPathStr(strName, NameLength); - static const wchar_t lpwszStatusFormat[] = L"%-*s %c %5u %13I64u %7.7s %-4I64d %3d%%"; + static const wchar_t StatusFormat[] = L"%-*s %c %5u %13I64u %7.7s %-4I64d %3d%%"; string strStatus = str_printf( - lpwszStatusFormat, + StatusFormat, NameLength, strName.data(), L"thd"[m_View->m_DisplayMode], diff --git a/far/findfile.cpp b/far/findfile.cpp index d80ccdb135..f241cf78bb 100644 --- a/far/findfile.cpp +++ b/far/findfile.cpp @@ -964,20 +964,20 @@ bool FindFiles::GetPluginFile(ArcListItem* ArcItem, const os::FAR_FIND_DATA& Fin Global->CtrlObject->Plugins->SetDirectory(ArcItem->hPlugin,L"\\",OPM_SILENT); //SetPluginDirectory(ArcItem->strRootPath,hPlugin); SetPluginDirectory(FindData.strFileName,ArcItem->hPlugin,false,UserData); - const wchar_t *lpFileNameToFind = PointToName(FindData.strFileName); - const wchar_t *lpFileNameToFindShort = PointToName(FindData.strAlternateFileName); - PluginPanelItem *pItems; - size_t nItemsNumber; + const wchar_t *FileNameToFind = PointToName(FindData.strFileName); + const wchar_t *FileNameToFindShort = PointToName(FindData.strAlternateFileName); + PluginPanelItem *Items; + size_t ItemsNumber; bool nResult=false; - if (Global->CtrlObject->Plugins->GetFindData(ArcItem->hPlugin,&pItems,&nItemsNumber,OPM_SILENT)) + if (Global->CtrlObject->Plugins->GetFindData(ArcItem->hPlugin, &Items, &ItemsNumber, OPM_SILENT)) { - const auto End = pItems + nItemsNumber; - const auto It = std::find_if(pItems, End, [&](PluginPanelItem& Item) -> bool + const auto End = Items + ItemsNumber; + const auto It = std::find_if(Items, End, [&](PluginPanelItem& Item) -> bool { Item.FileName = PointToName(NullToEmpty(Item.FileName)); Item.AlternateFileName = PointToName(NullToEmpty(Item.AlternateFileName)); - return !StrCmp(lpFileNameToFind, Item.FileName) && !StrCmp(lpFileNameToFindShort, Item.AlternateFileName); + return !StrCmp(FileNameToFind, Item.FileName) && !StrCmp(FileNameToFindShort, Item.AlternateFileName); }); if (It != End) @@ -985,7 +985,7 @@ bool FindFiles::GetPluginFile(ArcListItem* ArcItem, const os::FAR_FIND_DATA& Fin nResult = Global->CtrlObject->Plugins->GetFile(ArcItem->hPlugin, &*It, DestPath, strResultName, OPM_SILENT) != 0; } - Global->CtrlObject->Plugins->FreeFindData(ArcItem->hPlugin,pItems,nItemsNumber,true); + Global->CtrlObject->Plugins->FreeFindData(ArcItem->hPlugin, Items, ItemsNumber, true); } Global->CtrlObject->Plugins->SetDirectory(ArcItem->hPlugin,L"\\",OPM_SILENT); @@ -2802,8 +2802,7 @@ bool FindFiles::FindFilesProcess() { i.FindData.strFileName = i.Arc->strArcName; } - PanelItems.emplace_back(VALUE_TYPE(PanelItems)()); - PluginPanelItem& pi = PanelItems.back(); + PluginPanelItem pi = {}; FindDataExToPluginPanelItem(i.FindData, pi); if (IsArchive) @@ -2813,6 +2812,7 @@ bool FindFiles::FindFilesProcess() { DeleteEndSlash(const_cast(pi.FileName)); } + PanelItems.emplace_back(pi); } } }); diff --git a/far/flink.cpp b/far/flink.cpp index 46f104284d..1324c7e912 100644 --- a/far/flink.cpp +++ b/far/flink.cpp @@ -102,6 +102,12 @@ bool FillREPARSE_DATA_BUFFER(PREPARSE_DATA_BUFFER rdb, const string& PrintName, return Result; } +static DWORD GetDesiredAccessForReparsePointChange() +{ + static const auto DesiredAccess = IsWindowsXPOrGreater()? FILE_WRITE_ATTRIBUTES : GENERIC_WRITE; + return DesiredAccess; +} + bool SetREPARSE_DATA_BUFFER(const string& Object,PREPARSE_DATA_BUFFER rdb) { bool Result=false; @@ -109,31 +115,25 @@ bool SetREPARSE_DATA_BUFFER(const string& Object,PREPARSE_DATA_BUFFER rdb) { SCOPED_ACTION(os::security::privilege)(make_vector(SE_CREATE_SYMBOLIC_LINK_NAME)); - bool ForceElevation=false; - const auto Attributes = os::GetFileAttributes(Object); if(Attributes&FILE_ATTRIBUTE_READONLY) { os::SetFileAttributes(Object, Attributes&~FILE_ATTRIBUTE_READONLY); } - for(size_t i=0;i<2;i++) + const auto SetBuffer = [&](bool ForceElevation) -> bool { os::fs::file fObject; - if (fObject.Open(Object, FILE_WRITE_ATTRIBUTES, 0, nullptr, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT, nullptr, ForceElevation)) - { - DWORD dwBytesReturned; - if (fObject.IoControl(FSCTL_SET_REPARSE_POINT,rdb,rdb->ReparseDataLength+REPARSE_DATA_BUFFER_HEADER_SIZE,nullptr,0,&dwBytesReturned)) - { - Result=true; - } - // Open() success, but IoControl() fails. We can't handle this automatically :( - if(!i && !Result && ElevationRequired(ELEVATION_MODIFY_REQUEST)) - { - ForceElevation=true; - continue; - } - break; - } + DWORD dwBytesReturned; + return fObject.Open(Object, GetDesiredAccessForReparsePointChange(), 0, nullptr, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT, nullptr, ForceElevation) && + fObject.IoControl(FSCTL_SET_REPARSE_POINT, rdb, rdb->ReparseDataLength + REPARSE_DATA_BUFFER_HEADER_SIZE, nullptr, 0, &dwBytesReturned); + }; + + Result = SetBuffer(false); + + if (!Result && ElevationRequired(ELEVATION_MODIFY_REQUEST)) + { + // Open() succeeded, but IoControl() failed. We can't handle this automatically :( + Result = SetBuffer(true); } if(Attributes&FILE_ATTRIBUTE_READONLY) { @@ -265,7 +265,7 @@ bool DeleteReparsePoint(const string& Object) if (GetREPARSE_DATA_BUFFER(Object, rdb.get())) { os::fs::file fObject; - if (fObject.Open(Object, FILE_WRITE_ATTRIBUTES, 0, nullptr, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT)) + if (fObject.Open(Object, GetDesiredAccessForReparsePointChange(), 0, nullptr, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT)) { DWORD dwBytes; REPARSE_GUID_DATA_BUFFER rgdb = {rdb->ReparseTag}; @@ -275,7 +275,7 @@ bool DeleteReparsePoint(const string& Object) return Result; } -bool GetReparsePointInfo(const string& Object, string &strDestBuff,LPDWORD lpReparseTag) +bool GetReparsePointInfo(const string& Object, string &strDestBuff,LPDWORD ReparseTag) { WORD NameLength=0; block_ptr rdb(MAXIMUM_REPARSE_DATA_BUFFER_SIZE); @@ -284,8 +284,8 @@ bool GetReparsePointInfo(const string& Object, string &strDestBuff,LPDWORD lpRep { const wchar_t *PathBuffer = nullptr; - if (lpReparseTag) - *lpReparseTag=rdb->ReparseTag; + if (ReparseTag) + *ReparseTag=rdb->ReparseTag; switch (rdb->ReparseTag) { diff --git a/far/fnparce.cpp b/far/fnparce.cpp index f257426645..697adec9e0 100644 --- a/far/fnparce.cpp +++ b/far/fnparce.cpp @@ -538,6 +538,7 @@ int ReplaceVariables(const wchar_t *DlgTitle, string &strStr, TSubstData& SubstD { pos_item Item = {Str - StartStr - 2, Str - StartStr - 2 + ii}; + // TODO: direct emplace_back after decommissioning VC10 Positions.emplace_back(Item); } diff --git a/far/hilight.cpp b/far/hilight.cpp index 7e58b8f971..656afd58ff 100644 --- a/far/hilight.cpp +++ b/far/hilight.cpp @@ -325,6 +325,7 @@ void HighlightFiles::InitHighlightFiles(HierarchicalConfig* cfg) if (!cfg->GetValue(key,HLS.Mask,strMask)) break; + // TODO: direct emplace_back after decommissioning VC10 HiData.emplace_back(FileFilterParams()); LoadFilter(cfg, key, HiData.back(), strMask, Item.Delta + (Item.Delta == DEFAULT_SORT_GROUP? 0 : i), Item.Delta != DEFAULT_SORT_GROUP); ++*Item.Count; diff --git a/far/hotplug.cpp b/far/hotplug.cpp index 2b020325bb..958db5a609 100644 --- a/far/hotplug.cpp +++ b/far/hotplug.cpp @@ -343,6 +343,7 @@ static void GetChildHotplugDevicesInfo(DEVINST hDevInst, std::vector if (IsDeviceHotplug(hDevInst)) { DeviceInfo Item = {hDevInst, GetDisksForDevice(hDevInst)}; + // TODO: direct emplace_back after decommissioning VC10 Info.emplace_back(Item); } diff --git a/far/keyboard.cpp b/far/keyboard.cpp index 96ebbb15fd..9d3bc12d58 100644 --- a/far/keyboard.cpp +++ b/far/keyboard.cpp @@ -294,7 +294,7 @@ void InitKeysArray() { if (KbLayout <= 0xffff) KbLayout |= KbLayout << 16; - Layout().push_back(reinterpret_cast(KbLayout)); + Layout().emplace_back(reinterpret_cast(KbLayout)); } } catch (const std::exception&) @@ -1184,7 +1184,7 @@ int WriteInput(int Key,DWORD Flags) } else if (KeyQueue().size() < 1024) { - KeyQueue().push_back(Key | (Flags&SKEY_NOTMACROS ? 0x80000000 : 0)); + KeyQueue().emplace_back(Key | (Flags&SKEY_NOTMACROS ? 0x80000000 : 0)); return TRUE; } else diff --git a/far/main.cpp b/far/main.cpp index a1e65353e0..df7ee2bb80 100644 --- a/far/main.cpp +++ b/far/main.cpp @@ -117,10 +117,10 @@ static void show_help() } static int MainProcess( - const string& lpwszEditName, - const string& lpwszViewName, - const string& lpwszDestName1, - const string& lpwszDestName2, + const string& EditName, + const string& ViewName, + const string& DestName1, + const string& DestName2, int StartLine, int StartChar ) @@ -130,7 +130,7 @@ static int MainProcess( Console().GetTextAttributes(InitAttributes); SetRealColor(colors::PaletteColorToFarColor(COL_COMMANDLINEUSERSCREEN)); - string ename(lpwszEditName),vname(lpwszViewName), apanel(lpwszDestName1),ppanel(lpwszDestName2); + string ename(EditName),vname(ViewName), apanel(DestName1),ppanel(DestName2); if (ConfigProvider().ShowProblems() > 0) { ename.clear(); @@ -607,7 +607,8 @@ static int mainImpl(const range& Args) { if (const auto EqualPtr = wcschr(Arg + 1, L'=')) { - Overridden.push_back(VALUE_TYPE(Overridden)(string(Arg + 1 + 4, EqualPtr), EqualPtr + 1)); + // TODO: direct emplace_back after decommissioning VC10 + Overridden.emplace_back(VALUE_TYPE(Overridden)(string(Arg + 1 + 4, EqualPtr), EqualPtr + 1)); } } else if (Iter + 1 != Args.end()) @@ -850,7 +851,7 @@ int wmain(int Argc, wchar_t *Argv[]) // Unknown C++ exceptions will be caught by FarUnhandledExceptionFilter // and processed as SEH exceptions in more advanced way - return 1; + // return 1; } #if COMPILER == C_GCC diff --git a/far/manager.cpp b/far/manager.cpp index ab7ffb3874..afceaf0341 100644 --- a/far/manager.cpp +++ b/far/manager.cpp @@ -1056,7 +1056,7 @@ void Manager::ActivateCommit(window_ptr_ref Param) if (ItemIterator != m_modalWindows.end()) { m_modalWindows.erase(ItemIterator); - m_modalWindows.push_back(Param); + m_modalWindows.emplace_back(Param); } DeactivateCommit(m_currentWindow); @@ -1171,7 +1171,7 @@ void Manager::SubmergeCommit(window_ptr_ref Param) bool Manager::AddWindow(window_ptr_ref Param) { - return m_Added.insert(Param).second; + return m_Added.emplace(Param).second; } /*$ 26.06.2001 SKV diff --git a/far/mix.hpp b/far/mix.hpp index 8e5088eb7b..d4e9def8cf 100644 --- a/far/mix.hpp +++ b/far/mix.hpp @@ -56,6 +56,13 @@ void FreePluginPanelItem(const PluginPanelItem& Data); void FreePluginPanelItemsUserData(HANDLE hPlugin,PluginPanelItem *PanelItem,size_t ItemsNumber); +template +void DeleteRawArray(const T* const* Data, size_t Size) +{ + std::for_each(Data, Data + Size, std::default_delete()); + delete[] Data; +} + WINDOWINFO_TYPE WindowTypeToPluginWindowType(const int fType); class SetAutocomplete: noncopyable diff --git a/far/notification.cpp b/far/notification.cpp index 84a53ad4c3..f7a35cf774 100644 --- a/far/notification.cpp +++ b/far/notification.cpp @@ -55,11 +55,13 @@ message_manager::message_manager(): message_manager::handlers_map::iterator message_manager::subscribe(event_id EventId, const detail::i_event_handler& EventHandler) { + // TODO: direct emplace after decommissioning VC10 return m_Handlers.insert(handlers_map::value_type(EventNames[EventId], &EventHandler)); } message_manager::handlers_map::iterator message_manager::subscribe(const string& EventName, const detail::i_event_handler& EventHandler) { + // TODO: direct emplace after decommissioning VC10 return m_Handlers.insert(handlers_map::value_type(EventName, &EventHandler)); } diff --git a/far/panelmix.cpp b/far/panelmix.cpp index 6b5667767d..8a553941d8 100644 --- a/far/panelmix.cpp +++ b/far/panelmix.cpp @@ -311,15 +311,14 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s if (!TextPtr) break; - Columns.emplace_back(VALUE_TYPE(Columns)()); + column NewColumn; string strArgOrig = strArgName; ToUpper(strArgName); if (strArgName.front() == L'N') { - unsigned __int64 &ColumnType = Columns.back().type; - ColumnType = NAME_COLUMN; + NewColumn.type = NAME_COLUMN; const wchar_t *Ptr = strArgName.data() + 1; while (*Ptr) @@ -327,22 +326,22 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s switch (*Ptr) { case L'M': - ColumnType |= COLUMN_MARK; + NewColumn.type |= COLUMN_MARK; break; case L'D': - ColumnType |= COLUMN_MARK_DYNAMIC; + NewColumn.type |= COLUMN_MARK_DYNAMIC; break; case L'O': - ColumnType |= COLUMN_NAMEONLY; + NewColumn.type |= COLUMN_NAMEONLY; break; case L'R': - ColumnType |= COLUMN_RIGHTALIGN; + NewColumn.type |= COLUMN_RIGHTALIGN; break; case L'F': - ColumnType |= COLUMN_RIGHTALIGNFORCE; + NewColumn.type |= COLUMN_RIGHTALIGNFORCE; break; case L'N': - ColumnType |= COLUMN_NOEXTENSION; + NewColumn.type |= COLUMN_NOEXTENSION; break; } @@ -351,8 +350,7 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s } else if (strArgName.front() == L'S' || strArgName.front() == L'P' || strArgName.front() == L'G') { - unsigned __int64 &ColumnType = Columns.back().type; - ColumnType = (strArgName.front() == L'S') ? SIZE_COLUMN : (strArgName.front() == L'P') ? PACKED_COLUMN : STREAMSSIZE_COLUMN; + NewColumn.type = (strArgName.front() == L'S') ? SIZE_COLUMN : (strArgName.front() == L'P') ? PACKED_COLUMN : STREAMSSIZE_COLUMN; const wchar_t *Ptr = strArgName.data() + 1; while (*Ptr) @@ -360,16 +358,16 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s switch (*Ptr) { case L'C': - ColumnType |= COLUMN_COMMAS; + NewColumn.type |= COLUMN_COMMAS; break; case L'E': - ColumnType |= COLUMN_ECONOMIC; + NewColumn.type |= COLUMN_ECONOMIC; break; case L'F': - ColumnType |= COLUMN_FLOATSIZE; + NewColumn.type |= COLUMN_FLOATSIZE; break; case L'T': - ColumnType |= COLUMN_THOUSAND; + NewColumn.type |= COLUMN_THOUSAND; break; } @@ -378,21 +376,19 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s } else if (!StrCmpN(strArgName.data(), L"DM", 2) || !StrCmpN(strArgName.data(), L"DC", 2) || !StrCmpN(strArgName.data(), L"DA", 2) || !StrCmpN(strArgName.data(), L"DE", 2)) { - unsigned __int64 &ColumnType = Columns.back().type; - switch (strArgName[1]) { case L'M': - ColumnType = WDATE_COLUMN; + NewColumn.type = WDATE_COLUMN; break; case L'C': - ColumnType = CDATE_COLUMN; + NewColumn.type = CDATE_COLUMN; break; case L'A': - ColumnType = ADATE_COLUMN; + NewColumn.type = ADATE_COLUMN; break; case L'E': - ColumnType = CHDATE_COLUMN; + NewColumn.type = CHDATE_COLUMN; break; } @@ -403,10 +399,10 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s switch (*Ptr) { case L'B': - ColumnType |= COLUMN_BRIEF; + NewColumn.type |= COLUMN_BRIEF; break; case L'M': - ColumnType |= COLUMN_MONTH; + NewColumn.type |= COLUMN_MONTH; break; } @@ -415,37 +411,37 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s } else if (strArgName.front() == L'O') { - unsigned __int64 &ColumnType = Columns.back().type; - ColumnType = OWNER_COLUMN; + NewColumn.type = OWNER_COLUMN; if (strArgName.size() > 1 && strArgName[1] == L'L') - ColumnType |= COLUMN_FULLOWNER; + NewColumn.type |= COLUMN_FULLOWNER; } else if (strArgName.front() == L'X') { - unsigned __int64 &ColumnType = Columns.back().type; - ColumnType = EXTENSION_COLUMN; + NewColumn.type = EXTENSION_COLUMN; if (strArgName.size() > 1 && strArgName[1] == L'R') - ColumnType |= COLUMN_RIGHTALIGN; + NewColumn.type |= COLUMN_RIGHTALIGN; } else if (strArgOrig.size() > 2 && strArgOrig.front() == L'<' && strArgOrig.back() == L'>') { - Columns.back().title = strArgOrig.substr(1, strArgOrig.size() - 2); - Columns.back().type = CUSTOM_COLUMN0; + NewColumn.title = strArgOrig.substr(1, strArgOrig.size() - 2); + NewColumn.type = CUSTOM_COLUMN0; } else { const auto ItemIterator = std::find_if(CONST_RANGE(ColumnInfo, i) { return strArgName == i.Symbol; }); if (ItemIterator != std::cend(ColumnInfo)) - Columns.back().type = ItemIterator->Type; + NewColumn.type = ItemIterator->Type; else if (strArgOrig.size() >= 2 && strArgOrig.size() <= 3 && strArgOrig.front() == L'C') { unsigned int num; if (1 == swscanf(strArgOrig.data()+1, L"%u", &num)) - Columns.back().type = CUSTOM_COLUMN0 + num; + NewColumn.type = CUSTOM_COLUMN0 + num; } } + + Columns.emplace_back(NewColumn); } TextPtr=ColumnWidths.data(); @@ -482,8 +478,9 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s if (Columns.empty()) { - Columns.emplace_back(VALUE_TYPE(Columns)()); - Columns.front().type = NAME_COLUMN; + column NewColumn; + NewColumn.type = NAME_COLUMN; + Columns.emplace_back(NewColumn); } } diff --git a/far/pathmix.cpp b/far/pathmix.cpp index 8a7b3cdbdb..b19106cd9d 100644 --- a/far/pathmix.cpp +++ b/far/pathmix.cpp @@ -61,7 +61,7 @@ void NTPath::Transform() if(is_win2k && Data.size() > 5 && Data[5] == L':') { // "\\?\C:" -> "\\?\c:" - // Some file operations fails on Win2k if a drive letter is in upper case + // Some file operations fail on Win2k if a drive letter is in upper case ToLower(Data, 4, 1); } } @@ -200,32 +200,32 @@ bool TestCurrentDirectory(const string& TestDir) return !StrCmpI(os::GetCurrentDirectory(), TestDir); } -const wchar_t* PointToName(const wchar_t *lpwszPath) +const wchar_t* PointToName(const wchar_t* Path) { - return PointToName(lpwszPath,nullptr); + return PointToName(Path,nullptr); } -const wchar_t* PointToName(const wchar_t *lpwszPath,const wchar_t *lpwszEndPtr) +const wchar_t* PointToName(const wchar_t* Path,const wchar_t* EndPtr) { - if (!lpwszPath) + if (!Path) return nullptr; - if (*lpwszPath && *(lpwszPath+1)==L':') lpwszPath+=2; + if (*Path && *(Path+1)==L':') Path+=2; - auto lpwszNamePtr = lpwszEndPtr? lpwszEndPtr : lpwszPath + wcslen(lpwszPath); + auto NamePtr = EndPtr? EndPtr : Path + wcslen(Path); - while (lpwszNamePtr != lpwszPath) + while (NamePtr != Path) { - if (IsSlash(*lpwszNamePtr)) - return lpwszNamePtr+1; + if (IsSlash(*NamePtr)) + return NamePtr+1; - lpwszNamePtr--; + NamePtr--; } - if (IsSlash(*lpwszPath)) - return lpwszPath+1; + if (IsSlash(*Path)) + return Path+1; else - return lpwszPath; + return Path; } // Аналог PointToName, только для строк типа @@ -253,40 +253,40 @@ const wchar_t* PointToFolderNameIfFolder(const wchar_t *Path) return *NamePtr? NamePtr : prevNamePtr; } -const wchar_t* PointToExt(const wchar_t *lpwszPath) +const wchar_t* PointToExt(const wchar_t* Path) { - return lpwszPath? PointToExt(lpwszPath, lpwszPath + wcslen(lpwszPath)) : nullptr; + return Path? PointToExt(Path, Path + wcslen(Path)) : nullptr; } -const wchar_t* PointToExt(const wchar_t *lpwszPath,const wchar_t *lpwszEndPtr) +const wchar_t* PointToExt(const wchar_t* Path,const wchar_t* EndPtr) { - if (!lpwszPath || !lpwszEndPtr) + if (!Path || !EndPtr) return nullptr; - const wchar_t *lpwszExtPtr = lpwszEndPtr; + const wchar_t* ExtPtr = EndPtr; - const auto IsPath = [&lpwszPath](const wchar_t* Ptr) + const auto IsPath = [&Path](const wchar_t* Ptr) { - return IsSlash(*Ptr) || (*Ptr == L':' && Ptr - lpwszPath == 1); // ':' only in c: + return IsSlash(*Ptr) || (*Ptr == L':' && Ptr - Path == 1); // ':' only in c: }; - while (lpwszExtPtr != lpwszPath) + while (ExtPtr != Path) { - if (*lpwszExtPtr==L'.') + if (*ExtPtr==L'.') { - if (IsPath(lpwszExtPtr - 1)) - return lpwszEndPtr; + if (IsPath(ExtPtr - 1)) + return EndPtr; else - return lpwszExtPtr; + return ExtPtr; } - if (IsPath(lpwszExtPtr)) - return lpwszEndPtr; + if (IsPath(ExtPtr)) + return EndPtr; - lpwszExtPtr--; + ExtPtr--; } - return lpwszEndPtr; + return EndPtr; } @@ -408,54 +408,54 @@ bool CutToParent(string &strStr) string &CutToNameUNC(string &strPath) { - const wchar_t *lpwszPath = strPath.data(); + const wchar_t* Path = strPath.data(); - if (IsSlash(lpwszPath[0]) && IsSlash(lpwszPath[1])) + if (IsSlash(Path[0]) && IsSlash(Path[1])) { - lpwszPath+=2; + Path+=2; for (int i=0; i<2; i++) { - while (*lpwszPath && !IsSlash(*lpwszPath)) - lpwszPath++; + while (*Path && !IsSlash(*Path)) + Path++; - if (*lpwszPath) - lpwszPath++; + if (*Path) + Path++; } } - const wchar_t *lpwszNamePtr = lpwszPath; + const wchar_t* NamePtr = Path; - while (*lpwszPath) + while (*Path) { - if (IsSlash(*lpwszPath) || (*lpwszPath==L':' && lpwszPath == lpwszNamePtr+1)) - lpwszNamePtr = lpwszPath+1; + if (IsSlash(*Path) || (*Path==L':' && Path == NamePtr+1)) + NamePtr = Path+1; - lpwszPath++; + Path++; } - strPath.resize(lpwszNamePtr - strPath.data()); + strPath.resize(NamePtr - strPath.data()); return strPath; } string &CutToFolderNameIfFolder(string &strPath) { - const wchar_t *lpwszPath = strPath.data(); - const wchar_t *lpwszNamePtr=lpwszPath, *lpwszprevNamePtr=lpwszPath; + const wchar_t* Path = strPath.data(); + const wchar_t* NamePtr=Path, *prevNamePtr=Path; - while (*lpwszPath) + while (*Path) { - if (IsSlash(*lpwszPath) || (*lpwszPath==L':' && lpwszPath==lpwszNamePtr+1)) + if (IsSlash(*Path) || (*Path==L':' && Path==NamePtr+1)) { - lpwszprevNamePtr=lpwszNamePtr; - lpwszNamePtr=lpwszPath+1; + prevNamePtr=NamePtr; + NamePtr=Path+1; } - ++lpwszPath; + ++Path; } - size_t size = *lpwszNamePtr ? lpwszNamePtr - strPath.data() : lpwszprevNamePtr - strPath.data(); + size_t size = *NamePtr ? NamePtr - strPath.data() : prevNamePtr - strPath.data(); strPath.resize(size); return strPath; } diff --git a/far/pathmix.hpp b/far/pathmix.hpp index a2434935b6..5ea91159dd 100644 --- a/far/pathmix.hpp +++ b/far/pathmix.hpp @@ -72,11 +72,11 @@ bool CutToSlash(string &strStr, bool bInclude = false); // BUGBUG, deprecated. U bool CutToParent(string &strStr); string &CutToNameUNC(string &strPath); string &CutToFolderNameIfFolder(string &strPath); -const wchar_t* PointToName(const wchar_t *lpwszPath); -const wchar_t* PointToName(const wchar_t *lpwszPath,const wchar_t *lpwszEndPtr); -const wchar_t* PointToFolderNameIfFolder(const wchar_t *lpwszPath); -const wchar_t* PointToExt(const wchar_t *lpwszPath); -const wchar_t* PointToExt(const wchar_t *lpwszPath,const wchar_t *lpwszEndPtr); +const wchar_t* PointToName(const wchar_t *Path); +const wchar_t* PointToName(const wchar_t *Path,const wchar_t* EndPtr); +const wchar_t* PointToFolderNameIfFolder(const wchar_t *Path); +const wchar_t* PointToExt(const wchar_t *Path); +const wchar_t* PointToExt(const wchar_t *Path,const wchar_t* EndPtr); inline const wchar_t* PointToName(const string& Path) {return PointToName(Path.data(), Path.data() + Path.size());} inline const wchar_t* PointToExt(const string& Path) {return PointToExt(Path.data(), Path.data() + Path.size());} diff --git a/far/plclass.cpp b/far/plclass.cpp index 4a4549cd97..884b470e30 100644 --- a/far/plclass.cpp +++ b/far/plclass.cpp @@ -785,7 +785,7 @@ void Plugin::ClearExports() void Plugin::AddDialog(window_ptr_ref Dlg) { - m_dialogs.insert(Dlg); + m_dialogs.emplace(Dlg); } bool Plugin::RemoveDialog(window_ptr_ref Dlg) diff --git a/far/plugapi.cpp b/far/plugapi.cpp index 6f32e89c72..4a38b65fdd 100644 --- a/far/plugapi.cpp +++ b/far/plugapi.cpp @@ -1582,10 +1582,31 @@ void WINAPI apiRestoreScreen(HANDLE hScreen) noexcept } } -static void FreeDirList(std::vector* Items) +static void ClearDirList(std::vector& Items) { - std::for_each(ALL_RANGE(*Items), FreePluginPanelItem); - delete Items; + std::for_each(ALL_RANGE(Items), FreePluginPanelItem); +} + +namespace magic +{ + static std::tuple CastVectorToRawData(std::unique_ptr>&& Items) + { + FN_RETURN_TYPE(CastVectorToRawData) Result; + std::get<1>(Result) = Items->size(); + PluginPanelItem Item; + Item.Reserved[0] = reinterpret_cast(Items.get()); + Items->emplace_back(Item); + std::get<0>(Result) = Items->data(); + Items.release(); + return Result; + } + + static std::unique_ptr> CastRawDataToVector(PluginPanelItem* RawItems, size_t Size) + { + auto Items = reinterpret_cast*>(RawItems[Size].Reserved[0]); + Items->pop_back(); // not needed anymore + return FN_RETURN_TYPE(CastRawDataToVector)(Items); + } } intptr_t WINAPI apiGetDirList(const wchar_t *Dir,PluginPanelItem **pPanelItem,size_t *pItemsNumber) noexcept @@ -1609,7 +1630,7 @@ intptr_t WINAPI apiGetDirList(const wchar_t *Dir,PluginPanelItem **pPanelItem,si *pItemsNumber=0; *pPanelItem=nullptr; - const auto Items = new std::vector; + auto Items = std::make_unique>(); time_check TimeCheck(time_check::delayed, GetRedrawTimeout()); bool MsgOut = false; @@ -1619,7 +1640,7 @@ intptr_t WINAPI apiGetDirList(const wchar_t *Dir,PluginPanelItem **pPanelItem,si { if (CheckForEsc()) { - FreeDirList(Items); + ClearDirList(*Items); return FALSE; } @@ -1631,20 +1652,13 @@ intptr_t WINAPI apiGetDirList(const wchar_t *Dir,PluginPanelItem **pPanelItem,si } } - Items->emplace_back(VALUE_TYPE(*Items)()); - auto& Item = Items->back(); - ClearStruct(Item); FindData.strFileName = strFullName; + PluginPanelItem Item = {}; FindDataExToPluginPanelItem(FindData, Item); + Items->emplace_back(Item); } - *pItemsNumber=Items->size(); - - // magic trick to store vector pointer for apiFreeDirList(). - Items->emplace_back(VALUE_TYPE(*Items)()); - Items->back().Reserved[0] = reinterpret_cast(Items); - - *pPanelItem=Items->data(); + std::tie(*pPanelItem, *pItemsNumber) = magic::CastVectorToRawData(std::move(Items)); } return TRUE; } @@ -1661,7 +1675,11 @@ intptr_t WINAPI apiGetPluginDirList(const GUID* PluginId, HANDLE hPlugin, const { if (Global->WindowManager->ManagerIsDown()) return FALSE; - return GetPluginDirList(GuidToPlugin(PluginId), hPlugin, Dir, pPanelItem, pItemsNumber); + + auto Items = std::make_unique>(); + auto Result = GetPluginDirList(GuidToPlugin(PluginId), hPlugin, Dir, *Items); + std::tie(*pPanelItem, *pItemsNumber) = magic::CastVectorToRawData(std::move(Items)); + return Result; } catch (...) { @@ -1670,13 +1688,12 @@ intptr_t WINAPI apiGetPluginDirList(const GUID* PluginId, HANDLE hPlugin, const } } -void WINAPI apiFreeDirList(PluginPanelItem *PanelItem, size_t nItemsNumber) noexcept +void WINAPI apiFreeDirList(PluginPanelItem *PanelItems, size_t ItemsNumber) noexcept { try { - const auto Items = reinterpret_cast*>(PanelItem[nItemsNumber].Reserved[0]); - Items->pop_back(); // not needed anymore, see magic trick above - return FreeDirList(Items); + auto Items = magic::CastRawDataToVector(PanelItems, ItemsNumber); + ClearDirList(*Items); } catch (...) { @@ -1685,11 +1702,12 @@ void WINAPI apiFreeDirList(PluginPanelItem *PanelItem, size_t nItemsNumber) noex } } -void WINAPI apiFreePluginDirList(HANDLE hPlugin, PluginPanelItem *PanelItem, size_t ItemsNumber) noexcept +void WINAPI apiFreePluginDirList(HANDLE hPlugin, PluginPanelItem *PanelItems, size_t ItemsNumber) noexcept { try { - FreePluginDirList(hPlugin, PanelItem); + auto Items = magic::CastRawDataToVector(PanelItems, ItemsNumber); + FreePluginDirList(hPlugin, *Items); } catch (...) { @@ -2241,16 +2259,16 @@ wchar_t* WINAPI apiTruncPathStr(wchar_t *Str, intptr_t MaxLength) noexcept } } -const wchar_t* WINAPI apiPointToName(const wchar_t *lpwszPath) noexcept +const wchar_t* WINAPI apiPointToName(const wchar_t* Path) noexcept { try { - return PointToName(lpwszPath); + return PointToName(Path); } catch (...) { // TODO: log - return lpwszPath; + return Path; } } diff --git a/far/plugapi.hpp b/far/plugapi.hpp index ae470e4240..05d63a825f 100644 --- a/far/plugapi.hpp +++ b/far/plugapi.hpp @@ -75,7 +75,7 @@ namespace pluginapi wchar_t* WINAPI apiTruncStrFromCenter(wchar_t *Str, intptr_t MaxLength) noexcept; wchar_t* WINAPI apiTruncStrFromEnd(wchar_t *Str, intptr_t MaxLength) noexcept; wchar_t* WINAPI apiTruncPathStr(wchar_t *Str, intptr_t MaxLength) noexcept; - LPCWSTR WINAPI apiPointToName(const wchar_t *lpwszPath) noexcept; + LPCWSTR WINAPI apiPointToName(const wchar_t* Path) noexcept; size_t WINAPI apiGetFileOwner(const wchar_t *Computer, const wchar_t *Name, wchar_t *Owner, size_t Size) noexcept; size_t WINAPI apiConvertPath(CONVERTPATHMODES Mode, const wchar_t *Src, wchar_t *Dest, size_t DestSize) noexcept; size_t WINAPI apiGetReparsePointInfo(const wchar_t *Src, wchar_t *Dest, size_t DestSize) noexcept; diff --git a/far/plugins.cpp b/far/plugins.cpp index 1c05a5f66a..8e3e79ffc7 100644 --- a/far/plugins.cpp +++ b/far/plugins.cpp @@ -169,6 +169,7 @@ PluginManager::~PluginManager() Plugin* PluginManager::AddPlugin(std::unique_ptr&& pPlugin) { + // TODO: direct emplace after decommissioning VC10 const auto Result = m_Plugins.emplace(VALUE_TYPE(m_Plugins)(pPlugin->GetGUID(), VALUE_TYPE(m_Plugins)::second_type())); if (!Result.second) { @@ -179,7 +180,7 @@ Plugin* PluginManager::AddPlugin(std::unique_ptr&& pPlugin) const auto PluginPtr = Result.first->second.get(); - SortedPlugins.insert(PluginPtr); + SortedPlugins.emplace(PluginPtr); #ifndef NO_WRAPPER if (PluginPtr->IsOemPlugin()) { @@ -196,6 +197,7 @@ bool PluginManager::UpdateId(Plugin *pPlugin, const GUID& Id) Iterator->second.release(); m_Plugins.erase(Iterator); pPlugin->SetGuid(Id); + // TODO: direct emplace after decommissioning VC10 const auto Result = m_Plugins.emplace(VALUE_TYPE(m_Plugins)(pPlugin->GetGUID(), VALUE_TYPE(m_Plugins)::second_type())); if (!Result.second) { diff --git a/far/plugins.hpp b/far/plugins.hpp index bb815acf00..8bf2545002 100644 --- a/far/plugins.hpp +++ b/far/plugins.hpp @@ -121,7 +121,7 @@ class PluginManager: noncopyable int ProcessConsoleInput(ProcessConsoleInputInfo *Info) const; std::vector GetContentPlugins(const std::vector& ColNames) const; void GetContentData(const std::vector& Plugins, const string& FilePath, const std::vector& Names, std::vector& Values, std::unordered_map& ContentData) const; - Plugin* LoadPluginExternal(const string& lpwszModuleName, bool LoadToMem); + Plugin* LoadPluginExternal(const string& ModuleName, bool LoadToMem); int UnloadPluginExternal(Plugin* hPlugin); bool IsPluginUnloaded(Plugin* pPlugin); void LoadPlugins(); @@ -183,7 +183,7 @@ class PluginManager: noncopyable void LoadModels(); void LoadIfCacheAbsent(); - Plugin* LoadPlugin(const string& lpwszModuleName, const os::FAR_FIND_DATA &FindData, bool LoadToMem); + Plugin* LoadPlugin(const string& ModuleName, const os::FAR_FIND_DATA &FindData, bool LoadToMem); Plugin* AddPlugin(std::unique_ptr&& pPlugin); bool RemovePlugin(Plugin *pPlugin); int UnloadPlugin(Plugin *pPlugin, int From); diff --git a/far/plugsettings.cpp b/far/plugsettings.cpp index dcb5554fda..9d65444a3e 100644 --- a/far/plugsettings.cpp +++ b/far/plugsettings.cpp @@ -323,16 +323,16 @@ int PluginSettings::Enum(FarSettingsEnum& Enum) int result=FALSE; if(Enum.RootEnumKeys(root,Index++,strName)) + FarSettingsNameItems NewEnumItem; + while (PluginsCfg->EnumKeys(root, Index++, strName)) { - m_Enum.back().add(item, strName); + NewEnumItem.add(item, strName); } Index=0; while (PluginsCfg->EnumValues(root, Index++, strName, Type)) @@ -352,10 +352,11 @@ int PluginSettings::Enum(FarSettingsEnum& Enum) } if(item.Type!=FST_UNKNOWN) { - m_Enum.back().add(item, strName); + NewEnumItem.add(item, strName); } } - m_Enum.back().get(Enum); + NewEnumItem.get(Enum); + m_Enum.emplace_back(std::move(NewEnumItem)); result=TRUE; } return result; @@ -449,15 +450,16 @@ int FarSettings::Enum(FarSettingsEnum& Enum) case FSSF_FOLDERSHORTCUT_8: case FSSF_FOLDERSHORTCUT_9: { - m_Enum.emplace_back(VALUE_TYPE(m_Enum)()); FarSettingsHistory item = {}; string strName,strFile,strData; GUID plugin; size_t index=0; - while(Shortcuts().Get(Enum.Root-FSSF_FOLDERSHORTCUT_0,index++,&strName,&plugin,&strFile,&strData)) + FarSettingsHistoryItems NewEnumItem; + while (Shortcuts().Get(Enum.Root - FSSF_FOLDERSHORTCUT_0, index++, &strName, &plugin, &strFile, &strData)) { - m_Enum.back().add(item, strName, strData, plugin, strFile); + NewEnumItem.add(item, strName, strData, plugin, strFile); } - m_Enum.back().get(Enum); + NewEnumItem.get(Enum); + m_Enum.emplace_back(std::move(NewEnumItem)); return TRUE; } break; @@ -510,7 +512,6 @@ static const std::unique_ptr& HistoryRef(int Type) int FarSettings::FillHistory(int Type,const string& HistoryName,FarSettingsEnum& Enum, const std::function& Filter) { - m_Enum.emplace_back(VALUE_TYPE(m_Enum)()); FarSettingsHistory item = {}; DWORD Index=0; string strName,strGuid,strFile,strData; @@ -519,7 +520,8 @@ int FarSettings::FillHistory(int Type,const string& HistoryName,FarSettingsEnum& history_record_type HType; bool HLock; unsigned __int64 Time; - while(HistoryRef(Type)->Enum(Index++,Type,HistoryName,&id,strName,&HType,&HLock,&Time,strGuid,strFile,strData)) + FarSettingsHistoryItems NewEnumItem; + while (HistoryRef(Type)->Enum(Index++, Type, HistoryName, &id, strName, &HType, &HLock, &Time, strGuid, strFile, strData)) { if(Filter(HType)) { @@ -527,9 +529,10 @@ int FarSettings::FillHistory(int Type,const string& HistoryName,FarSettingsEnum& item.Lock=HLock; GUID Guid; if(strGuid.empty()||!StrToGuid(strGuid,Guid)) Guid=FarGuid; - m_Enum.back().add(item, strName, strData, Guid, strFile); + NewEnumItem.add(item, strName, strData, Guid, strFile); } } - m_Enum.back().get(Enum); + NewEnumItem.get(Enum); + m_Enum.emplace_back(std::move(NewEnumItem)); return TRUE; } diff --git a/far/scantree.cpp b/far/scantree.cpp index 1138d189d7..7ef86b5433 100644 --- a/far/scantree.cpp +++ b/far/scantree.cpp @@ -97,6 +97,7 @@ void ScanTree::SetFindPath(const string& Path,const string& Mask, const DWORD Ne { VisitedDirs.clear(); ScanItems.clear(); + // TODO: direct emplace_back after decommissioning VC10 ScanItems.emplace_back(scantree_item()); Flags.Clear(FSCANTREE_FILESFIRST); strFindMask = Mask; @@ -106,7 +107,7 @@ void ScanTree::SetFindPath(const string& Path,const string& Mask, const DWORD Ne ConvertNameToReal(strFindPath, strFindPath); strFindPath = NTPath(strFindPath); ScanItems.back().RealPath = strFindPath; - VisitedDirs.insert(strFindPath); + VisitedDirs.emplace(strFindPath); AddEndSlash(strFindPath); strFindPath += strFindMask; Flags.Set((Flags.Flags()&0x0000FFFF)|(NewScanFlags&0xFFFF0000)); @@ -238,7 +239,7 @@ bool ScanTree::GetNextName(os::FAR_FIND_DATA& fdata,string &strFullName) } ScanItems.emplace_back(std::move(Data)); if (Flags.Check(FSCANTREE_SCANSYMLINK)) - VisitedDirs.insert(std::move(RealPath)); + VisitedDirs.emplace(std::move(RealPath)); return true; } diff --git a/far/scantree.hpp b/far/scantree.hpp index 077400ce14..d8d2cf19ae 100644 --- a/far/scantree.hpp +++ b/far/scantree.hpp @@ -75,7 +75,7 @@ class ScanTree: noncopyable private: BitFlags Flags; std::list ScanItems; - std::set VisitedDirs; + std::unordered_set VisitedDirs; // path in full NT format, used internally to get correct results string strFindPath; // relative path, it's what caller expects to receive diff --git a/far/shortcuts.cpp b/far/shortcuts.cpp index b1e46cb52f..c6da72ba15 100644 --- a/far/shortcuts.cpp +++ b/far/shortcuts.cpp @@ -476,6 +476,7 @@ void Shortcuts::Set(size_t Pos, const string& Folder, const GUID& PluginGuid, co void Shortcuts::Add(size_t Pos, const string& Folder, const GUID& PluginGuid, const string& PluginFile, const string& PluginData) { + // TODO: direct emplace_back after decommissioning VC10 Items[Pos].emplace_back(VALUE_TYPE(Items[Pos])(string(), Folder, PluginFile, PluginData, PluginGuid)); Changed = true; } diff --git a/far/strmix.hpp b/far/strmix.hpp index 685f052c7a..120c05c12f 100644 --- a/far/strmix.hpp +++ b/far/strmix.hpp @@ -181,7 +181,7 @@ template void split(Container& C, const string& InitString, DWORD Flags = 0, const wchar_t* Separators = L";,") { C.clear(); - split(InitString, Flags, Separators, [&](string& str) { C.insert(C.end(), std::move(str)); }); + split(InitString, Flags, Separators, [&](string& str) { C.emplace(C.end(), std::move(str)); }); } template diff --git a/far/syslog.cpp b/far/syslog.cpp index a1fbfd0e64..af994aa58a 100644 --- a/far/syslog.cpp +++ b/far/syslog.cpp @@ -300,11 +300,11 @@ void SysLogLastError() os::memory::local::ptr_t::type MsgPtr; { - wchar_t *lpMsgBuf = nullptr; + wchar_t *MsgBuf = nullptr; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, nullptr,LastErr,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), - (LPWSTR) &lpMsgBuf,0,nullptr); - MsgPtr.reset(lpMsgBuf); + (LPWSTR) &MsgBuf,0,nullptr); + MsgPtr.reset(MsgBuf); } OpenSysLog(); diff --git a/far/tracer.cpp b/far/tracer.cpp index 700b3b802b..2a50d6b9d0 100644 --- a/far/tracer.cpp +++ b/far/tracer.cpp @@ -62,7 +62,7 @@ static std::vector GetBackTrace(const EXCEPTION_POINTERS* Exception while (Imports().StackWalk64(machine_type, GetCurrentProcess(), GetCurrentThread(), &StackFrame, &ContextRecord, nullptr, nullptr, nullptr, nullptr)) { - Result.push_back((const void*)StackFrame.AddrPC.Offset); + Result.emplace_back(reinterpret_cast(StackFrame.AddrPC.Offset)); } return Result; @@ -136,19 +136,20 @@ void tracer::store(const void* CppObject, const EXCEPTION_POINTERS* ExceptionInf { SCOPED_ACTION(CriticalSectionLock)(m_CS); exception_context Context = { *ExceptionInfo->ExceptionRecord, *ExceptionInfo->ContextRecord }; - if (m_StdMap.size() > 2048) + if (m_CppMap.size() > 2048) { // We can't store them forever - m_StdMap.clear(); + m_CppMap.clear(); } - m_StdMap.insert(std::make_pair(CppObject, Context)); + // TODO: direct emplace after decommissioning VC10 + m_CppMap.emplace(std::make_pair(CppObject, Context)); } bool tracer::get_context(const void* CppObject, exception_context& Context) const { SCOPED_ACTION(CriticalSectionLock)(m_CS); - auto Iter = m_StdMap.find(CppObject); - if (Iter == m_StdMap.end()) + auto Iter = m_CppMap.find(CppObject); + if (Iter == m_CppMap.end()) { return false; } diff --git a/far/tracer.hpp b/far/tracer.hpp index 46424946d6..651a21275b 100644 --- a/far/tracer.hpp +++ b/far/tracer.hpp @@ -62,7 +62,7 @@ class tracer: noncopyable static tracer* sTracer; mutable CriticalSection m_CS; - std::map m_StdMap; + std::unordered_map m_CppMap; veh_handler m_Handler; static bool m_SymInitialised; }; diff --git a/far/treelist.cpp b/far/treelist.cpp index 6f20f221c8..cfb8096d09 100644 --- a/far/treelist.cpp +++ b/far/treelist.cpp @@ -450,7 +450,7 @@ class TreeListCache: noncopyable, swapable string newName(NewName); newName.append(i->data() + SrcLength, i->size() - SrcLength); i = m_Names.erase(i); - m_Names.insert(std::move(newName)); + m_Names.emplace(std::move(newName)); if (i == m_Names.end()) break; } @@ -1793,6 +1793,7 @@ int TreeList::ReadTreeFile() m_ListData.clear(); + // TODO: direct emplace_back after decommissioning VC10 ReadLines(TreeFile, [&](string& Name) { m_ListData.emplace_back(string(m_Root.data(), RootLength) + Name); }); TreeFile.Close(); diff --git a/far/vbuild.m4 b/far/vbuild.m4 index 2560f15f2c..b443b73b20 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,4563)m4_dnl +m4_define(BUILD,4564)m4_dnl diff --git a/far/viewer.cpp b/far/viewer.cpp index 9819972603..d33924d8c5 100644 --- a/far/viewer.cpp +++ b/far/viewer.cpp @@ -555,51 +555,47 @@ void Viewer::ShowPage(int nMode) for (int Y = m_Y1; Y<=m_Y2; ++Y) { - Strings.emplace_back(VALUE_TYPE(Strings)()); - Strings.back().nFilePos = vtell(); + ViewerString NewString; + NewString.nFilePos = vtell(); if (Y==m_Y1+1 && !veof()) SecondPos=vtell(); - ReadString(&Strings.back(), -1); + ReadString(&NewString, -1); + Strings.emplace_back(NewString); + } } break; + case SHOW_UP: - if (m_Y2 > m_Y1) { + ViewerString NewString; + NewString.nFilePos = FilePos; + SecondPos = Strings.front().nFilePos; + + Strings.emplace_front(NewString); Strings.pop_back(); - Strings.emplace_front(ViewerString()); - Strings.front().nFilePos = FilePos; - } - else - { - SecondPos = Strings.front().nFilePos; - Strings.front().nFilePos = FilePos; + + ReadString(&Strings.front(), (int)(SecondPos - FilePos)); } - ReadString(&Strings.front(),(int)(SecondPos-FilePos)); break; case SHOW_DOWN: - if (m_Y2 > m_Y1) { + ViewerString NewString; + NewString.nFilePos = Strings.back().nFilePos + Strings.back().linesize; + + Strings.emplace_back(NewString); Strings.pop_front(); - Strings.emplace_back(VALUE_TYPE(Strings)()); - FilePos = Strings.front().nFilePos; - const auto Second = std::next(Strings.begin()); - SecondPos = Second->nFilePos; - const auto PreLast = std::prev(Strings.end(), 2); - Strings.back().nFilePos = PreLast->nFilePos + PreLast->linesize; - } - else - { - Strings.front().nFilePos += Strings.front().linesize; + FilePos = Strings.front().nFilePos; - SecondPos = FilePos; + SecondPos = FilePos + Strings.front().linesize; + + vseek(Strings.back().nFilePos, FILE_BEGIN); + ReadString(&Strings.back(), -1); } - vseek(Strings.back().nFilePos, FILE_BEGIN); - ReadString(&Strings.back(), -1); break; } @@ -1525,6 +1521,7 @@ int Viewer::process_key(const Manager::Key& Key) if (UndoData.size() == VIEWER_UNDO_COUNT) UndoData.pop_front(); + // TODO: direct emplace_back after decommissioning VC10 UndoData.emplace_back(VALUE_TYPE(UndoData)(FilePos, LeftPos)); } @@ -2737,7 +2734,7 @@ void Viewer::SearchTextTransform(string &to, const wchar_t *from, size_t from_le { int v = CP_REVERSEBOM == m_Codepage ? 1 : 0; if (Bytes.size() & 1) - Bytes.push_back('\0'); + Bytes.emplace_back('\0'); for (size_t i = 0; i < Bytes.size(); i += 2) {