Lines 38-43
Link Here
|
38 |
and memory consumption. */ |
38 |
and memory consumption. */ |
39 |
class ScFormulaResult |
39 |
class ScFormulaResult |
40 |
{ |
40 |
{ |
|
|
41 |
enum Multiline |
42 |
{ |
43 |
MULTILINE_UNKNOWN = 0, |
44 |
MULTILINE_FALSE, |
45 |
MULTILINE_TRUE |
46 |
}; |
41 |
union |
47 |
union |
42 |
{ |
48 |
{ |
43 |
double mfValue; // double result direct for performance and memory consumption |
49 |
double mfValue; // double result direct for performance and memory consumption |
Lines 47-52
class ScFormulaResult
Link Here
|
47 |
bool mbToken :1; // whether content of union is a token |
53 |
bool mbToken :1; // whether content of union is a token |
48 |
bool mbEmpty :1; // empty cell result |
54 |
bool mbEmpty :1; // empty cell result |
49 |
bool mbEmptyDisplayedAsString :1; // only if mbEmpty |
55 |
bool mbEmptyDisplayedAsString :1; // only if mbEmpty |
|
|
56 |
Multiline meMultiline :2; // result is multiline |
50 |
|
57 |
|
51 |
/** Reset mnError, mbEmpty and mbEmptyDisplayedAsString to their defaults |
58 |
/** Reset mnError, mbEmpty and mbEmptyDisplayedAsString to their defaults |
52 |
prior to assigning other types */ |
59 |
prior to assigning other types */ |
Lines 69-80
public:
Link Here
|
69 |
/** Effectively type svUnknown. */ |
76 |
/** Effectively type svUnknown. */ |
70 |
ScFormulaResult() |
77 |
ScFormulaResult() |
71 |
: mpToken(NULL), mnError(0), mbToken(true), |
78 |
: mpToken(NULL), mnError(0), mbToken(true), |
72 |
mbEmpty(false), mbEmptyDisplayedAsString(false) {} |
79 |
mbEmpty(false), mbEmptyDisplayedAsString(false), |
|
|
80 |
meMultiline(MULTILINE_UNKNOWN) {} |
73 |
|
81 |
|
74 |
ScFormulaResult( const ScFormulaResult & r ) |
82 |
ScFormulaResult( const ScFormulaResult & r ) |
75 |
: mnError( r.mnError), mbToken( r.mbToken), |
83 |
: mnError( r.mnError), mbToken( r.mbToken), |
76 |
mbEmpty( r.mbEmpty), |
84 |
mbEmpty( r.mbEmpty), |
77 |
mbEmptyDisplayedAsString( r.mbEmptyDisplayedAsString) |
85 |
mbEmptyDisplayedAsString( r.mbEmptyDisplayedAsString), |
|
|
86 |
meMultiline( r.meMultiline) |
78 |
{ |
87 |
{ |
79 |
if (mbToken) |
88 |
if (mbToken) |
80 |
{ |
89 |
{ |
Lines 99-105
public:
Link Here
|
99 |
/** Same comments as for SetToken() apply! */ |
108 |
/** Same comments as for SetToken() apply! */ |
100 |
explicit ScFormulaResult( const ScToken* p ) |
109 |
explicit ScFormulaResult( const ScToken* p ) |
101 |
: mnError(0), mbToken(false), |
110 |
: mnError(0), mbToken(false), |
102 |
mbEmpty(false), mbEmptyDisplayedAsString(false) |
111 |
mbEmpty(false), mbEmptyDisplayedAsString(false), |
|
|
112 |
meMultiline(MULTILINE_UNKNOWN) |
103 |
{ |
113 |
{ |
104 |
SetToken( p); |
114 |
SetToken( p); |
105 |
} |
115 |
} |
Lines 153-158
public:
Link Here
|
153 |
details instead. */ |
163 |
details instead. */ |
154 |
inline bool IsValue() const; |
164 |
inline bool IsValue() const; |
155 |
|
165 |
|
|
|
166 |
/** Determines whether or not the result is a string containing more than |
167 |
one paragraph */ |
168 |
inline bool IsMultiline(); |
169 |
|
156 |
/** Get error code if set or GetCellResultType() is svError or svUnknown, |
170 |
/** Get error code if set or GetCellResultType() is svError or svUnknown, |
157 |
else 0. */ |
171 |
else 0. */ |
158 |
inline USHORT GetResultError() const; |
172 |
inline USHORT GetResultError() const; |
Lines 211-216
inline void ScFormulaResult::ResetToDefaults()
Link Here
|
211 |
mnError = 0; |
225 |
mnError = 0; |
212 |
mbEmpty = false; |
226 |
mbEmpty = false; |
213 |
mbEmptyDisplayedAsString = false; |
227 |
mbEmptyDisplayedAsString = false; |
|
|
228 |
meMultiline = MULTILINE_UNKNOWN; |
214 |
} |
229 |
} |
215 |
|
230 |
|
216 |
|
231 |
|
Lines 232-241
inline void ScFormulaResult::ResolveToken( const ScToken * p )
Link Here
|
232 |
mbToken = false; |
247 |
mbToken = false; |
233 |
// set in case mnError is 0 now, which shouldn't happen but ... |
248 |
// set in case mnError is 0 now, which shouldn't happen but ... |
234 |
mfValue = 0.0; |
249 |
mfValue = 0.0; |
|
|
250 |
meMultiline = MULTILINE_FALSE; |
235 |
break; |
251 |
break; |
236 |
case svEmptyCell: |
252 |
case svEmptyCell: |
237 |
mbEmpty = true; |
253 |
mbEmpty = true; |
238 |
mbEmptyDisplayedAsString = static_cast<const ScEmptyCellToken*>(p)->IsDisplayedAsString(); |
254 |
mbEmptyDisplayedAsString = static_cast<const ScEmptyCellToken*>(p)->IsDisplayedAsString(); |
|
|
255 |
meMultiline = MULTILINE_FALSE; |
239 |
p->DecRef(); |
256 |
p->DecRef(); |
240 |
mbToken = false; |
257 |
mbToken = false; |
241 |
break; |
258 |
break; |
Lines 243-248
inline void ScFormulaResult::ResolveToken( const ScToken * p )
Link Here
|
243 |
mfValue = p->GetDouble(); |
260 |
mfValue = p->GetDouble(); |
244 |
p->DecRef(); |
261 |
p->DecRef(); |
245 |
mbToken = false; |
262 |
mbToken = false; |
|
|
263 |
meMultiline = MULTILINE_FALSE; |
246 |
break; |
264 |
break; |
247 |
default: |
265 |
default: |
248 |
mpToken = p; |
266 |
mpToken = p; |
Lines 270-275
inline void ScFormulaResult::Assign( const ScFormulaResult & r )
Link Here
|
270 |
mbToken = false; |
288 |
mbToken = false; |
271 |
mbEmpty = true; |
289 |
mbEmpty = true; |
272 |
mbEmptyDisplayedAsString = r.mbEmptyDisplayedAsString; |
290 |
mbEmptyDisplayedAsString = r.mbEmptyDisplayedAsString; |
|
|
291 |
meMultiline = r.meMultiline; |
273 |
} |
292 |
} |
274 |
else if (r.mbToken) |
293 |
else if (r.mbToken) |
275 |
{ |
294 |
{ |
Lines 352-357
inline void ScFormulaResult::SetDouble( double f )
Link Here
|
352 |
mpToken->DecRef(); |
371 |
mpToken->DecRef(); |
353 |
mfValue = f; |
372 |
mfValue = f; |
354 |
mbToken = false; |
373 |
mbToken = false; |
|
|
374 |
meMultiline = MULTILINE_FALSE; |
355 |
} |
375 |
} |
356 |
} |
376 |
} |
357 |
|
377 |
|
Lines 404-409
inline bool ScFormulaResult::IsValue() const
Link Here
|
404 |
return sv == svDouble || sv == svError || sv == svEmptyCell; |
424 |
return sv == svDouble || sv == svError || sv == svEmptyCell; |
405 |
} |
425 |
} |
406 |
|
426 |
|
|
|
427 |
inline bool ScFormulaResult::IsMultiline() |
428 |
{ |
429 |
if (meMultiline == MULTILINE_UNKNOWN) |
430 |
{ |
431 |
const String& rStr = GetString(); |
432 |
if (rStr.Len() && rStr.Search( _LF ) != STRING_NOTFOUND) |
433 |
meMultiline = MULTILINE_TRUE; |
434 |
else |
435 |
meMultiline = MULTILINE_FALSE; |
436 |
} |
437 |
return meMultiline == MULTILINE_TRUE; |
438 |
} |
439 |
|
407 |
|
440 |
|
408 |
inline USHORT ScFormulaResult::GetResultError() const |
441 |
inline USHORT ScFormulaResult::GetResultError() const |
409 |
{ |
442 |
{ |
Lines 537-542
inline void ScFormulaResult::SetHybridDouble( double f )
Link Here
|
537 |
{ |
570 |
{ |
538 |
mfValue = f; |
571 |
mfValue = f; |
539 |
mbToken = false; |
572 |
mbToken = false; |
|
|
573 |
meMultiline = MULTILINE_FALSE; |
540 |
} |
574 |
} |
541 |
} |
575 |
} |
542 |
|
576 |
|