xref: /trunk/main/sc/source/filter/excel/frmbase.cxx (revision b77af630)
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_scfilt.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