sc/inc/attarray.hxx             |    6 -
 sc/inc/column.hxx               |  166 +++++++++++++++++++++++++++++++++++++++-
 sc/source/core/data/column.cxx  |  111 --------------------------
 sc/source/core/data/column2.cxx |   68 ----------------
 sc/source/core/data/column4.cxx |    5 -
 sc/source/core/data/table1.cxx  |    8 -
 6 files changed, 172 insertions(+), 192 deletions(-)

New commits:
commit 16b4525e8770ca457c8b33f08c5f9ef5f35ef62e
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Mar 4 18:27:13 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Sat Mar 5 08:30:45 2022 +0100

    remove more hardcoded MAXROW
    
    Change-Id: Ica57f18d3fd1bf9ec06f05869f4a956d7d1097b0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131036
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/inc/attarray.hxx b/sc/inc/attarray.hxx
index 52c2793c3f3c..f55a4ee8206e 100644
--- a/sc/inc/attarray.hxx
+++ b/sc/inc/attarray.hxx
@@ -21,6 +21,7 @@
 
 #include "global.hxx"
 #include "attrib.hxx"
+#include "document.hxx"
 #include "patattr.hxx"
 
 #include <algorithm>
@@ -114,6 +115,7 @@ public:
             ~ScAttrArray();
 
     ScDocument& GetDoc() { return rDocument; }
+    const ScDocument& GetDoc() const { return rDocument; }
     void    SetTab(SCTAB nNewTab)   { nTab = nNewTab; }
     void    SetCol(SCCOL nNewCol)   { nCol = nNewCol; }
 #if DEBUG_SC_TESTATTRARRAY
@@ -266,10 +268,10 @@ inline const ScPatternAttr* ScAttrIterator::Next( SCROW& 
rTop, SCROW& rBottom )
         if ( !nPos )
         {
             ++nPos;
-            if ( nRow > MAXROW )
+            if ( nRow > pArray->GetDoc().MaxRow())
                 return nullptr;
             rTop = nRow;
-            rBottom = std::min( nEndRow, MAXROW );
+            rBottom = std::min( nEndRow, pArray->GetDoc().MaxRow());
             nRow = rBottom + 1;
             return pDefPattern;
         }
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index de69846442ca..1ec4aac4204b 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -281,8 +281,7 @@ public:
     bool    GetFirstVisibleAttr( SCROW& rFirstRow ) const;
     bool    GetLastVisibleAttr( SCROW& rLastRow ) const;
     bool    HasVisibleAttrIn( SCROW nStartRow, SCROW nEndRow ) const;
-    bool    IsVisibleAttrEqual( const ScColumn& rCol, SCROW nStartRow = 0,
-                                    SCROW nEndRow = MAXROW ) const;
+    bool    IsVisibleAttrEqual( const ScColumn& rCol, SCROW nStartRow, SCROW 
nEndRow ) const;
     bool    IsAllAttrEqual( const ScColumn& rCol, SCROW nStartRow, SCROW 
nEndRow ) const;
 
     bool    TestInsertCol( SCROW nStartRow, SCROW nEndRow) const;
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 7329b4f455b9..99c673eb5d6a 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -631,7 +631,7 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, 
bool bNotes, bool bC
     if (nMaxX == rDocument.MaxCol())                    // omit attribute at 
the right
     {
         --nMaxX;
-        while ( nMaxX>0 && aCol[nMaxX].IsVisibleAttrEqual(aCol[nMaxX+1]) )
+        while ( nMaxX>0 && aCol[nMaxX].IsVisibleAttrEqual(aCol[nMaxX+1], 0, 
rDocument.MaxRow()) )
             --nMaxX;
     }
 
