From 8368f365becd8668dbce2e40cecc7ba4f882f41b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 14 Feb 2019 14:01:44 +0300 Subject: XML iterators, first version --- .../src/CurrencyRatesProviderBase.cpp | 23 +++++++++------------- plugins/CurrencyRates/src/DBUtils.cpp | 2 +- plugins/CurrencyRates/src/ImportExport.cpp | 20 +++++++++---------- 3 files changed, 20 insertions(+), 25 deletions(-) (limited to 'plugins/CurrencyRates') diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp index 41e9b00c88..dda1e9cc18 100644 --- a/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp @@ -20,7 +20,7 @@ bool parse_currencyrate(const TiXmlNode *pTop, CCurrencyRatesProviderBase::CCurr { tstring sSymbol, sDescription, sID; - for (auto *pNode = pTop->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pTop)) { const char *sName = pNode->Value(); if (!mir_strcmpi(sName, "symbol")) { sSymbol = GetNodeText(pNode); @@ -47,7 +47,7 @@ bool parse_section(const TiXmlNode *pTop, CCurrencyRatesProviderBase::CCurrencyR CCurrencyRatesProviderBase::CCurrencyRateSection::TCurrencyRates aCurrencyRates; tstring sSectionName; - for (auto *pNode = pTop->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pTop)) { const char *sName = pNode->Value(); if (!mir_strcmpi(sName, "section")) { CCurrencyRatesProviderBase::CCurrencyRateSection qs1; @@ -72,21 +72,16 @@ bool parse_section(const TiXmlNode *pTop, CCurrencyRatesProviderBase::CCurrencyR const TiXmlNode* find_provider(const TiXmlNode *pRoot) { - const TiXmlNode *pProvider = nullptr; - - for (auto *pNode = pRoot->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pRoot)) { const char *sName = pNode->Value(); - if (!mir_strcmpi(sName, "Provider")) { - pProvider = pNode; - break; - } + if (!mir_strcmpi(sName, "Provider")) + return pNode; - pProvider = find_provider(pNode); - if (pProvider) - break; + if (auto *pProvider = find_provider(pNode)) + return pProvider; } - return pProvider; + return nullptr; } CCurrencyRatesProviderBase::CXMLFileInfo parse_ini_file(const tstring &rsXMLFile, bool &rbSucceded) @@ -99,7 +94,7 @@ CCurrencyRatesProviderBase::CXMLFileInfo parse_ini_file(const tstring &rsXMLFile const TiXmlNode *pProvider = find_provider(&doc); if (pProvider) { rbSucceded = true; - for (auto *pNode = pProvider->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pProvider)) { const char *sName = pNode->Value(); if (!mir_strcmpi(sName, "section")) { CCurrencyRatesProviderBase::CCurrencyRateSection qs; diff --git a/plugins/CurrencyRates/src/DBUtils.cpp b/plugins/CurrencyRates/src/DBUtils.cpp index 53e1f211b3..571bad0bfb 100644 --- a/plugins/CurrencyRates/src/DBUtils.cpp +++ b/plugins/CurrencyRates/src/DBUtils.cpp @@ -4,7 +4,7 @@ std::wstring GetNodeText(const TiXmlElement *pNode) { auto *pszText = pNode->GetText(); if (pszText) - return Utf2T(pszText); + return Utf2T(pszText).get(); return std::wstring(); } diff --git a/plugins/CurrencyRates/src/ImportExport.cpp b/plugins/CurrencyRates/src/ImportExport.cpp index 3087670e18..47bb3e1b40 100644 --- a/plugins/CurrencyRates/src/ImportExport.cpp +++ b/plugins/CurrencyRates/src/ImportExport.cpp @@ -253,7 +253,7 @@ bool handle_module(MCONTACT hContact, const TiXmlElement *pXmlModule) DBCONTACTWRITESETTING dbs; dbs.szModule = szModuleName; - for (auto *pSetting = pXmlModule->FirstChildElement(g_szXmlSetting); pSetting != nullptr; pSetting = pSetting->NextSiblingElement(g_szXmlSetting)) { + for (auto *pSetting : TiXmlFilter(pXmlModule, g_szXmlSetting)) { auto *pNode = pSetting->FirstChildElement(g_szXmlName); if (pNode == nullptr) continue; @@ -342,7 +342,7 @@ size_t count_contacts(const TiXmlNode *pXmlRoot, bool bInContactsGroup) { size_t cContacts = 0; - for (auto *pNode = pXmlRoot->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pXmlRoot)) { const char *sName = pNode->Name(); if (false == bInContactsGroup) { if (!mir_strcmpi(g_szXmlContacts, sName)) @@ -378,7 +378,7 @@ struct CContactState const TiXmlNode* find_currencyrates_module(const TiXmlNode *pXmlContact) { - for (auto *pNode = pXmlContact->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) + for (auto *pNode : TiXmlEnum(pXmlContact)) if ((!mir_strcmpi(g_szXmlModule, pNode->Name())) && (!mir_strcmpi(CURRENCYRATES_MODULE_NAME, pNode->GetText()))) return pNode; @@ -391,7 +391,7 @@ TNameValue parse_setting_node(const TiXmlNode *pXmlSetting) assert(pXmlSetting); const char *sName, *sValue; - for (auto *pNode = pXmlSetting->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pXmlSetting)) { if (!mir_strcmpi(g_szXmlName, pNode->Name())) sName = pNode->GetText(); else if (!mir_strcmpi(g_szXmlValue, pNode->Name())) @@ -403,7 +403,7 @@ TNameValue parse_setting_node(const TiXmlNode *pXmlSetting) CCurrencyRatesProviders::TCurrencyRatesProviderPtr find_provider(const TiXmlNode *pXmlCurrencyRatesModule) { - for (auto *pNode = pXmlCurrencyRatesModule->FirstChildElement(g_szXmlSetting); pNode != nullptr; pNode = pNode->NextSiblingElement(g_szXmlSetting)) { + for (auto *pNode : TiXmlFilter(pXmlCurrencyRatesModule, g_szXmlSetting)) { TNameValue Item = parse_setting_node(pNode); if ((!mir_strcmpi(DB_STR_CURRENCYRATE_PROVIDER, Item.first)) && Item.second) return CModuleInfo::GetCurrencyRateProvidersPtr()->FindProvider(Utf2T(Item.second).get()); @@ -429,7 +429,7 @@ bool get_contact_state(const TiXmlNode *pXmlContact, CContactState& cst) { const char *sFromID = nullptr, *sToID = nullptr; - for (auto *pNode = m_pXmlCurrencyRates->FirstChildElement(g_szXmlSetting); pNode != nullptr; pNode = pNode->NextSiblingElement(g_szXmlSetting)) { + for (auto *pNode : TiXmlFilter(m_pXmlCurrencyRates, g_szXmlSetting)) { TNameValue Item = parse_setting_node(pNode); if (!mir_strcmpi(Item.first, DB_STR_FROM_ID)) sFromID = Item.second; @@ -443,7 +443,7 @@ bool get_contact_state(const TiXmlNode *pXmlContact, CContactState& cst) tstring GetXMLNodeValue(const char* pszXMLNodeName) const { - for (auto *pNode = m_pXmlCurrencyRates->FirstChildElement(g_szXmlSetting); pNode != nullptr; pNode = pNode->NextSiblingElement(g_szXmlSetting)) { + for (auto *pNode : TiXmlFilter(m_pXmlCurrencyRates, g_szXmlSetting)) { TNameValue Item = parse_setting_node(pNode); if (!mir_strcmpi(Item.first, pszXMLNodeName)) return Utf2T(Item.second).get(); @@ -489,7 +489,7 @@ bool import_contact(const TiXmlNode *pXmlContact, CImportContext &impctx) if (!cst.m_hContact) return false; - for (auto *pNode = pXmlContact->FirstChildElement(g_szXmlModule); pNode != nullptr; pNode = pNode->NextSiblingElement(g_szXmlModule)) + for (auto *pNode : TiXmlFilter(pXmlContact, g_szXmlModule)) if (!handle_module(cst.m_hContact, pNode)) return false; @@ -503,7 +503,7 @@ bool import_contact(const TiXmlNode *pXmlContact, CImportContext &impctx) size_t import_contacts(const TiXmlNode *pXmlContacts, CImportContext &impctx) { size_t cContacts = 0; - for (auto *pNode = pXmlContacts->FirstChildElement(g_szXmlContact); pNode != nullptr; pNode = pNode->NextSiblingElement(g_szXmlContact)) + for (auto *pNode : TiXmlFilter(pXmlContacts, g_szXmlContact)) if (import_contact(pNode, impctx)) ++cContacts; @@ -513,7 +513,7 @@ size_t import_contacts(const TiXmlNode *pXmlContacts, CImportContext &impctx) size_t handle_contacts_node(const TiXmlNode *pXmlRoot, CImportContext& impctx) { size_t cContacts = 0; - for (auto *pNode = pXmlRoot->FirstChildElement(); pNode != nullptr; pNode = pNode->NextSiblingElement()) { + for (auto *pNode : TiXmlEnum(pXmlRoot)) { if (!mir_strcmpi(g_szXmlContacts, pNode->Name())) cContacts += import_contacts(pNode, impctx); else -- cgit v1.2.3