diff options
author | Philipp Lohmann <pl@openoffice.org> | 2009-07-09 14:01:10 +0000 |
---|---|---|
committer | Philipp Lohmann <pl@openoffice.org> | 2009-07-09 14:01:10 +0000 |
commit | 3f6401a45f6c8b112752900e959384080e5a4522 (patch) | |
tree | ddfb0a71adad8e9b03312a875061af81d749d6b5 | |
parent | e83bd2a5f6cab65ececd3a22722a41bbbeaf43b7 (diff) |
add: set of possible values
-rw-r--r-- | tools/inc/tools/multisel.hxx | 14 | ||||
-rw-r--r-- | tools/source/memtools/multisel.cxx | 23 |
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" ); |