summaryrefslogtreecommitdiff
path: root/sc/source/core/tool/queryparam.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2011-11-04 21:25:49 -0400
committerKohei Yoshida <kohei.yoshida@suse.com>2011-11-04 22:40:30 -0400
commita1675f6d7691d57df1c80537e1be257172aa9d49 (patch)
treed3061edf8c86e0dc17fefda9923e76a613cfe0ad /sc/source/core/tool/queryparam.cxx
parent369d2726c7a43f53cafac21520fd0b307f478254 (diff)
Hide the query strings member, and add relevant methods for it.
Diffstat (limited to 'sc/source/core/tool/queryparam.cxx')
-rw-r--r--sc/source/core/tool/queryparam.cxx70
1 files changed, 55 insertions, 15 deletions
diff --git a/sc/source/core/tool/queryparam.cxx b/sc/source/core/tool/queryparam.cxx
index ca7d3a2c97b6..29fdb8b433cf 100644
--- a/sc/source/core/tool/queryparam.cxx
+++ b/sc/source/core/tool/queryparam.cxx
@@ -34,6 +34,7 @@
#include "queryparam.hxx"
#include <unotools/textsearch.hxx>
#include <unotools/transliterationwrapper.hxx>
+#include <unotools/collatorwrapper.hxx>
using ::std::vector;
@@ -44,7 +45,6 @@ const SCSIZE MAXQUERY = 8;
}
ScQueryEntry::ScQueryEntry() :
- pStr(new String),
bDoQuery(false),
bQueryByString(false),
bQueryByDate(false),
@@ -58,7 +58,6 @@ ScQueryEntry::ScQueryEntry() :
}
ScQueryEntry::ScQueryEntry(const ScQueryEntry& r) :
- pStr(new String(*r.pStr)),
bDoQuery(r.bDoQuery),
bQueryByString(r.bQueryByString),
bQueryByDate(r.bQueryByDate),
@@ -67,13 +66,13 @@ ScQueryEntry::ScQueryEntry(const ScQueryEntry& r) :
eConnect(r.eConnect),
nVal(r.nVal),
pSearchParam(NULL),
- pSearchText(NULL)
+ pSearchText(NULL),
+ maQueryStrings(r.maQueryStrings)
{
}
ScQueryEntry::~ScQueryEntry()
{
- delete pStr;
delete pSearchParam;
delete pSearchText;
}
@@ -87,7 +86,7 @@ ScQueryEntry& ScQueryEntry::operator=( const ScQueryEntry& r )
eConnect = r.eConnect;
nField = r.nField;
nVal = r.nVal;
- *pStr = *r.pStr;
+ maQueryStrings = r.maQueryStrings;
delete pSearchParam;
delete pSearchText;
@@ -99,24 +98,62 @@ ScQueryEntry& ScQueryEntry::operator=( const ScQueryEntry& r )
bool ScQueryEntry::IsQueryStringEmpty() const
{
- return pStr->Len() == 0;
+ return maQueryStrings.empty();
+}
+
+namespace {
+
+class CompareString : std::binary_function<rtl::OUString, rtl::OUString, bool>
+{
+ CollatorWrapper* mpCollator;
+public:
+ CompareString(bool bCaseSens) :
+ mpCollator(
+ bCaseSens ? ScGlobal::GetCaseCollator() : ScGlobal::GetCollator())
+ {}
+
+ bool operator() (const rtl::OUString& rL, const rtl::OUString& rR) const
+ {
+ return mpCollator->compareString(rL, rR) < 0;
+ }
+};
+
}
bool ScQueryEntry::MatchByString(const rtl::OUString& rStr, bool bCaseSens) const
{
- utl::TransliterationWrapper* pTransliteration = bCaseSens ?
- ScGlobal::GetCaseTransliteration() : ScGlobal::GetpTransliteration();
- return pTransliteration->isEqual(rStr, *pStr);
+ QueryStringsType::const_iterator itr =
+ std::lower_bound(
+ maQueryStrings.begin(), maQueryStrings.end(), rStr, CompareString(bCaseSens));
+
+ if (itr == maQueryStrings.end())
+ return false;
+
+ utl::TransliterationWrapper* pTransliteration =
+ bCaseSens ? ScGlobal::GetCaseTransliteration() : ScGlobal::GetpTransliteration();
+ return pTransliteration->isEqual(rStr, *itr);
+}
+
+void ScQueryEntry::SwapQueryStrings(QueryStringsType& rStrings)
+{
+ maQueryStrings.swap(rStrings);
+}
+
+void ScQueryEntry::SortQueryStrings(bool bCaseSens)
+{
+ std::sort(maQueryStrings.begin(), maQueryStrings.end(), CompareString(bCaseSens));
}
void ScQueryEntry::SetQueryString(const rtl::OUString& rStr)
{
- *pStr = String(rStr);
+ maQueryStrings.clear();
+ if (!rStr.isEmpty())
+ maQueryStrings.push_back(rStr);
}
rtl::OUString ScQueryEntry::GetQueryString() const
{
- return *pStr;
+ return maQueryStrings.empty() ? rtl::OUString() : maQueryStrings[0];
}
void ScQueryEntry::Clear()
@@ -128,7 +165,7 @@ void ScQueryEntry::Clear()
eConnect = SC_AND;
nField = 0;
nVal = 0.0;
- pStr->Erase();
+ maQueryStrings.clear();
delete pSearchParam;
delete pSearchText;
@@ -145,7 +182,7 @@ bool ScQueryEntry::operator==( const ScQueryEntry& r ) const
&& eConnect == r.eConnect
&& nField == r.nField
&& nVal == r.nVal
- && *pStr == *r.pStr;
+ && maQueryStrings == r.maQueryStrings;
//! pSearchParam und pSearchText nicht vergleichen
}
@@ -153,8 +190,11 @@ utl::TextSearch* ScQueryEntry::GetSearchTextPtr( bool bCaseSens ) const
{
if ( !pSearchParam )
{
- pSearchParam = new utl::SearchParam( *pStr, utl::SearchParam::SRCH_REGEXP,
- bCaseSens, false, false );
+ rtl::OUString aStr;
+ if (!maQueryStrings.empty())
+ aStr = maQueryStrings[0];
+ pSearchParam = new utl::SearchParam(
+ aStr, utl::SearchParam::SRCH_REGEXP, bCaseSens, false, false);
pSearchText = new utl::TextSearch( *pSearchParam, *ScGlobal::pCharClass );
}
return pSearchText;