Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
1ba2028a
Kaydet (Commit)
1ba2028a
authored
Eki 22, 2014
tarafından
Stephan Bergmann
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Move FormulaToken::TextEqual overrides down into specific subclasses
Change-Id: I5f27054ef2f9fdc4d0be0afe91ad31d053976bcf
üst
a6b01d01
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
33 deletions
+39
-33
token.hxx
sc/inc/token.hxx
+4
-2
token.cxx
sc/source/core/tool/token.cxx
+35
-31
No files found.
sc/inc/token.hxx
Dosyayı görüntüle @
1ba2028a
...
...
@@ -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
);
}
...
...
sc/source/core/tool/token.cxx
Dosyayı görüntüle @
1ba2028a
...
...
@@ -471,43 +471,39 @@ ScToken::~ScToken()
}
// TextEqual: if same formula entered (for optimization in sort)
bool
ScToken
::
TextEqual
(
const
FormulaToken
&
_rToken
)
const
bool
ScToken
::
check
TextEqual
(
const
FormulaToken
&
_rToken
)
const
{
if
(
eType
==
svSingleRef
||
eType
==
svDoubleRef
)
{
// in relative Refs only compare relative parts
if
(
eType
!=
_rToken
.
GetType
()
||
GetOpCode
()
!=
_rToken
.
GetOpCode
()
)
return
false
;
const
ScToken
&
rToken
=
static_cast
<
const
ScToken
&>
(
_rToken
);
ScComplexRefData
aTemp1
;
if
(
eType
==
svSingleRef
)
{
aTemp1
.
Ref1
=
GetSingleRef
();
aTemp1
.
Ref2
=
aTemp1
.
Ref1
;
}
else
aTemp1
=
GetDoubleRef
();
assert
(
(
eType
==
svSingleRef
||
eType
==
svDoubleRef
)
&&
FormulaToken
::
operator
==
(
_rToken
));
ScComplexRefData
aTemp2
;
if
(
rToken
.
eType
==
svSingleRef
)
{
aTemp2
.
Ref1
=
rToken
.
GetSingleRef
();
aTemp2
.
Ref2
=
aTemp2
.
Ref1
;
}
else
aTemp2
=
rToken
.
GetDoubleRef
();
// in relative Refs only compare relative parts
ScAddress
aPos
;
ScRange
aRange1
=
aTemp1
.
toAbs
(
aPos
),
aRange2
=
aTemp2
.
toAbs
(
aPos
);
const
ScToken
&
rToken
=
static_cast
<
const
ScToken
&>
(
_rToken
);
ScComplexRefData
aTemp1
;
if
(
eType
==
svSingleRef
)
{
aTemp1
.
Ref1
=
GetSingleRef
();
aTemp1
.
Ref2
=
aTemp1
.
Ref1
;
}
else
aTemp1
=
GetDoubleRef
();
// 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
();
ScComplexRefData
aTemp2
;
if
(
rToken
.
eType
==
svSingleRef
)
{
aTemp2
.
Ref1
=
rToken
.
GetSingleRef
();
aTemp2
.
Ref2
=
aTemp2
.
Ref1
;
}
else
return
*
this
==
_rToken
;
// else normal operator==
aTemp2
=
rToken
.
GetDoubleRef
();
ScAddress
aPos
;
ScRange
aRange1
=
aTemp1
.
toAbs
(
aPos
),
aRange2
=
aTemp2
.
toAbs
(
aPos
);
// 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
();
}
#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
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment