summaryrefslogtreecommitdiff
path: root/sc/source/core/data/cell2.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/data/cell2.cxx')
-rw-r--r--sc/source/core/data/cell2.cxx94
1 files changed, 52 insertions, 42 deletions
diff --git a/sc/source/core/data/cell2.cxx b/sc/source/core/data/cell2.cxx
index e1507b527..64bc98176 100644
--- a/sc/source/core/data/cell2.cxx
+++ b/sc/source/core/data/cell2.cxx
@@ -40,7 +40,7 @@
#include "cell.hxx"
#include "compiler.hxx"
-#include "errorcodes.hxx"
+#include "formula/errorcodes.hxx"
#include "document.hxx"
#include "rangenam.hxx"
#include "rechead.hxx"
@@ -51,6 +51,8 @@
#include "indexmap.hxx"
#include "externalrefmgr.hxx"
+using namespace formula;
+
// STATIC DATA -----------------------------------------------------------
#ifdef USE_MEMPOOL
@@ -182,7 +184,7 @@ BOOL ScFormulaCell::IsEmpty()
{
if (IsDirtyOrInTableOpDirty() && pDocument->GetAutoCalc())
Interpret();
- return aResult.GetCellResultType() == svEmptyCell;
+ return aResult.GetCellResultType() == formula::svEmptyCell;
}
BOOL ScFormulaCell::IsEmptyDisplayedAsString()
@@ -254,7 +256,7 @@ BOOL ScFormulaCell::GetMatrixOrigin( ScAddress& rPos ) const
case MM_REFERENCE :
{
pCode->Reset();
- ScToken* t = pCode->GetNextReferenceRPN();
+ ScToken* t = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
if( t )
{
ScSingleRefData& rRef = t->GetSingleRef();
@@ -435,7 +437,7 @@ USHORT ScFormulaCell::GetRawError()
BOOL ScFormulaCell::HasOneReference( ScRange& r ) const
{
pCode->Reset();
- ScToken* p = pCode->GetNextReferenceRPN();
+ ScToken* p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
if( p && !pCode->GetNextReferenceRPN() ) // nur eine!
{
p->CalcAbsIfRel( aPos );
@@ -455,11 +457,11 @@ BOOL ScFormulaCell::HasOneReference( ScRange& r ) const
BOOL ScFormulaCell::HasRelNameReference() const
{
pCode->Reset();
- for( ScToken* t = pCode->GetNextReferenceRPN(); t;
- t = pCode->GetNextReferenceRPN() )
+ ScToken* t;
+ while ( ( t = static_cast<ScToken*>(pCode->GetNextReferenceRPN()) ) != NULL )
{
if ( t->GetSingleRef().IsRelName() ||
- (t->GetType() == svDoubleRef &&
+ (t->GetType() == formula::svDoubleRef &&
t->GetDoubleRef().Ref2.IsRelName()) )
return TRUE;
}
@@ -567,7 +569,8 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
BOOL bRefSizeChanged;
if ( bHasRefs )
{
- ScCompiler aComp(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp(pDocument, aPos, *pCode);
+ aComp.SetGrammar(pDocument->GetGrammar());
pRangeData = aComp.UpdateReference(eUpdateRefMode, aOldPos, r,
nDx, nDy, nDz,
bValChanged, bRefSizeChanged);
@@ -598,7 +601,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
ScRangePairList* pColList = pDocument->GetColNameRanges();
ScRangePairList* pRowList = pDocument->GetRowNameRanges();
pCode->Reset();
- while ( !bColRowNameCompile && (t = pCode->GetNextColRowName()) != NULL )
+ while ( !bColRowNameCompile && (t = static_cast<ScToken*>(pCode->GetNextColRowName())) != NULL )
{
ScSingleRefData& rRef = t->GetSingleRef();
if ( nDy > 0 && rRef.IsColRel() )
@@ -643,7 +646,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
{
BOOL bMoved = (aPos != aOldPos);
pCode->Reset();
- ScToken* t = pCode->GetNextColRowName();
+ ScToken* t = static_cast<ScToken*>(pCode->GetNextColRowName());
if ( t && bMoved )
bColRowNameCompile = TRUE;
while ( t && !bColRowNameCompile )
@@ -656,7 +659,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
if ( r.In( aAdr ) )
bColRowNameCompile = TRUE;
}
- t = pCode->GetNextColRowName();
+ t = static_cast<ScToken*>(pCode->GetNextColRowName());
}
}
}
@@ -719,7 +722,8 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
pDocument->RemoveFromFormulaTree( this ); // update formula count
delete pCode;
pCode = pRangeData->GetCode()->Clone();
- ScCompiler aComp2(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp2(pDocument, aPos, *pCode);
+ aComp2.SetGrammar(pDocument->GetGrammar());
aComp2.UpdateSharedFormulaReference( eUpdateRefMode, aOldPos, r,
nDx, nDy, nDz );
bValChanged = TRUE;
@@ -782,7 +786,8 @@ void ScFormulaCell::UpdateInsertTab(SCTAB nTable)
if ( bPosChanged )
aPos.IncTab();
ScRangeData* pRangeData;
- ScCompiler aComp(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp(pDocument, aPos, *pCode);
+ aComp.SetGrammar(pDocument->GetGrammar());
pRangeData = aComp.UpdateInsertTab( nTable, FALSE );
if (pRangeData) // Shared Formula gegen echte Formel
{ // austauschen
@@ -790,7 +795,8 @@ void ScFormulaCell::UpdateInsertTab(SCTAB nTable)
pDocument->RemoveFromFormulaTree( this ); // update formula count
delete pCode;
pCode = new ScTokenArray( *pRangeData->GetCode() );
- ScCompiler aComp2(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp2(pDocument, aPos, *pCode);
+ aComp2.SetGrammar(pDocument->GetGrammar());
aComp2.MoveRelWrap();
aComp2.UpdateInsertTab( nTable, FALSE );
// If the shared formula contained a named range/formula containing
@@ -816,14 +822,16 @@ BOOL ScFormulaCell::UpdateDeleteTab(SCTAB nTable, BOOL bIsMove)
if ( bPosChanged )
aPos.IncTab(-1);
ScRangeData* pRangeData;
- ScCompiler aComp(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp(pDocument, aPos, *pCode);
+ aComp.SetGrammar(pDocument->GetGrammar());
pRangeData = aComp.UpdateDeleteTab(nTable, bIsMove, FALSE, bRefChanged);
if (pRangeData) // Shared Formula gegen echte Formel
{ // austauschen
pDocument->RemoveFromFormulaTree( this ); // update formula count
delete pCode;
pCode = pRangeData->GetCode()->Clone();
- ScCompiler aComp2(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp2(pDocument, aPos, *pCode);
+ aComp2.SetGrammar(pDocument->GetGrammar());
aComp2.CompileTokenArray();
aComp2.MoveRelWrap();
aComp2.UpdateDeleteTab( nTable, FALSE, FALSE, bRefChanged );
@@ -851,14 +859,16 @@ void ScFormulaCell::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo )
// SetTab _nach_ EndListeningTo und _vor_ Compiler UpdateMoveTab !
aPos.SetTab( nTabNo );
ScRangeData* pRangeData;
- ScCompiler aComp(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp(pDocument, aPos, *pCode);
+ aComp.SetGrammar(pDocument->GetGrammar());
pRangeData = aComp.UpdateMoveTab( nOldPos, nNewPos, FALSE );
if (pRangeData) // Shared Formula gegen echte Formel
{ // austauschen
pDocument->RemoveFromFormulaTree( this ); // update formula count
delete pCode;
pCode = pRangeData->GetCode()->Clone();
- ScCompiler aComp2(pDocument, aPos, *pCode, pDocument->GetGrammar());
+ ScCompiler aComp2(pDocument, aPos, *pCode);
+ aComp2.SetGrammar(pDocument->GetGrammar());
aComp2.CompileTokenArray();
aComp2.MoveRelWrap();
aComp2.UpdateMoveTab( nOldPos, nNewPos, TRUE );
@@ -875,19 +885,19 @@ void ScFormulaCell::UpdateInsertTabAbs(SCTAB nTable)
if( !pDocument->IsClipOrUndo() )
{
pCode->Reset();
- ScToken* p = pCode->GetNextReferenceRPN();
+ ScToken* p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
while( p )
{
ScSingleRefData& rRef1 = p->GetSingleRef();
if( !rRef1.IsTabRel() && (SCsTAB) nTable <= rRef1.nTab )
rRef1.nTab++;
- if( p->GetType() == svDoubleRef )
+ if( p->GetType() == formula::svDoubleRef )
{
ScSingleRefData& rRef2 = p->GetDoubleRef().Ref2;
if( !rRef2.IsTabRel() && (SCsTAB) nTable <= rRef2.nTab )
rRef2.nTab++;
}
- p = pCode->GetNextReferenceRPN();
+ p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
}
}
}
@@ -898,7 +908,7 @@ BOOL ScFormulaCell::TestTabRefAbs(SCTAB nTable)
if( !pDocument->IsClipOrUndo() )
{
pCode->Reset();
- ScToken* p = pCode->GetNextReferenceRPN();
+ ScToken* p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
while( p )
{
ScSingleRefData& rRef1 = p->GetSingleRef();
@@ -909,7 +919,7 @@ BOOL ScFormulaCell::TestTabRefAbs(SCTAB nTable)
else if (nTable != aPos.Tab())
rRef1.nTab = aPos.Tab();
}
- if( p->GetType() == svDoubleRef )
+ if( p->GetType() == formula::svDoubleRef )
{
ScSingleRefData& rRef2 = p->GetDoubleRef().Ref2;
if( !rRef2.IsTabRel() )
@@ -920,7 +930,7 @@ BOOL ScFormulaCell::TestTabRefAbs(SCTAB nTable)
rRef2.nTab = aPos.Tab();
}
}
- p = pCode->GetNextReferenceRPN();
+ p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
}
}
return bRet;
@@ -941,13 +951,13 @@ void ScFormulaCell::TransposeReference()
{
BOOL bFound = FALSE;
pCode->Reset();
- for( ScToken* t = pCode->GetNextReference(); t;
- t = pCode->GetNextReference() )
+ ScToken* t;
+ while ( ( t = static_cast<ScToken*>(pCode->GetNextReference()) ) != NULL )
{
ScSingleRefData& rRef1 = t->GetSingleRef();
if ( rRef1.IsColRel() && rRef1.IsRowRel() )
{
- BOOL bDouble = (t->GetType() == svDoubleRef);
+ BOOL bDouble = (t->GetType() == formula::svDoubleRef);
ScSingleRefData& rRef2 = (bDouble ? t->GetDoubleRef().Ref2 : rRef1);
if ( !bDouble || (rRef2.IsColRel() && rRef2.IsRowRel()) )
{
@@ -1002,7 +1012,7 @@ void ScFormulaCell::UpdateTranspose( const ScRange& rSource, const ScAddress& rD
ScRangeData* pShared = NULL;
pCode->Reset();
- for( t = pCode->GetNextReferenceOrName(); t; t = pCode->GetNextReferenceOrName() )
+ while( (t = static_cast<ScToken*>(pCode->GetNextReferenceOrName())) != NULL )
{
if( t->GetOpCode() == ocName )
{
@@ -1040,7 +1050,7 @@ void ScFormulaCell::UpdateTranspose( const ScRange& rSource, const ScAddress& rD
pCode = new ScTokenArray( *pShared->GetCode() );
bRefChanged = TRUE;
pCode->Reset();
- for( t = pCode->GetNextReference(); t; t = pCode->GetNextReference() )
+ while( (t = static_cast<ScToken*>(pCode->GetNextReference())) != NULL )
{
if( t->GetType() != svIndex )
{
@@ -1087,7 +1097,7 @@ void ScFormulaCell::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY
ScRangeData* pShared = NULL;
pCode->Reset();
- for( t = pCode->GetNextReferenceOrName(); t; t = pCode->GetNextReferenceOrName() )
+ while( (t = static_cast<ScToken*>(pCode->GetNextReferenceOrName())) != NULL )
{
if( t->GetOpCode() == ocName )
{
@@ -1125,7 +1135,7 @@ void ScFormulaCell::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY
pCode = new ScTokenArray( *pShared->GetCode() );
bRefChanged = TRUE;
pCode->Reset();
- for( t = pCode->GetNextReference(); t; t = pCode->GetNextReference() )
+ while( (t = static_cast<ScToken*>(pCode->GetNextReference())) != NULL )
{
if( t->GetType() != svIndex )
{
@@ -1155,7 +1165,7 @@ void ScFormulaCell::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY
BOOL lcl_IsRangeNameInUse(USHORT nIndex, ScTokenArray* pCode, ScRangeName* pNames)
{
- for (ScToken* p = pCode->First(); p; p = pCode->Next())
+ for (FormulaToken* p = pCode->First(); p; p = pCode->Next())
{
if (p->GetOpCode() == ocName)
{
@@ -1181,7 +1191,7 @@ BOOL ScFormulaCell::IsRangeNameInUse(USHORT nIndex) const
void lcl_FindRangeNamesInUse(std::set<USHORT>& rIndexes, ScTokenArray* pCode, ScRangeName* pNames)
{
- for (ScToken* p = pCode->First(); p; p = pCode->Next())
+ for (FormulaToken* p = pCode->First(); p; p = pCode->Next())
{
if (p->GetOpCode() == ocName)
{
@@ -1202,7 +1212,7 @@ void ScFormulaCell::FindRangeNamesInUse(std::set<USHORT>& rIndexes) const
void ScFormulaCell::ReplaceRangeNamesInUse( const ScIndexMap& rMap )
{
- for( ScToken* p = pCode->First(); p; p = pCode->Next() )
+ for( FormulaToken* p = pCode->First(); p; p = pCode->Next() )
{
if( p->GetOpCode() == ocName )
{
@@ -1221,7 +1231,7 @@ void ScFormulaCell::ReplaceRangeNamesInUse( const ScIndexMap& rMap )
void ScFormulaCell::CompileDBFormula()
{
- for( ScToken* p = pCode->First(); p; p = pCode->Next() )
+ for( FormulaToken* p = pCode->First(); p; p = pCode->Next() )
{
if ( p->GetOpCode() == ocDBArea
|| (p->GetOpCode() == ocName && p->GetIndex() >= SC_START_INDEX_DB_COLL) )
@@ -1243,7 +1253,7 @@ void ScFormulaCell::CompileDBFormula( BOOL bCreateFormulaString )
{
BOOL bRecompile = FALSE;
pCode->Reset();
- for ( ScToken* p = pCode->First(); p && !bRecompile; p = pCode->Next() )
+ for ( FormulaToken* p = pCode->First(); p && !bRecompile; p = pCode->Next() )
{
switch ( p->GetOpCode() )
{
@@ -1263,7 +1273,7 @@ void ScFormulaCell::CompileDBFormula( BOOL bCreateFormulaString )
if ( bRecompile )
{
String aFormula;
- GetFormula( aFormula, ScGrammar::GRAM_NATIVE);
+ GetFormula( aFormula, formula::FormulaGrammar::GRAM_NATIVE);
if ( GetMatrixFlag() != MM_NONE && aFormula.Len() )
{
if ( aFormula.GetChar( aFormula.Len()-1 ) == '}' )
@@ -1274,7 +1284,7 @@ void ScFormulaCell::CompileDBFormula( BOOL bCreateFormulaString )
EndListeningTo( pDocument );
pDocument->RemoveFromFormulaTree( this );
pCode->Clear();
- SetHybridFormula( aFormula, ScGrammar::GRAM_NATIVE);
+ SetHybridFormula( aFormula, formula::FormulaGrammar::GRAM_NATIVE);
}
}
else if ( !pCode->GetLen() && aResult.GetHybridFormula().Len() )
@@ -1294,7 +1304,7 @@ void ScFormulaCell::CompileNameFormula( BOOL bCreateFormulaString )
{
BOOL bRecompile = FALSE;
pCode->Reset();
- for ( ScToken* p = pCode->First(); p && !bRecompile; p = pCode->Next() )
+ for ( FormulaToken* p = pCode->First(); p && !bRecompile; p = pCode->Next() )
{
switch ( p->GetOpCode() )
{
@@ -1310,7 +1320,7 @@ void ScFormulaCell::CompileNameFormula( BOOL bCreateFormulaString )
if ( bRecompile )
{
String aFormula;
- GetFormula( aFormula, ScGrammar::GRAM_NATIVE);
+ GetFormula( aFormula, formula::FormulaGrammar::GRAM_NATIVE);
if ( GetMatrixFlag() != MM_NONE && aFormula.Len() )
{
if ( aFormula.GetChar( aFormula.Len()-1 ) == '}' )
@@ -1321,7 +1331,7 @@ void ScFormulaCell::CompileNameFormula( BOOL bCreateFormulaString )
EndListeningTo( pDocument );
pDocument->RemoveFromFormulaTree( this );
pCode->Clear();
- SetHybridFormula( aFormula, ScGrammar::GRAM_NATIVE);
+ SetHybridFormula( aFormula, formula::FormulaGrammar::GRAM_NATIVE);
}
}
else if ( !pCode->GetLen() && aResult.GetHybridFormula().Len() )
@@ -1335,7 +1345,7 @@ void ScFormulaCell::CompileNameFormula( BOOL bCreateFormulaString )
void ScFormulaCell::CompileColRowNameFormula()
{
pCode->Reset();
- for ( ScToken* p = pCode->First(); p; p = pCode->Next() )
+ for ( FormulaToken* p = pCode->First(); p; p = pCode->Next() )
{
if ( p->GetOpCode() == ocColRowName )
{