summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2011-11-14 17:25:31 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2011-11-14 17:25:31 -0500
commitd56778ac4b75517f87aaf71763c51dfdc1eb02c3 (patch)
tree21ef394b43bba43d7999f898d0b62b8ccc8dcd8f /sc
parent4740d607c09025aa2a645e7578514a580dec15e5 (diff)
Prefer for_each over manual loop.
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/data/table3.cxx97
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 );