@@ -645,7 +645,7 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, 
bool bNotes, bool bC
         while ( nAttrStartX < (aCol.size()-1) )
         {
             SCCOL nAttrEndX = nAttrStartX;
-            while ( nAttrEndX < (aCol.size()-1) && 
aCol[nAttrStartX].IsVisibleAttrEqual(aCol[nAttrEndX+1]) )
+            while ( nAttrEndX < (aCol.size()-1) && 
aCol[nAttrStartX].IsVisibleAttrEqual(aCol[nAttrEndX+1], 0, rDocument.MaxRow()) )
                 ++nAttrEndX;
             if ( nAttrEndX + 1 - nAttrStartX >= SC_COLUMNS_STOP )
             {
@@ -770,10 +770,10 @@ bool ScTable::GetDataStart( SCCOL& rStartCol, SCROW& 
rStartRow ) const
 
     if (nMinX == 0)                                     // omit attribute at 
the right
     {
-        if ( aCol.size() > 1 && aCol[0].IsVisibleAttrEqual(aCol[1]) )      // 
no single ones
+        if ( aCol.size() > 1 && aCol[0].IsVisibleAttrEqual(aCol[1], 0, 
rDocument.MaxRow())) // no single ones
         {
             ++nMinX;
-            while ( nMinX<(aCol.size()-1) && 
aCol[nMinX].IsVisibleAttrEqual(aCol[nMinX-1]) )
+            while ( nMinX<(aCol.size()-1) && 
aCol[nMinX].IsVisibleAttrEqual(aCol[nMinX-1], 0, rDocument.MaxRow()))
                 ++nMinX;
         }
     }
commit 2e2e30d7ae445509e39ba47c1b248079f28c8d95
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Mar 4 16:40:20 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Sat Mar 5 08:30:30 2022 +0100

    remove pAttrArray nullptr checks
    
    I don't see how it possibly could be nullptr in a correct situation,
    ScColumn::Init() is called right after creating ScColumn.
    Also make a bunch of trivial forwarding functions inline.
    
    Change-Id: I710d3cd86a660a8b4dcfbb9966a685b657b93c18
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131035
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 7eea78900600..de69846442ca 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -813,4 +813,167 @@ private:
     void SetNeedsListeningGroup( SCROW nRow );
 };
 
+inline bool ScColumn::IsEmptyAttr() const
+{
+    return pAttrArray->IsEmpty();
+}
+
+inline bool ScColumn::IsAllAttrEqual( const ScColumn& rCol, SCROW nStartRow, 
SCROW nEndRow ) const
+{
+    return pAttrArray->IsAllEqual( *rCol.pAttrArray, nStartRow, nEndRow );
+}
+
+inline bool ScColumn::IsVisibleAttrEqual( const ScColumn& rCol, SCROW 
nStartRow, SCROW nEndRow ) const
+{
+    return pAttrArray->IsVisibleEqual( *rCol.pAttrArray, nStartRow, nEndRow );
+}
+
+inline bool ScColumn::GetFirstVisibleAttr( SCROW& rFirstRow ) const
+{
+    return pAttrArray->GetFirstVisibleAttr( rFirstRow );
+}
+
+inline bool ScColumn::GetLastVisibleAttr( SCROW& rLastRow ) const
+{
+    // row of last cell is needed
+    SCROW nLastData = GetLastDataPos();    // always including notes, 0 if none
+    return pAttrArray->GetLastVisibleAttr( rLastRow, nLastData );
+}
+
+inline bool ScColumn::HasVisibleAttrIn( SCROW nStartRow, SCROW nEndRow ) const
+{
+    return pAttrArray->HasVisibleAttrIn( nStartRow, nEndRow );
+}
+
+inline SCSIZE ScColumn::GetPatternCount() const
+{
+    return pAttrArray ? pAttrArray->Count() : 0;
+}
+
+inline SCSIZE ScColumn::GetPatternCount( SCROW nRow1, SCROW nRow2 ) const
+{
+    return pAttrArray ? pAttrArray->Count( nRow1, nRow2 ) : 0;
+}
+
+inline bool ScColumn::ReservePatternCount( SCSIZE nReserve )
+{
+    return pAttrArray && pAttrArray->Reserve( nReserve );
+}
+
+inline bool ScColumn::IsMerged( SCROW nRow ) const
+{
+    return pAttrArray->IsMerged(nRow);
+}
+
+inline SCROW ScColumnData::GetNextUnprotected( SCROW nRow, bool bUp ) const
+{
+    return pAttrArray->GetNextUnprotected(nRow, bUp);
+}
+
+inline bool ScColumnData::HasAttrib( SCROW nRow1, SCROW nRow2, HasAttrFlags 
nMask ) const
+{
+    return pAttrArray->HasAttrib( nRow1, nRow2, nMask );
+}
+
+inline bool ScColumn::ExtendMerge( SCCOL nThisCol, SCROW nStartRow, SCROW 
nEndRow,
+                            SCCOL& rPaintCol, SCROW& rPaintRow,
+                            bool bRefresh )
+{
+    return pAttrArray->ExtendMerge( nThisCol, nStartRow, nEndRow, rPaintCol, 
rPaintRow, bRefresh );
+}
+
+inline void ScColumnData::MergePatternArea( ScMergePatternState& rState, SCROW 
nRow1, SCROW nRow2, bool bDeep ) const
+{
+    pAttrArray->MergePatternArea( nRow1, nRow2, rState, bDeep );
+}
+
+inline void ScColumn::MergeBlockFrame( SvxBoxItem* pLineOuter, SvxBoxInfoItem* 
pLineInner,
+                            ScLineFlags& rFlags,
+                            SCROW nStartRow, SCROW nEndRow, bool bLeft, SCCOL 
nDistRight ) const
+{
+    pAttrArray->MergeBlockFrame( pLineOuter, pLineInner, rFlags, nStartRow, 
nEndRow, bLeft, nDistRight );
+}
+
+inline void ScColumn::ApplyBlockFrame(const SvxBoxItem& rLineOuter, const 
SvxBoxInfoItem* pLineInner,
+                               SCROW nStartRow, SCROW nEndRow, bool bLeft, 
SCCOL nDistRight)
+{
+    pAttrArray->ApplyBlockFrame(rLineOuter, pLineInner, nStartRow, nEndRow, 
bLeft, nDistRight);
+}
+
+inline const ScPatternAttr* ScColumnData::GetPattern( SCROW nRow ) const
+{
+    return pAttrArray->GetPattern( nRow );
+}
+
+inline const SfxPoolItem& ScColumn::GetAttr( SCROW nRow, sal_uInt16 nWhich ) 
const
+{
+    return pAttrArray->GetPattern( nRow )->GetItemSet().Get(nWhich);
+}
+
+inline sal_uInt32 ScColumnData::GetNumberFormat( const ScInterpreterContext& 
rContext, SCROW nRow ) const
+{
+    return pAttrArray->GetPattern( nRow )->GetNumberFormat( 
rContext.GetFormatTable() );
+}
+
+inline void ScColumn::AddCondFormat( SCROW nStartRow, SCROW nEndRow, 
sal_uInt32 nIndex )
+{
+    pAttrArray->AddCondFormat( nStartRow, nEndRow, nIndex );
+}
+
+inline void ScColumn::RemoveCondFormat( SCROW nStartRow, SCROW nEndRow, 
sal_uInt32 nIndex )
+{
+    pAttrArray->RemoveCondFormat( nStartRow, nEndRow, nIndex );
+}
+
+inline void ScColumnData::ApplyStyleArea( SCROW nStartRow, SCROW nEndRow, 
const ScStyleSheet& rStyle )
+{
+    pAttrArray->ApplyStyleArea(nStartRow, nEndRow, rStyle);
+}
+
+inline const ScStyleSheet* ScColumnData::GetStyle( SCROW nRow ) const
+{
+    return pAttrArray->GetPattern( nRow )->GetStyleSheet();
+}
+
+inline void ScColumn::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, 
ScFlatBoolRowSegments& rUsedRows, bool bReset )
+{
+    pAttrArray->FindStyleSheet( pStyleSheet, rUsedRows, bReset );
+}
+
+inline bool ScColumn::IsStyleSheetUsed( const ScStyleSheet& rStyle ) const
+{
+    return pAttrArray->IsStyleSheetUsed( rStyle );
+}
+
+inline bool ScColumn::ApplyFlags( SCROW nStartRow, SCROW nEndRow, ScMF nFlags )
+{
+    return pAttrArray->ApplyFlags( nStartRow, nEndRow, nFlags );
+}
+
+inline bool ScColumn::RemoveFlags( SCROW nStartRow, SCROW nEndRow, ScMF nFlags 
)
+{
+    return pAttrArray->RemoveFlags( nStartRow, nEndRow, nFlags );
+}
+
+inline void ScColumn::ClearItems( SCROW nStartRow, SCROW nEndRow, const 
sal_uInt16* pWhich )
+{
+    pAttrArray->ClearItems( nStartRow, nEndRow, pWhich );
+}
+
+inline const ScPatternAttr* ScColumn::SetPattern( SCROW nRow, 
std::unique_ptr<ScPatternAttr> pPatAttr )
+{
+    return pAttrArray->SetPattern( nRow, std::move(pPatAttr), 
true/*bPutToPool*/ );
+}
+
+inline void ScColumn::SetPattern( SCROW nRow, const ScPatternAttr& rPatAttr )
+{
+    pAttrArray->SetPattern( nRow, &rPatAttr, true/*bPutToPool*/ );
+}
+
+inline void ScColumn::SetPatternArea( SCROW nStartRow, SCROW nEndRow,
+                                const ScPatternAttr& rPatAttr )
+{
+    pAttrArray->SetPatternArea( nStartRow, nEndRow, &rPatAttr, 
true/*bPutToPool*/ );
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 26541603584a..f14ff4aa8bdc 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -107,11 +107,6 @@ void ScColumn::Init(SCCOL nNewCol, SCTAB nNewTab, 
ScDocument& rDoc, bool bEmptyA
         InitAttrArray(new ScAttrArray( nCol, nTab, rDoc, 
&rDoc.maTabs[nTab]->aDefaultColData.AttrArray()));
 }
 
-SCROW ScColumnData::GetNextUnprotected( SCROW nRow, bool bUp ) const
-{
-    return pAttrArray->GetNextUnprotected(nRow, bUp);
-}
-
 sc::MatrixEdge ScColumn::GetBlockMatrixEdges( SCROW nRow1, SCROW nRow2, 
sc::MatrixEdge nMask,
         bool bNoMatrixAtAll ) const
 {
@@ -301,11 +296,6 @@ bool ScColumn::HasSelectionMatrixFragment(const 
ScMarkData& rMark) const
     return bOpen;
 }
 
-bool ScColumnData::HasAttrib( SCROW nRow1, SCROW nRow2, HasAttrFlags nMask ) 
const
-{
-    return pAttrArray->HasAttrib( nRow1, nRow2, nMask );
-}
-
 bool ScColumn::HasAttribSelection( const ScMarkData& rMark, HasAttrFlags nMask 
) const
 {
     bool bFound = false;
@@ -326,13 +316,6 @@ bool ScColumn::HasAttribSelection( const ScMarkData& 
rMark, HasAttrFlags nMask )
     return bFound;
 }
 
-bool ScColumn::ExtendMerge( SCCOL nThisCol, SCROW nStartRow, SCROW nEndRow,
-                            SCCOL& rPaintCol, SCROW& rPaintRow,
-                            bool bRefresh )
-{
-    return pAttrArray->ExtendMerge( nThisCol, nStartRow, nEndRow, rPaintCol, 
rPaintRow, bRefresh );
-}
-
 void ScColumn::MergeSelectionPattern( ScMergePatternState& rState, const 
ScMarkData& rMark, bool bDeep ) const
 {
     SCROW nTop;
@@ -350,34 +333,6 @@ void ScColumn::MergeSelectionPattern( ScMergePatternState& 
rState, const ScMarkD
     }
 }
 
-void ScColumnData::MergePatternArea( ScMergePatternState& rState, SCROW nRow1, 
SCROW nRow2, bool bDeep ) const
-{
-    pAttrArray->MergePatternArea( nRow1, nRow2, rState, bDeep );
-}
-
-void ScColumn::MergeBlockFrame( SvxBoxItem* pLineOuter, SvxBoxInfoItem* 
pLineInner,
-                            ScLineFlags& rFlags,
-                            SCROW nStartRow, SCROW nEndRow, bool bLeft, SCCOL 
nDistRight ) const
-{
-    pAttrArray->MergeBlockFrame( pLineOuter, pLineInner, rFlags, nStartRow, 
nEndRow, bLeft, nDistRight );
-}
-
-void ScColumn::ApplyBlockFrame(const SvxBoxItem& rLineOuter, const 
SvxBoxInfoItem* pLineInner,
-                               SCROW nStartRow, SCROW nEndRow, bool bLeft, 
SCCOL nDistRight)
-{
-    pAttrArray->ApplyBlockFrame(rLineOuter, pLineInner, nStartRow, nEndRow, 
bLeft, nDistRight);
-}
-
-const ScPatternAttr* ScColumnData::GetPattern( SCROW nRow ) const
-{
-    return pAttrArray->GetPattern( nRow );
-}
-
-const SfxPoolItem& ScColumn::GetAttr( SCROW nRow, sal_uInt16 nWhich ) const
-{
-    return pAttrArray->GetPattern( nRow )->GetItemSet().Get(nWhich);
-}
-
 const ScPatternAttr* ScColumnData::GetMostUsedPattern( SCROW nStartRow, SCROW 
nEndRow ) const
 {
     ::std::map< const ScPatternAttr*, size_t > aAttrMap;
@@ -418,11 +373,6 @@ sal_uInt32 ScColumnData::GetNumberFormat( SCROW nStartRow, 
SCROW nEndRow ) const
     return nFormat;
 }
 
-sal_uInt32 ScColumnData::GetNumberFormat( const ScInterpreterContext& 
rContext, SCROW nRow ) const
-{
-    return pAttrArray->GetPattern( nRow )->GetNumberFormat( 
rContext.GetFormatTable() );
-}
-
 SCROW ScColumn::ApplySelectionCache( SfxItemPoolCache* pCache, const 
ScMarkData& rMark, ScEditDataArray* pDataArray,
                                      bool* const pIsChanged )
 {
@@ -562,16 +512,6 @@ void ScColumn::ApplyPatternIfNumberformatIncompatible( 
const ScRange& rRange,
     }
 }
 
-void ScColumn::AddCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 
nIndex )
-{
-    pAttrArray->AddCondFormat( nStartRow, nEndRow, nIndex );
-}
-
-void ScColumn::RemoveCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 
nIndex )
-{
-    pAttrArray->RemoveCondFormat( nStartRow, nEndRow, nIndex );
-}
-
 void ScColumn::ApplyStyle( SCROW nRow, const ScStyleSheet* rStyle )
 {
     const ScPatternAttr* pPattern = pAttrArray->GetPattern(nRow);
@@ -580,11 +520,6 @@ void ScColumn::ApplyStyle( SCROW nRow, const ScStyleSheet* 
rStyle )
     pAttrArray->SetPattern(nRow, std::move(pNewPattern), true);
 }
 
