1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // ============================================================================ 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #ifndef _SC_CSVSPLITS_HXX 27*b1cdbd2cSJim Jagielski #define _SC_CSVSPLITS_HXX 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #include <sal/types.h> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <vector> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski // ============================================================================ 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski /** Constant for an invalid vector index. */ 37*b1cdbd2cSJim Jagielski const sal_uInt32 CSV_VEC_NOTFOUND = SAL_MAX_UINT32; 38*b1cdbd2cSJim Jagielski /** Constant for an invalid ruler position. */ 39*b1cdbd2cSJim Jagielski const sal_Int32 CSV_POS_INVALID = -1; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------- 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski /** A vector of column splits that supports inserting, removing and moving splits. */ 45*b1cdbd2cSJim Jagielski class ScCsvSplits 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski private: 48*b1cdbd2cSJim Jagielski typedef ::std::vector< sal_Int32 > ScSplitVector; 49*b1cdbd2cSJim Jagielski typedef ScSplitVector::iterator iterator; 50*b1cdbd2cSJim Jagielski typedef ScSplitVector::const_iterator const_iterator; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski ScSplitVector maVec; /// The split containter. 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski public: 55*b1cdbd2cSJim Jagielski // *** access by position *** --------------------------------------------- 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski /** Inserts a new split at position nPos into the vector. 58*b1cdbd2cSJim Jagielski @return true = split inserted (nPos was valid and empty). */ 59*b1cdbd2cSJim Jagielski bool Insert( sal_Int32 nPos ); 60*b1cdbd2cSJim Jagielski /** Removes a split by position. 61*b1cdbd2cSJim Jagielski @return true = split found and removed. */ 62*b1cdbd2cSJim Jagielski bool Remove( sal_Int32 nPos ); 63*b1cdbd2cSJim Jagielski /** Removes a range of splits in the given position range. */ 64*b1cdbd2cSJim Jagielski void RemoveRange( sal_Int32 nPosStart, sal_Int32 nPosEnd ); 65*b1cdbd2cSJim Jagielski /** Removes all elements from the vector. */ 66*b1cdbd2cSJim Jagielski void Clear(); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski /** Returns true if at position nPos is a split. */ 69*b1cdbd2cSJim Jagielski bool HasSplit( sal_Int32 nPos ) const; 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski // *** access by index *** ------------------------------------------------ 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski /** Searches for a split at position nPos. 74*b1cdbd2cSJim Jagielski @return the vector index of the split. */ 75*b1cdbd2cSJim Jagielski sal_uInt32 GetIndex( sal_Int32 nPos ) const; 76*b1cdbd2cSJim Jagielski /** Returns index of the first split greater than or equal to nPos. */ 77*b1cdbd2cSJim Jagielski sal_uInt32 LowerBound( sal_Int32 nPos ) const; 78*b1cdbd2cSJim Jagielski /** Returns index of the last split less than or equal to nPos. */ 79*b1cdbd2cSJim Jagielski sal_uInt32 UpperBound( sal_Int32 nPos ) const; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski /** Returns the number of splits. */ Count() const82*b1cdbd2cSJim Jagielski inline sal_uInt32 Count() const 83*b1cdbd2cSJim Jagielski { return maVec.size(); } 84*b1cdbd2cSJim Jagielski /** Returns the position of the specified split. */ 85*b1cdbd2cSJim Jagielski sal_Int32 GetPos( sal_uInt32 nIndex ) const; 86*b1cdbd2cSJim Jagielski /** Returns the position of the specified split. */ operator [](sal_uInt32 nIndex) const87*b1cdbd2cSJim Jagielski inline sal_Int32 operator[]( sal_uInt32 nIndex ) const 88*b1cdbd2cSJim Jagielski { return GetPos( nIndex ); } 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski private: 91*b1cdbd2cSJim Jagielski /** Returns the vector index of an iterator. */ 92*b1cdbd2cSJim Jagielski sal_uInt32 GetIterIndex( const_iterator aIter ) const; 93*b1cdbd2cSJim Jagielski }; 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski // ============================================================================ 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski #endif 99*b1cdbd2cSJim Jagielski 100