xref: /trunk/main/sc/source/ui/dbgui/csvsplits.cxx (revision b3f79822)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sc.hxx"
26 
27 
28 // ============================================================================
29 #include "csvsplits.hxx"
30 #include <tools/debug.hxx>
31 
32 #include <algorithm>
33 
34 
35 // ============================================================================
36 
Insert(sal_Int32 nPos)37 bool ScCsvSplits::Insert( sal_Int32 nPos )
38 {
39     bool bValid = (nPos >= 0);
40     if( bValid )
41     {
42         iterator aIter = ::std::lower_bound( maVec.begin(), maVec.end(), nPos );
43         bValid = (aIter == maVec.end()) || (*aIter != nPos);
44         if( bValid )
45             aIter = maVec.insert( aIter, nPos );
46     }
47     return bValid;
48 }
49 
Remove(sal_Int32 nPos)50 bool ScCsvSplits::Remove( sal_Int32 nPos )
51 {
52     sal_uInt32 nIndex = GetIndex( nPos );
53     bool bValid = (nIndex != CSV_VEC_NOTFOUND);
54     if( bValid )
55         maVec.erase( maVec.begin() + nIndex );
56     return bValid;
57 }
58 
RemoveRange(sal_Int32 nPosStart,sal_Int32 nPosEnd)59 void ScCsvSplits::RemoveRange( sal_Int32 nPosStart, sal_Int32 nPosEnd )
60 {
61     sal_uInt32 nStartIx = LowerBound( nPosStart );
62     sal_uInt32 nEndIx = UpperBound( nPosEnd );
63     if( (nStartIx != CSV_VEC_NOTFOUND) && (nEndIx != CSV_VEC_NOTFOUND) && (nStartIx <= nEndIx) )
64         maVec.erase( maVec.begin() + nStartIx, maVec.begin() + nEndIx + 1 );
65 }
66 
Clear()67 void ScCsvSplits::Clear()
68 {
69     maVec.clear();
70 }
71 
HasSplit(sal_Int32 nPos) const72 bool ScCsvSplits::HasSplit( sal_Int32 nPos ) const
73 {
74     return GetIndex( nPos ) != CSV_VEC_NOTFOUND;
75 }
76 
77 
78 // ----------------------------------------------------------------------------
79 
GetIndex(sal_Int32 nPos) const80 sal_uInt32 ScCsvSplits::GetIndex( sal_Int32 nPos ) const
81 {
82     const_iterator aIter = ::std::lower_bound( maVec.begin(), maVec.end(), nPos );
83     return GetIterIndex( ((aIter != maVec.end()) && (*aIter == nPos)) ? aIter : maVec.end() );
84 }
85 
LowerBound(sal_Int32 nPos) const86 sal_uInt32 ScCsvSplits::LowerBound( sal_Int32 nPos ) const
87 {
88     return GetIterIndex( ::std::lower_bound( maVec.begin(), maVec.end(), nPos ) );
89 }
90 
UpperBound(sal_Int32 nPos) const91 sal_uInt32 ScCsvSplits::UpperBound( sal_Int32 nPos ) const
92 {
93     sal_uInt32 nIndex = LowerBound( nPos );
94     if( nIndex == CSV_VEC_NOTFOUND )
95         return Count() ? (Count() - 1) : CSV_VEC_NOTFOUND;
96     if( GetPos( nIndex ) == nPos )
97         return nIndex;
98     return nIndex ? (nIndex - 1) : CSV_VEC_NOTFOUND;
99 }
100 
GetPos(sal_uInt32 nIndex) const101 sal_Int32 ScCsvSplits::GetPos( sal_uInt32 nIndex ) const
102 {
103     return (nIndex < Count()) ? maVec[ nIndex ] : CSV_POS_INVALID;
104 }
105 
106 
107 // ----------------------------------------------------------------------------
108 
GetIterIndex(const_iterator aIter) const109 sal_uInt32 ScCsvSplits::GetIterIndex( const_iterator aIter ) const
110 {
111     return (aIter == maVec.end()) ? CSV_VEC_NOTFOUND : (aIter - maVec.begin());
112 }
113 
114 
115 // ============================================================================
116 
117