summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Lohmann <pl@openoffice.org>2009-07-09 14:01:10 +0000
committerPhilipp Lohmann <pl@openoffice.org>2009-07-09 14:01:10 +0000
commit3f6401a45f6c8b112752900e959384080e5a4522 (patch)
treeddfb0a71adad8e9b03312a875061af81d749d6b5
parente83bd2a5f6cab65ececd3a22722a41bbbeaf43b7 (diff)
add: set of possible values
-rw-r--r--tools/inc/tools/multisel.hxx14
-rw-r--r--tools/source/memtools/multisel.cxx23
2 files changed, 28 insertions, 9 deletions
diff --git a/tools/inc/tools/multisel.hxx b/tools/inc/tools/multisel.hxx
index 9e018d6b8479..e30aff744897 100644
--- a/tools/inc/tools/multisel.hxx
+++ b/tools/inc/tools/multisel.hxx
@@ -36,6 +36,7 @@
#include <tools/string.hxx>
#include <vector>
+#include <set>
//------------------------------------------------------------------
@@ -128,12 +129,14 @@ public:
StringRangeEnumerator( const rtl::OUString& i_rInput,
sal_Int32 i_nMinNumber = -1,
sal_Int32 i_nMaxNumber = -1,
- sal_Int32 i_nLogicalOffset = -1 ) :
+ sal_Int32 i_nLogicalOffset = -1,
+ std::set< sal_Int32 >* i_pPossibleValues = NULL
+ ) :
mnMin( i_nMinNumber ),
mnMax( i_nMaxNumber ),
mnOffset( i_nLogicalOffset )
{
- getRangesFromString( i_rInput, maSequence, mnMin, mnMax, mnOffset );
+ getRangesFromString( i_rInput, maSequence, mnMin, mnMax, mnOffset, i_pPossibleValues );
}
size_t size() const { return maSequence.size(); }
@@ -147,10 +150,10 @@ public:
sal_Int32 getLogicalOffset() const { return mnOffset; }
void setLogicalOffset( sal_Int32 i_nOffset ) { mnOffset = i_nOffset; }
- void setRange( const rtl::OUString& i_rNewRange )
+ void setRange( const rtl::OUString& i_rNewRange, std::set< sal_Int32 >* i_pPossibleValues = NULL )
{
maSequence.clear();
- getRangesFromString( i_rNewRange, maSequence, mnMin, mnMax, mnOffset );
+ getRangesFromString( i_rNewRange, maSequence, mnMin, mnMax, mnOffset, i_pPossibleValues );
}
@@ -183,7 +186,8 @@ public:
std::vector< sal_Int32 >& o_rPageVector,
sal_Int32 i_nMinNumber = -1,
sal_Int32 i_nMaxNumber = -1,
- sal_Int32 i_nLogicalOffset = -1
+ sal_Int32 i_nLogicalOffset = -1,
+ std::set< sal_Int32 >* i_pPossibleValues = NULL
);
};
diff --git a/tools/source/memtools/multisel.cxx b/tools/source/memtools/multisel.cxx
index a28b54c2347e..642a2398ae91 100644
--- a/tools/source/memtools/multisel.cxx
+++ b/tools/source/memtools/multisel.cxx
@@ -964,11 +964,17 @@ static bool lcl_getSubRangeBounds(
return bRes;
}
+inline bool checkValue( std::set< sal_Int32 >* i_pPossibleValues, sal_Int32 nVal )
+{
+ return i_pPossibleValues ? (i_pPossibleValues->find( nVal ) != i_pPossibleValues->end()) : true;
+}
+
bool StringRangeEnumerator::getRangesFromString( const OUString& i_rPageRange,
std::vector< sal_Int32 >& o_rPageVector,
sal_Int32 i_nMinNumber,
sal_Int32 i_nMaxNumber,
- sal_Int32 i_nLogicalOffset
+ sal_Int32 i_nLogicalOffset,
+ std::set< sal_Int32 >* i_pPossibleValues
)
{
bool bRes = false;
@@ -1002,16 +1008,25 @@ bool StringRangeEnumerator::getRangesFromString( const OUString& i_rPageRange,
{
// add pages of sub range to vector
if (nFirst == nLast)
- aTmpVector.push_back( nFirst );
+ {
+ if( checkValue( i_pPossibleValues, nFirst ) )
+ aTmpVector.push_back( nFirst );
+ }
else if (nFirst < nLast)
{
for (sal_Int32 i = nFirst; i <= nLast; ++i)
- aTmpVector.push_back( i );
+ {
+ if( checkValue( i_pPossibleValues, i ) )
+ aTmpVector.push_back( i );
+ }
}
else if (nFirst > nLast)
{
for (sal_Int32 i = nFirst; i >= nLast; --i)
- aTmpVector.push_back( i );
+ {
+ if( checkValue( i_pPossibleValues, i ) )
+ aTmpVector.push_back( i );
+ }
}
else
OSL_ENSURE( 0, "unexpected case" );