diff options
author | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-14 17:25:31 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-14 17:25:31 -0500 |
commit | d56778ac4b75517f87aaf71763c51dfdc1eb02c3 (patch) | |
tree | 21ef394b43bba43d7999f898d0b62b8ccc8dcd8f /sc | |
parent | 4740d607c09025aa2a645e7578514a580dec15e5 (diff) |
Prefer for_each over manual loop.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/data/table3.cxx | 97 |
1 files changed, 54 insertions, 43 deletions
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index f94f6b2d507f..afdbed1bcb49 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -1664,7 +1664,43 @@ void ScTable::TopTenQuery( ScQueryParam& rParam ) DestroySortCollator(); } -static void lcl_PrepareQuery( ScDocument* pDoc, ScTable* pTab, ScQueryParam& rParam ) +namespace { + +class PrepareQueryItem : public std::unary_function<ScQueryEntry::Item, void> +{ + const ScDocument& mrDoc; +public: + PrepareQueryItem(const ScDocument& rDoc) : mrDoc(rDoc) {} + + void operator() (ScQueryEntry::Item& rItem) + { + // Double-check if the query by date is really appropriate. + + if (rItem.meType != ScQueryEntry::ByDate) + return; + + sal_uInt32 nIndex = 0; + bool bNumber = mrDoc.GetFormatTable()-> + IsNumberFormat(rItem.maString, nIndex, rItem.mfVal); + + if (bNumber && ((nIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0)) + { + const SvNumberformat* pEntry = mrDoc.GetFormatTable()->GetEntry(nIndex); + if (pEntry) + { + short nNumFmtType = pEntry->GetType(); + if (!((nNumFmtType & NUMBERFORMAT_DATE) && !(nNumFmtType & NUMBERFORMAT_TIME))) + rItem.meType = ScQueryEntry::ByValue; // not a date only + } + else + rItem.meType = ScQueryEntry::ByValue; // what the ... not a date + } + else + rItem.meType = ScQueryEntry::ByValue; // not a date + } +}; + +void lcl_PrepareQuery( ScDocument* pDoc, ScTable* pTab, ScQueryParam& rParam ) { bool bTopTen = false; SCSIZE nEntryCount = rParam.GetEntryCount(); @@ -1672,53 +1708,26 @@ static void lcl_PrepareQuery( ScDocument* pDoc, ScTable* pTab, ScQueryParam& rPa for ( SCSIZE i = 0; i < nEntryCount; ++i ) { ScQueryEntry& rEntry = rParam.GetEntry(i); - if ( rEntry.bDoQuery ) + if (!rEntry.bDoQuery) + continue; + + ScQueryEntry::QueryItemsType& rItems = rEntry.GetQueryItems(); + std::for_each(rItems.begin(), rItems.end(), PrepareQueryItem(*pDoc)); + + if ( !bTopTen ) { - ScQueryEntry::QueryItemsType& rItems = rEntry.GetQueryItems(); - ScQueryEntry::QueryItemsType::iterator itr = rItems.begin(), itrEnd = rItems.end(); - for (; itr != itrEnd; ++itr) + switch ( rEntry.eOp ) { - ScQueryEntry::Item& rItem = *itr; - if (rItem.meType == ScQueryEntry::ByString) + case SC_TOPVAL: + case SC_BOTVAL: + case SC_TOPPERC: + case SC_BOTPERC: { - sal_uInt32 nIndex = 0; - bool bNumber = pDoc->GetFormatTable()-> - IsNumberFormat(rItem.maString, nIndex, rItem.mfVal); - if (rItem.meType == ScQueryEntry::ByDate) - { - if (bNumber && ((nIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0)) - { - const SvNumberformat* pEntry = pDoc->GetFormatTable()->GetEntry(nIndex); - if (pEntry) - { - short nNumFmtType = pEntry->GetType(); - if (!((nNumFmtType & NUMBERFORMAT_DATE) && !(nNumFmtType & NUMBERFORMAT_TIME))) - rItem.meType = ScQueryEntry::ByValue; // not a date only - } - else - rItem.meType = ScQueryEntry::ByValue; // what the ... not a date - } - else - rItem.meType = ScQueryEntry::ByValue; // not a date - } + bTopTen = true; } - } - - if ( !bTopTen ) - { - switch ( rEntry.eOp ) + break; + default: { - case SC_TOPVAL: - case SC_BOTVAL: - case SC_TOPPERC: - case SC_BOTPERC: - { - bTopTen = true; - } - break; - default: - { - } } } } @@ -1730,6 +1739,8 @@ static void lcl_PrepareQuery( ScDocument* pDoc, ScTable* pTab, ScQueryParam& rPa } } +} + SCSIZE ScTable::Query(ScQueryParam& rParamOrg, bool bKeepSub) { ScQueryParam aParam( rParamOrg ); |