xref: /AOO41X/main/sc/source/filter/excel/frmbase.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sc.hxx"
26 
27 
28 
29 
30 #include "formel.hxx"
31 
32 
33 
34 
~_ScRangeList()35 _ScRangeList::~_ScRangeList()
36 {
37     ScRange*    p = ( ScRange* ) First();
38 
39     while( p )
40     {
41         delete p;
42         p = ( ScRange* ) Next();
43     }
44 }
45 
46 
47 
48 
_ScRangeListTabs(void)49 _ScRangeListTabs::_ScRangeListTabs( void )
50 {
51     ppTabLists = new _ScRangeList*[ MAXTAB + 1 ];
52 
53     for( sal_uInt16 n = 0 ; n <= MAXTAB ; n++ )
54         ppTabLists[ n ] = NULL;
55 
56     bHasRanges = sal_False;
57     pAct = NULL;
58     nAct = 0;
59 }
60 
61 
~_ScRangeListTabs()62 _ScRangeListTabs::~_ScRangeListTabs()
63 {
64     if( bHasRanges )
65     {
66         for( sal_uInt16 n = 0 ; n <= MAXTAB ; n++ )
67         {
68             if( ppTabLists[ n ] )
69                 delete ppTabLists[ n ];
70         }
71     }
72 
73     delete[] ppTabLists;
74 }
75 
76 
Append(ScSingleRefData a,const sal_Bool b)77 void _ScRangeListTabs::Append( ScSingleRefData a, const sal_Bool b )
78 {
79     if( b )
80     {
81         if( a.nTab > MAXTAB )
82             a.nTab = MAXTAB;
83 
84         if( a.nCol > MAXCOL )
85             a.nCol = MAXCOL;
86 
87         if( a.nRow > MAXROW )
88             a.nRow = MAXROW;
89     }
90     else
91     {
92         DBG_ASSERT( ValidTab(a.nTab), "-_ScRangeListTabs::Append(): Luegen haben kurze Abstuerze!" );
93     }
94 
95     bHasRanges = sal_True;
96 
97     if( a.nTab >= 0 )
98     {
99         _ScRangeList*   p = ppTabLists[ a.nTab ];
100 
101         if( !p )
102             p = ppTabLists[ a.nTab ] = new _ScRangeList;
103 
104         p->Append( a );
105     }
106 }
107 
108 
Append(ScComplexRefData a,const sal_Bool b)109 void _ScRangeListTabs::Append( ScComplexRefData a, const sal_Bool b )
110 {
111     if( b )
112     {
113         // #96263# ignore 3D ranges
114         if( a.Ref1.nTab != a.Ref2.nTab )
115             return;
116 
117         SCsTAB& rTab = a.Ref1.nTab;
118         if( rTab > MAXTAB )
119             rTab = MAXTAB;
120         else if( rTab < 0 )
121             rTab = 0;
122 
123         SCsCOL& rCol1 = a.Ref1.nCol;
124         if( rCol1 > MAXCOL )
125             rCol1 = MAXCOL;
126         else if( rCol1 < 0 )
127             rCol1 = 0;
128 
129         SCsROW& rRow1 = a.Ref1.nRow;
130         if( rRow1 > MAXROW )
131             rRow1 = MAXROW;
132         else if( rRow1 < 0 )
133             rRow1 = 0;
134 
135         SCsCOL& rCol2 = a.Ref2.nCol;
136         if( rCol2 > MAXCOL )
137             rCol2 = MAXCOL;
138         else if( rCol2 < 0 )
139             rCol2 = 0;
140 
141         SCsROW& rRow2 = a.Ref2.nRow;
142         if( rRow2 > MAXROW )
143             rRow2 = MAXROW;
144         else if( rRow2 < 0 )
145             rRow2 = 0;
146     }
147     else
148     {
149         DBG_ASSERT( ValidTab(a.Ref1.nTab),
150             "-_ScRangeListTabs::Append(): Luegen haben kurze Abstuerze!" );
151         DBG_ASSERT( a.Ref1.nTab == a.Ref2.nTab,
152             "+_ScRangeListTabs::Append(): 3D-Ranges werden in SC nicht unterstuetzt!" );
153     }
154 
155     bHasRanges = sal_True;
156 
157     if( a.Ref1.nTab >= 0 )
158     {
159         _ScRangeList*   p = ppTabLists[ a.Ref1.nTab ];
160 
161         if( !p )
162             p = ppTabLists[ a.Ref1.nTab ] = new _ScRangeList;
163 
164         p->Append( a );
165     }
166 }
167 
168 
First(const sal_uInt16 n)169 const ScRange* _ScRangeListTabs::First( const sal_uInt16 n )
170 {
171     DBG_ASSERT( ValidTab(n), "-_ScRangeListTabs::First(): Und tschuessssssss!" );
172 
173     if( ppTabLists[ n ] )
174     {
175         pAct = ppTabLists[ n ];
176         nAct = n;
177         return pAct->First();
178     }
179     else
180     {
181         pAct = NULL;
182         nAct = 0;
183         return NULL;
184     }
185 }
186 
187 
Next(void)188 const ScRange* _ScRangeListTabs::Next( void )
189 {
190     if( pAct )
191         return pAct->Next();
192     else
193         return NULL;
194 }
195 
196 
197 
198 
ConverterBase(sal_uInt16 nNewBuffer)199 ConverterBase::ConverterBase( sal_uInt16 nNewBuffer ) :
200     aEingPos( 0, 0, 0 ),
201     eStatus( ConvOK ),
202     nBufferSize( nNewBuffer )
203 {
204     DBG_ASSERT( nNewBuffer > 0, "ConverterBase::ConverterBase - nNewBuffer == 0!" );
205     pBuffer = new sal_Char[ nNewBuffer ];
206 }
207 
~ConverterBase()208 ConverterBase::~ConverterBase()
209 {
210     delete[] pBuffer;
211 }
212 
Reset()213 void ConverterBase::Reset()
214 {
215     eStatus = ConvOK;
216     aPool.Reset();
217     aStack.Reset();
218 }
219 
220 
221 
222 
ExcelConverterBase(sal_uInt16 nNewBuffer)223 ExcelConverterBase::ExcelConverterBase( sal_uInt16 nNewBuffer ) :
224     ConverterBase( nNewBuffer )
225 {
226 }
227 
~ExcelConverterBase()228 ExcelConverterBase::~ExcelConverterBase()
229 {
230 }
231 
Reset(const ScAddress & rEingPos)232 void ExcelConverterBase::Reset( const ScAddress& rEingPos )
233 {
234     ConverterBase::Reset();
235     aEingPos = rEingPos;
236 }
237 
Reset()238 void ExcelConverterBase::Reset()
239 {
240     ConverterBase::Reset();
241     aEingPos.Set( 0, 0, 0 );
242 }
243 
244 
245 
246 
LotusConverterBase(SvStream & rStr,sal_uInt16 nNewBuffer)247 LotusConverterBase::LotusConverterBase( SvStream &rStr, sal_uInt16 nNewBuffer ) :
248     ConverterBase( nNewBuffer ),
249     aIn( rStr ),
250     nBytesLeft( 0 )
251 {
252 }
253 
~LotusConverterBase()254 LotusConverterBase::~LotusConverterBase()
255 {
256 }
257 
258 //UNUSED2008-05  void LotusConverterBase::Reset( sal_Int32 nLen, const ScAddress& rEingPos )
259 //UNUSED2008-05  {
260 //UNUSED2008-05      ConverterBase::Reset();
261 //UNUSED2008-05      nBytesLeft = nLen;
262 //UNUSED2008-05      aEingPos = rEingPos;
263 //UNUSED2008-05  }
264 //UNUSED2008-05
265 //UNUSED2008-05  void LotusConverterBase::Reset( sal_Int32 nLen )
266 //UNUSED2008-05  {
267 //UNUSED2008-05      ConverterBase::Reset();
268 //UNUSED2008-05      nBytesLeft = nLen;
269 //UNUSED2008-05      aEingPos.Set( 0, 0, 0 );
270 //UNUSED2008-05  }
271 
Reset(const ScAddress & rEingPos)272 void LotusConverterBase::Reset( const ScAddress& rEingPos )
273 {
274     ConverterBase::Reset();
275     nBytesLeft = 0;
276     aEingPos = rEingPos;
277 }
278 
279