blob: bc489ffaed0cc3ae6430051095d79882edf0fece [file] [log] [blame]
/**************************************************************
*
* 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_LOTRANGE_HXX
#define SC_LOTRANGE_HXX
#include <tools/solar.h>
#include <compiler.hxx>
// --------------------------------------------------------- class LotusRange -
class LotusRangeList;
typedef sal_uInt16 LR_ID;
#define ID_FAIL 0xFFFF
class LotusRange
{
friend class LotusRangeList;
private:
sal_uInt32 nHash;
SCCOL nColStart;
SCROW nRowStart;
SCCOL nColEnd;
SCROW nRowEnd;
LR_ID nId;
void MakeHash( void );
inline void Copy( const LotusRange& );
inline void SetId( LR_ID nId );
public:
LotusRange( SCCOL nCol, SCROW nRow );
LotusRange( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE );
LotusRange( const LotusRange& );
inline LotusRange &operator =( const LotusRange& );
inline sal_Bool operator ==( const LotusRange& ) const;
inline sal_Bool operator !=( const LotusRange& ) const;
inline sal_Bool IsSingle( void ) const;
};
inline void LotusRange::Copy( const LotusRange& rCpy )
{
nColStart = rCpy.nColStart;
nRowStart = rCpy.nRowStart;
nColEnd = rCpy.nColEnd;
nRowEnd = rCpy.nRowEnd;
}
inline void LotusRange::SetId( LR_ID nNewId )
{
nId = nNewId;
}
inline LotusRange &LotusRange::operator =( const LotusRange& rCpy )
{
Copy( rCpy );
return *this;
}
inline sal_Bool LotusRange::operator ==( const LotusRange& rRef ) const
{
return ( nHash == rRef.nHash && nColStart == rRef.nColStart &&
nRowStart == rRef.nRowStart && nColEnd == rRef.nColEnd &&
nRowEnd == rRef.nRowEnd );
}
inline sal_Bool LotusRange::operator !=( const LotusRange& rRef ) const
{
return ( nHash != rRef.nHash || nColStart != rRef.nColStart ||
nRowStart != rRef.nRowStart || nColEnd != rRef.nColEnd ||
nRowEnd != rRef.nRowEnd );
}
inline sal_Bool LotusRange::IsSingle( void ) const
{
return ( nColStart == nColEnd && nRowStart == nRowEnd );
}
// ----------------------------------------------------- class LotusRangeList -
class LotusRangeList : private List
{
private:
LR_ID nIdCnt;
ScComplexRefData aComplRef;
static SCCOL nEingCol;
static SCROW nEingRow;
public:
LotusRangeList( void );
~LotusRangeList( void );
inline sal_uInt16 GetIndex( SCCOL nCol, SCROW nRow );
inline sal_uInt16 GetIndex( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE );
sal_uInt16 GetIndex( const LotusRange& );
inline void Append( SCCOL nCol, SCROW nRow, const String& );
inline void Append( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE, const String& );
void Append( LotusRange* pLR, const String& rName );
inline static void SetEing( const SCCOL nCol, const SCROW nRow );
};
inline LR_ID LotusRangeList::GetIndex( SCCOL nCol, SCROW nRow )
{
LotusRange aRef( nCol, nRow );
return GetIndex( aRef );
}
inline LR_ID LotusRangeList::GetIndex( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE )
{
LotusRange aRef( nColS, nRowS, nColE, nRowE );
return GetIndex( aRef );
}
inline void LotusRangeList::Append( SCCOL nCol, SCROW nRow, const String& rName )
{
Append( new LotusRange( nCol, nRow ), rName );
}
inline void LotusRangeList::Append( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE, const String& r )
{
Append( new LotusRange( nColS, nRowS, nColE, nRowE ), r );
}
inline void LotusRangeList::SetEing( const SCCOL nCol, const SCROW nRow )
{
nEingCol = nCol;
nEingRow = nRow;
}
#endif