-void ScColumnData::ApplyStyleArea( SCROW nStartRow, SCROW nEndRow, const 
ScStyleSheet& rStyle )
-{
-    pAttrArray->ApplyStyleArea(nStartRow, nEndRow, rStyle);
-}
-
 void ScColumn::ApplySelectionStyle(const ScStyleSheet& rStyle, const 
ScMarkData& rMark)
 {
     SCROW nTop;
@@ -615,11 +550,6 @@ void ScColumn::ApplySelectionLineStyle( const ScMarkData& 
rMark,
     }
 }
 
-const ScStyleSheet* ScColumnData::GetStyle( SCROW nRow ) const
-{
-    return pAttrArray->GetPattern( nRow )->GetStyleSheet();
-}
-
 const ScStyleSheet* ScColumn::GetSelectionStyle( const ScMarkData& rMark, 
bool& rFound ) const
 {
     rFound = false;
@@ -686,47 +616,6 @@ const ScStyleSheet* ScColumn::GetAreaStyle( bool& rFound, 
SCROW nRow1, SCROW nRo
     return bEqual ? pStyle : nullptr;
 }
 
-void ScColumn::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, 
ScFlatBoolRowSegments& rUsedRows, bool bReset )
-{
-    pAttrArray->FindStyleSheet( pStyleSheet, rUsedRows, bReset );
-}
-
-bool ScColumn::IsStyleSheetUsed( const ScStyleSheet& rStyle ) const
-{
-    return pAttrArray->IsStyleSheetUsed( rStyle );
-}
-
-bool ScColumn::ApplyFlags( SCROW nStartRow, SCROW nEndRow, ScMF nFlags )
-{
-    return pAttrArray->ApplyFlags( nStartRow, nEndRow, nFlags );
-}
-
-bool ScColumn::RemoveFlags( SCROW nStartRow, SCROW nEndRow, ScMF nFlags )
-{
-    return pAttrArray->RemoveFlags( nStartRow, nEndRow, nFlags );
-}
-
-void ScColumn::ClearItems( SCROW nStartRow, SCROW nEndRow, const sal_uInt16* 
pWhich )
-{
-    pAttrArray->ClearItems( nStartRow, nEndRow, pWhich );
-}
-
-const ScPatternAttr* ScColumn::SetPattern( SCROW nRow, 
std::unique_ptr<ScPatternAttr> pPatAttr )
-{
-    return pAttrArray->SetPattern( nRow, std::move(pPatAttr), 
true/*bPutToPool*/ );
-}
-
-void ScColumn::SetPattern( SCROW nRow, const ScPatternAttr& rPatAttr )
-{
-    pAttrArray->SetPattern( nRow, &rPatAttr, true/*bPutToPool*/ );
-}
-
-void ScColumn::SetPatternArea( SCROW nStartRow, SCROW nEndRow,
-                                const ScPatternAttr& rPatAttr )
-{
-    pAttrArray->SetPatternArea( nStartRow, nEndRow, &rPatAttr, 
true/*bPutToPool*/ );
-}
-
 void ScColumn::ApplyAttr( SCROW nRow, const SfxPoolItem& rAttr )
 {
     //  in order to only create a new SetItem, we don't need SfxItemPoolCache.
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 60c2f7b0a4e6..55bf2a5be132 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1292,14 +1292,6 @@ bool ScColumn::HasVisibleDataAt(SCROW nRow) const
     return it->type != sc::element_type_empty;
 }
 
-bool ScColumn::IsEmptyAttr() const
-{
-    if (pAttrArray)
-        return pAttrArray->IsEmpty();
-    else
-        return true;
-}
-
 bool ScColumn::IsEmptyBlock(SCROW nStartRow, SCROW nEndRow) const
 {
     std::pair<sc::CellStoreType::const_iterator,size_t> aPos = 
maCells.position(nStartRow);
@@ -3203,51 +3195,6 @@ void ScColumn::GetDataExtrasAt( SCROW nRow, 
ScDataAreaExtras& rDataAreaExtras )
     }
 }
 
-bool ScColumn::IsAllAttrEqual( const ScColumn& rCol, SCROW nStartRow, SCROW 
nEndRow ) const
-{
-    if (pAttrArray && rCol.pAttrArray)
-        return pAttrArray->IsAllEqual( *rCol.pAttrArray, nStartRow, nEndRow );
-    else
-        return !pAttrArray && !rCol.pAttrArray;
-}
-
-bool ScColumn::IsVisibleAttrEqual( const ScColumn& rCol, SCROW nStartRow, 
SCROW nEndRow ) const
-{
-    if (pAttrArray && rCol.pAttrArray)
-        return pAttrArray->IsVisibleEqual( *rCol.pAttrArray, nStartRow, 
nEndRow );
-    else
-        return !pAttrArray && !rCol.pAttrArray;
-}
-
-bool ScColumn::GetFirstVisibleAttr( SCROW& rFirstRow ) const
-{
-    if (pAttrArray)
-        return pAttrArray->GetFirstVisibleAttr( rFirstRow );
-    else
-        return false;
-}
-
-bool ScColumn::GetLastVisibleAttr( SCROW& rLastRow ) const
-{
-    if (pAttrArray)
-    {
-        // row of last cell is needed
-        SCROW nLastData = GetLastDataPos();    // always including notes, 0 if 
none
-
-        return pAttrArray->GetLastVisibleAttr( rLastRow, nLastData );
-    }
-    else
-        return false;
-}
-
-bool ScColumn::HasVisibleAttrIn( SCROW nStartRow, SCROW nEndRow ) const
-{
-    if (pAttrArray)
-        return pAttrArray->HasVisibleAttrIn( nStartRow, nEndRow );
-    else
-        return false;
-}
-
 namespace {
 
 class FindUsedRowsHandler
@@ -3640,19 +3587,4 @@ sal_uInt64 ScColumn::GetCodeCount() const
     return aFunc.getCount();
 }
 
-SCSIZE ScColumn::GetPatternCount() const
-{
-    return pAttrArray ? pAttrArray->Count() : 0;
-}
-
-SCSIZE ScColumn::GetPatternCount( SCROW nRow1, SCROW nRow2 ) const
-{
-    return pAttrArray ? pAttrArray->Count( nRow1, nRow2 ) : 0;
-}
-
-bool ScColumn::ReservePatternCount( SCSIZE nReserve )
-{
-    return pAttrArray && pAttrArray->Reserve( nReserve );
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index e9b7d1d189dc..6e93ce9b8df8 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -39,11 +39,6 @@
 #include <vector>
 #include <cassert>
 
-bool ScColumn::IsMerged( SCROW nRow ) const
-{
-    return pAttrArray->IsMerged(nRow);
-}
-
 sc::MultiDataCellState::StateType ScColumn::HasDataCellsInRange(
     SCROW nRow1, SCROW nRow2, SCROW* pRow1 ) const
 {

Reply via email to