/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef SC_COLLECT_HXX #define SC_COLLECT_HXX #include "address.hxx" #include #ifndef INCLUDED_LIMITS_H #include #define INCLUDED_LIMITS_H #endif #include "scdllapi.h" #define MAXCOLLECTIONSIZE 16384 #define MAXDELTA 1024 #define SCPOS_INVALID USHRT_MAX #define SC_STRTYPE_VALUE 0 #define SC_STRTYPE_STANDARD 1 class ScDocument; class SC_DLLPUBLIC ScDataObject { public: ScDataObject() {} virtual ~ScDataObject(); virtual ScDataObject* Clone() const = 0; }; class SC_DLLPUBLIC ScCollection : public ScDataObject { protected: sal_uInt16 nCount; sal_uInt16 nLimit; sal_uInt16 nDelta; ScDataObject** pItems; public: ScCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4); ScCollection(const ScCollection& rCollection); virtual ~ScCollection(); virtual ScDataObject* Clone() const; void AtFree(sal_uInt16 nIndex); void Free(ScDataObject* pScDataObject); void FreeAll(); sal_Bool AtInsert(sal_uInt16 nIndex, ScDataObject* pScDataObject); virtual sal_Bool Insert(ScDataObject* pScDataObject); ScDataObject* At(sal_uInt16 nIndex) const; virtual sal_uInt16 IndexOf(ScDataObject* pScDataObject) const; sal_uInt16 GetCount() const; ScDataObject* operator[]( const sal_uInt16 nIndex) const {return At(nIndex);} ScCollection& operator=( const ScCollection& rCol ); }; class SC_DLLPUBLIC ScSortedCollection : public ScCollection { private: sal_Bool bDuplicates; protected: // fuer ScStrCollection Load/Store void SetDups( sal_Bool bVal ) { bDuplicates = bVal; } sal_Bool IsDups() const { return bDuplicates; } public: ScSortedCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False); ScSortedCollection(const ScSortedCollection& rScSortedCollection) : ScCollection(rScSortedCollection), bDuplicates(rScSortedCollection.bDuplicates) {} virtual sal_uInt16 IndexOf(ScDataObject* pScDataObject) const; virtual short Compare(ScDataObject* pKey1, ScDataObject* pKey2) const = 0; virtual sal_Bool IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) const; sal_Bool Search(ScDataObject* pScDataObject, sal_uInt16& rIndex) const; virtual sal_Bool Insert(ScDataObject* pScDataObject); virtual sal_Bool InsertPos(ScDataObject* pScDataObject, sal_uInt16& nIndex); sal_Bool operator==(const ScSortedCollection& rCmp) const; }; //------------------------------------------------------------------------ class StrData : public ScDataObject { friend class ScStrCollection; String aStr; public: StrData(const String& rStr) : aStr(rStr) {} StrData(const StrData& rData) : ScDataObject(), aStr(rData.aStr) {} virtual ScDataObject* Clone() const; const String& GetString() const { return aStr; } // SetString nur, wenn StrData nicht in ScStrCollection ist! !!! // z.B. fuer Searcher void SetString( const String& rNew ) { aStr = rNew; } }; //------------------------------------------------------------------------ class SvStream; class SC_DLLPUBLIC ScStrCollection : public ScSortedCollection { public: ScStrCollection(sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False) : ScSortedCollection ( nLim, nDel, bDup ) {} ScStrCollection(const ScStrCollection& rScStrCollection) : ScSortedCollection ( rScStrCollection ) {} virtual ScDataObject* Clone() const; StrData* operator[]( const sal_uInt16 nIndex) const {return (StrData*)At(nIndex);} virtual short Compare(ScDataObject* pKey1, ScDataObject* pKey2) const; }; //------------------------------------------------------------------------ // TypedScStrCollection: wie ScStrCollection, nur, dass Zahlen vor Strings // sortiert werden class TypedStrData : public ScDataObject { public: TypedStrData( const String& rStr, double nVal = 0.0, sal_uInt16 nType = SC_STRTYPE_STANDARD ) : aStrValue(rStr), nValue(nVal), nStrType(nType) {} //UNUSED2008-05 TypedStrData( ScDocument* pDoc, SCCOL nCol, SCROW nRow, SCTAB nTab, //UNUSED2008-05 sal_Bool bAllStrings ); TypedStrData( const TypedStrData& rCpy ) : ScDataObject(), aStrValue(rCpy.aStrValue), nValue(rCpy.nValue), nStrType(rCpy.nStrType) {} virtual ScDataObject* Clone() const; sal_Bool IsStrData() const { return nStrType != 0; } const String& GetString() const { return aStrValue; } double GetValue () const { return nValue; } private: friend class TypedScStrCollection; String aStrValue; double nValue; sal_uInt16 nStrType; // 0 = Value }; class SC_DLLPUBLIC TypedScStrCollection : public ScSortedCollection { private: sal_Bool bCaseSensitive; public: TypedScStrCollection( sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = sal_False ); TypedScStrCollection( const TypedScStrCollection& rCpy ) : ScSortedCollection( rCpy ) { bCaseSensitive = rCpy.bCaseSensitive; } ~TypedScStrCollection(); virtual ScDataObject* Clone() const; virtual short Compare( ScDataObject* pKey1, ScDataObject* pKey2 ) const; TypedStrData* operator[]( const sal_uInt16 nIndex) const; void SetCaseSensitive( sal_Bool bSet ); sal_Bool FindText( const String& rStart, String& rResult, sal_uInt16& rPos, sal_Bool bBack ) const; sal_Bool GetExactMatch( String& rString ) const; }; #endif