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 #ifndef SC_COLLECT_HXX 25 #define SC_COLLECT_HXX 26 27 #include "address.hxx" 28 #include <tools/string.hxx> 29 30 #ifndef INCLUDED_LIMITS_H 31 #include <limits.h> 32 #define INCLUDED_LIMITS_H 33 #endif 34 #include "scdllapi.h" 35 36 #define MAXCOLLECTIONSIZE 16384 37 #define MAXDELTA 1024 38 #define SCPOS_INVALID USHRT_MAX 39 40 #define SC_STRTYPE_VALUE 0 41 #define SC_STRTYPE_STANDARD 1 42 43 class ScDocument; 44 45 class SC_DLLPUBLIC ScDataObject 46 { 47 public: ScDataObject()48 ScDataObject() {} 49 virtual ~ScDataObject(); 50 virtual ScDataObject* Clone() const = 0; 51 }; 52 53 class SC_DLLPUBLIC ScCollection : public ScDataObject 54 { 55 protected: 56 sal_uInt16 nCount; 57 sal_uInt16 nLimit; 58 sal_uInt16 nDelta; 59 ScDataObject** pItems; 60 public: 61 ScCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4); 62 ScCollection(const ScCollection& rCollection); 63 virtual ~ScCollection(); 64 65 virtual ScDataObject* Clone() const; 66 67 void AtFree(sal_uInt16 nIndex); 68 void Free(ScDataObject* pScDataObject); 69 void FreeAll(); 70 71 sal_Bool AtInsert(sal_uInt16 nIndex, ScDataObject* pScDataObject); 72 virtual sal_Bool Insert(ScDataObject* pScDataObject); 73 74 ScDataObject* At(sal_uInt16 nIndex) const; 75 virtual sal_uInt16 IndexOf(ScDataObject* pScDataObject) const; 76 sal_uInt16 GetCount() const; 77 operator [](const sal_uInt16 nIndex) const78 ScDataObject* operator[]( const sal_uInt16 nIndex) const {return At(nIndex);} 79 ScCollection& operator=( const ScCollection& rCol ); 80 }; 81 82 83 class SC_DLLPUBLIC ScSortedCollection : public ScCollection 84 { 85 private: 86 sal_Bool bDuplicates; 87 protected: 88 // fuer ScStrCollection Load/Store SetDups(sal_Bool bVal)89 void SetDups( sal_Bool bVal ) { bDuplicates = bVal; } IsDups() const90 sal_Bool IsDups() const { return bDuplicates; } 91 public: 92 ScSortedCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False); ScSortedCollection(const ScSortedCollection & rScSortedCollection)93 ScSortedCollection(const ScSortedCollection& rScSortedCollection) : 94 ScCollection(rScSortedCollection), 95 bDuplicates(rScSortedCollection.bDuplicates) {} 96 97 virtual sal_uInt16 IndexOf(ScDataObject* pScDataObject) const; 98 virtual short Compare(ScDataObject* pKey1, ScDataObject* pKey2) const = 0; 99 virtual sal_Bool IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) const; 100 sal_Bool Search(ScDataObject* pScDataObject, sal_uInt16& rIndex) const; 101 virtual sal_Bool Insert(ScDataObject* pScDataObject); 102 virtual sal_Bool InsertPos(ScDataObject* pScDataObject, sal_uInt16& nIndex); 103 104 sal_Bool operator==(const ScSortedCollection& rCmp) const; 105 }; 106 107 108 109 //------------------------------------------------------------------------ 110 class StrData : public ScDataObject 111 { 112 friend class ScStrCollection; 113 String aStr; 114 public: StrData(const String & rStr)115 StrData(const String& rStr) : aStr(rStr) {} StrData(const StrData & rData)116 StrData(const StrData& rData) : ScDataObject(), aStr(rData.aStr) {} 117 virtual ScDataObject* Clone() const; GetString() const118 const String& GetString() const { return aStr; } 119 // SetString nur, wenn StrData nicht in ScStrCollection ist! !!! 120 // z.B. fuer Searcher SetString(const String & rNew)121 void SetString( const String& rNew ) { aStr = rNew; } 122 }; 123 124 //------------------------------------------------------------------------ 125 126 class SvStream; 127 128 class SC_DLLPUBLIC ScStrCollection : public ScSortedCollection 129 { 130 public: ScStrCollection(sal_uInt16 nLim=4,sal_uInt16 nDel=4,sal_Bool bDup=sal_False)131 ScStrCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False) : 132 ScSortedCollection ( nLim, nDel, bDup ) {} ScStrCollection(const ScStrCollection & rScStrCollection)133 ScStrCollection(const ScStrCollection& rScStrCollection) : 134 ScSortedCollection ( rScStrCollection ) {} 135 136 virtual ScDataObject* Clone() const; operator [](const sal_uInt16 nIndex) const137 StrData* operator[]( const sal_uInt16 nIndex) const {return (StrData*)At(nIndex);} 138 virtual short Compare(ScDataObject* pKey1, ScDataObject* pKey2) const; 139 }; 140 141 //------------------------------------------------------------------------ 142 // TypedScStrCollection: wie ScStrCollection, nur, dass Zahlen vor Strings 143 // sortiert werden 144 145 class TypedStrData : public ScDataObject 146 { 147 public: TypedStrData(const String & rStr,double nVal=0.0,sal_uInt16 nType=SC_STRTYPE_STANDARD)148 TypedStrData( const String& rStr, double nVal = 0.0, 149 sal_uInt16 nType = SC_STRTYPE_STANDARD ) 150 : aStrValue(rStr), 151 nValue(nVal), 152 nStrType(nType) {} 153 154 //UNUSED2008-05 TypedStrData( ScDocument* pDoc, SCCOL nCol, SCROW nRow, SCTAB nTab, 155 //UNUSED2008-05 sal_Bool bAllStrings ); 156 TypedStrData(const TypedStrData & rCpy)157 TypedStrData( const TypedStrData& rCpy ) 158 : ScDataObject(), 159 aStrValue(rCpy.aStrValue), 160 nValue(rCpy.nValue), 161 nStrType(rCpy.nStrType) {} 162 163 virtual ScDataObject* Clone() const; 164 IsStrData() const165 sal_Bool IsStrData() const { return nStrType != 0; } GetString() const166 const String& GetString() const { return aStrValue; } GetValue() const167 double GetValue () const { return nValue; } 168 169 private: 170 friend class TypedScStrCollection; 171 172 String aStrValue; 173 double nValue; 174 sal_uInt16 nStrType; // 0 = Value 175 }; 176 177 class SC_DLLPUBLIC TypedScStrCollection : public ScSortedCollection 178 { 179 private: 180 sal_Bool bCaseSensitive; 181 182 public: 183 TypedScStrCollection( sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False ); 184 TypedScStrCollection(const TypedScStrCollection & rCpy)185 TypedScStrCollection( const TypedScStrCollection& rCpy ) 186 : ScSortedCollection( rCpy ) { bCaseSensitive = rCpy.bCaseSensitive; } 187 ~TypedScStrCollection(); 188 189 virtual ScDataObject* Clone() const; 190 virtual short Compare( ScDataObject* pKey1, ScDataObject* pKey2 ) const; 191 192 TypedStrData* operator[]( const sal_uInt16 nIndex) const; 193 194 void SetCaseSensitive( sal_Bool bSet ); 195 196 sal_Bool FindText( const String& rStart, String& rResult, sal_uInt16& rPos, sal_Bool bBack ) const; 197 sal_Bool GetExactMatch( String& rString ) const; 198 }; 199 200 #endif 201