Kaydet (Commit) 1ba2028a authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Move FormulaToken::TextEqual overrides down into specific subclasses

Change-Id: I5f27054ef2f9fdc4d0be0afe91ad31d053976bcf
üst a6b01d01
......@@ -57,6 +57,8 @@ protected:
ScToken( formula::StackVar eTypeP,OpCode e = ocPush ) : formula::FormulaToken(eTypeP,e) {}
ScToken( const ScToken& r ): formula::FormulaToken(r) {}
bool checkTextEqual( const formula::FormulaToken& rToken ) const;
public:
virtual ~ScToken();
......@@ -88,8 +90,6 @@ public:
virtual const ScRefList* GetRefList() const;
virtual ScRefList* GetRefList();
virtual bool TextEqual( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
#if DEBUG_FORMULA_COMPILER
virtual void Dump() const;
#endif
......@@ -130,6 +130,7 @@ public:
ScToken( r ), aSingleRef( r.aSingleRef ) {}
virtual const ScSingleRefData& GetSingleRef() const SAL_OVERRIDE;
virtual ScSingleRefData& GetSingleRef() SAL_OVERRIDE;
virtual bool TextEqual( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
virtual bool operator==( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
virtual FormulaToken* Clone() const SAL_OVERRIDE { return new ScSingleRefToken(*this); }
......@@ -160,6 +161,7 @@ public:
virtual ScComplexRefData& GetDoubleRef() SAL_OVERRIDE;
virtual const ScSingleRefData& GetSingleRef2() const SAL_OVERRIDE;
virtual ScSingleRefData& GetSingleRef2() SAL_OVERRIDE;
virtual bool TextEqual( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
virtual bool operator==( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
virtual FormulaToken* Clone() const SAL_OVERRIDE { return new ScDoubleRefToken(*this); }
......
......@@ -471,14 +471,13 @@ ScToken::~ScToken()
}
// TextEqual: if same formula entered (for optimization in sort)
bool ScToken::TextEqual( const FormulaToken& _rToken ) const
bool ScToken::checkTextEqual( const FormulaToken& _rToken ) const
{
if ( eType == svSingleRef || eType == svDoubleRef )
{
// in relative Refs only compare relative parts
assert(
(eType == svSingleRef || eType == svDoubleRef)
&& FormulaToken::operator ==(_rToken));
if ( eType != _rToken.GetType() || GetOpCode() != _rToken.GetOpCode() )
return false;
// in relative Refs only compare relative parts
const ScToken& rToken = static_cast<const ScToken&>(_rToken);
ScComplexRefData aTemp1;
......@@ -505,9 +504,6 @@ bool ScToken::TextEqual( const FormulaToken& _rToken ) const
// memcmp doesn't work because of the alignment byte after bFlags.
// After SmartRelAbs only absolute parts have to be compared.
return aRange1 == aRange2 && aTemp1.Ref1.FlagValue() == aTemp2.Ref1.FlagValue() && aTemp1.Ref2.FlagValue() == aTemp2.Ref2.FlagValue();
}
else
return *this == _rToken; // else normal operator==
}
#if DEBUG_FORMULA_COMPILER
......@@ -719,6 +715,10 @@ ScRefList* ScToken::GetRefList()
const ScSingleRefData& ScSingleRefToken::GetSingleRef() const { return aSingleRef; }
ScSingleRefData& ScSingleRefToken::GetSingleRef() { return aSingleRef; }
bool ScSingleRefToken::TextEqual( const FormulaToken& _rToken ) const
{
return FormulaToken::operator ==(_rToken) && checkTextEqual(_rToken);
}
bool ScSingleRefToken::operator==( const FormulaToken& r ) const
{
return FormulaToken::operator==( r ) && aSingleRef == static_cast<const ScToken&>(r).GetSingleRef();
......@@ -738,6 +738,10 @@ const ScComplexRefData& ScDoubleRefToken::GetDoubleRef() const { return aDo
ScComplexRefData& ScDoubleRefToken::GetDoubleRef() { return aDoubleRef; }
const ScSingleRefData& ScDoubleRefToken::GetSingleRef2() const { return aDoubleRef.Ref2; }
ScSingleRefData& ScDoubleRefToken::GetSingleRef2() { return aDoubleRef.Ref2; }
bool ScDoubleRefToken::TextEqual( const FormulaToken& _rToken ) const
{
return FormulaToken::operator ==(_rToken) && checkTextEqual(_rToken);
}
bool ScDoubleRefToken::operator==( const FormulaToken& r ) const
{
return FormulaToken::operator==( r ) && aDoubleRef == static_cast<const ScToken&>(r).GetDoubleRef();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment