xref: /AOO41X/main/sc/source/filter/inc/lotrange.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
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