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_LOTRANGE_HXX
25 #define SC_LOTRANGE_HXX
26
27 #include <tools/solar.h>
28 #include <compiler.hxx>
29
30 // --------------------------------------------------------- class LotusRange -
31
32 class LotusRangeList;
33
34 typedef sal_uInt16 LR_ID;
35 #define ID_FAIL 0xFFFF
36
37 class LotusRange
38 {
39 friend class LotusRangeList;
40 private:
41 sal_uInt32 nHash;
42 SCCOL nColStart;
43 SCROW nRowStart;
44 SCCOL nColEnd;
45 SCROW nRowEnd;
46 LR_ID nId;
47 void MakeHash( void );
48 inline void Copy( const LotusRange& );
49 inline void SetId( LR_ID nId );
50 public:
51 LotusRange( SCCOL nCol, SCROW nRow );
52 LotusRange( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE );
53 LotusRange( const LotusRange& );
54 inline LotusRange &operator =( const LotusRange& );
55 inline sal_Bool operator ==( const LotusRange& ) const;
56 inline sal_Bool operator !=( const LotusRange& ) const;
57 inline sal_Bool IsSingle( void ) const;
58 };
59
60
Copy(const LotusRange & rCpy)61 inline void LotusRange::Copy( const LotusRange& rCpy )
62 {
63 nColStart = rCpy.nColStart;
64 nRowStart = rCpy.nRowStart;
65 nColEnd = rCpy.nColEnd;
66 nRowEnd = rCpy.nRowEnd;
67 }
68
69
SetId(LR_ID nNewId)70 inline void LotusRange::SetId( LR_ID nNewId )
71 {
72 nId = nNewId;
73 }
74
75
operator =(const LotusRange & rCpy)76 inline LotusRange &LotusRange::operator =( const LotusRange& rCpy )
77 {
78 Copy( rCpy );
79 return *this;
80 }
81
82
operator ==(const LotusRange & rRef) const83 inline sal_Bool LotusRange::operator ==( const LotusRange& rRef ) const
84 {
85 return ( nHash == rRef.nHash && nColStart == rRef.nColStart &&
86 nRowStart == rRef.nRowStart && nColEnd == rRef.nColEnd &&
87 nRowEnd == rRef.nRowEnd );
88 }
89
90
operator !=(const LotusRange & rRef) const91 inline sal_Bool LotusRange::operator !=( const LotusRange& rRef ) const
92 {
93 return ( nHash != rRef.nHash || nColStart != rRef.nColStart ||
94 nRowStart != rRef.nRowStart || nColEnd != rRef.nColEnd ||
95 nRowEnd != rRef.nRowEnd );
96 }
97
98
IsSingle(void) const99 inline sal_Bool LotusRange::IsSingle( void ) const
100 {
101 return ( nColStart == nColEnd && nRowStart == nRowEnd );
102 }
103
104
105
106 // ----------------------------------------------------- class LotusRangeList -
107
108 class LotusRangeList : private List
109 {
110 private:
111 LR_ID nIdCnt;
112 ScComplexRefData aComplRef;
113 static SCCOL nEingCol;
114 static SCROW nEingRow;
115 public:
116 LotusRangeList( void );
117 ~LotusRangeList( void );
118 inline sal_uInt16 GetIndex( SCCOL nCol, SCROW nRow );
119 inline sal_uInt16 GetIndex( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE );
120 sal_uInt16 GetIndex( const LotusRange& );
121 inline void Append( SCCOL nCol, SCROW nRow, const String& );
122 inline void Append( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE, const String& );
123 void Append( LotusRange* pLR, const String& rName );
124 inline static void SetEing( const SCCOL nCol, const SCROW nRow );
125 };
126
127
GetIndex(SCCOL nCol,SCROW nRow)128 inline LR_ID LotusRangeList::GetIndex( SCCOL nCol, SCROW nRow )
129 {
130 LotusRange aRef( nCol, nRow );
131 return GetIndex( aRef );
132 }
133
134
GetIndex(SCCOL nColS,SCROW nRowS,SCCOL nColE,SCROW nRowE)135 inline LR_ID LotusRangeList::GetIndex( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE )
136 {
137 LotusRange aRef( nColS, nRowS, nColE, nRowE );
138 return GetIndex( aRef );
139 }
140
141
Append(SCCOL nCol,SCROW nRow,const String & rName)142 inline void LotusRangeList::Append( SCCOL nCol, SCROW nRow, const String& rName )
143 {
144 Append( new LotusRange( nCol, nRow ), rName );
145 }
146
147
Append(SCCOL nColS,SCROW nRowS,SCCOL nColE,SCROW nRowE,const String & r)148 inline void LotusRangeList::Append( SCCOL nColS, SCROW nRowS, SCCOL nColE, SCROW nRowE, const String& r )
149 {
150 Append( new LotusRange( nColS, nRowS, nColE, nRowE ), r );
151 }
152
153
SetEing(const SCCOL nCol,const SCROW nRow)154 inline void LotusRangeList::SetEing( const SCCOL nCol, const SCROW nRow )
155 {
156 nEingCol = nCol;
157 nEingRow = nRow;
158 }
159
160 #endif
161
162
163
164