[Libreoffice-commits] core.git: Branch 'feature/perfwork5' - sc/inc sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Mon Nov 17 11:21:27 PST 2014


 sc/inc/column.hxx                  |    4 +++-
 sc/inc/document.hxx                |    3 ++-
 sc/inc/table.hxx                   |    3 ++-
 sc/source/core/data/column4.cxx    |    7 +++----
 sc/source/core/data/document.cxx   |    2 +-
 sc/source/core/data/document10.cxx |    5 +++--
 sc/source/core/data/table7.cxx     |    7 +++----
 7 files changed, 17 insertions(+), 14 deletions(-)

New commits:
commit 8efe63bf1c5f6f2a889b991fca4b3922a48f6e87
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Nov 17 14:16:28 2014 -0500

    Avoid unnecessary broadcasting when deleting cells prior to pasting.
    
    Change-Id: Id224fd6fdb804350e7e00634db802e80090ae6d7

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 57ff8aa..86dbd39 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -247,7 +247,9 @@ public:
     bool InitBlockPosition( sc::ColumnBlockPosition& rBlockPos );
     bool InitBlockPosition( sc::ColumnBlockConstPosition& rBlockPos ) const;
 
-    void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol );
+    void DeleteBeforeCopyFromClip(
+        sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol, sc::ColumnSpanSet& rBroadcastSpans );
+
     void CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset );
 
     void CopyFromClip(
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index a09581b..a3bfa07 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1242,7 +1242,8 @@ public:
 
     bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlokPos, SCTAB nTab, SCCOL nCol );
 
-    void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScMarkData& rMark );
+    void DeleteBeforeCopyFromClip(
+        sc::CopyFromClipContext& rCxt, const ScMarkData& rMark, sc::ColumnSpanSet& rBroadcastSpans );
 
     bool CopyOneCellFromClip(
         sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index daacd60..ea1e2a3 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -426,7 +426,8 @@ public:
 
     bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlockPos, SCCOL nCol );
 
-    void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScTable& rClipTab );
+    void DeleteBeforeCopyFromClip(
+        sc::CopyFromClipContext& rCxt, const ScTable& rClipTab, sc::ColumnSpanSet& rBroadcastSpans );
 
     void CopyOneCellFromClip(
         sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index 2d6609d..f0d28eb 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -41,7 +41,8 @@ bool ScColumn::IsMerged( SCROW nRow ) const
     return pAttrArray->IsMerged(nRow);
 }
 
-void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol )
+void ScColumn::DeleteBeforeCopyFromClip(
+    sc::CopyFromClipContext& rCxt, const ScColumn& rClipCol, sc::ColumnSpanSet& rBroadcastSpans )
 {
     sc::CopyFromClipContext::Range aRange = rCxt.getDestRange();
     if (!ValidRow(aRange.mnRow1) || !ValidRow(aRange.mnRow2))
@@ -107,7 +108,7 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc
         SCROW nRow2 = it->mnRow2;
 
         if (nDelFlag & IDF_CONTENTS)
-            DeleteCells(aBlockPos, nRow1, nRow2, nDelFlag, aDeletedRows);
+            DeleteCells(aBlockPos, nRow1, nRow2, nDelFlag, aDeletedRows, &rBroadcastSpans);
 
         if (nDelFlag & IDF_NOTE)
             DeleteCellNotes(aBlockPos, nRow1, nRow2);
@@ -134,8 +135,6 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc
         else if ((nDelFlag & IDF_HARDATTR) == IDF_HARDATTR)
             pAttrArray->DeleteHardAttr(nRow1, nRow2);
     }
-
-    BroadcastCells(aDeletedRows, SC_HINT_DATACHANGED);
 }
 
 void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, SCROW nRow2, size_t nColOffset )
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 9487826..abfe1b0 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -2712,7 +2712,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
         {
             // Delete cells in the destination only if their corresponding clip cells are not empty.
             aCxt.setDestRange(nCol1, nRow1, nCol2, nRow2);
-            DeleteBeforeCopyFromClip(aCxt, rMark);
+            DeleteBeforeCopyFromClip(aCxt, rMark, aBroadcastSpans);
         }
         else
             DeleteArea(nCol1, nRow1, nCol2, nRow2, rMark, nDelFlag, false, &aBroadcastSpans);
diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx
index 49c0a9f..1f14d5d 100644
--- a/sc/source/core/data/document10.cxx
+++ b/sc/source/core/data/document10.cxx
@@ -37,7 +37,8 @@ bool ScDocument::IsMerged( const ScAddress& rPos ) const
     return pTab->IsMerged(rPos.Col(), rPos.Row());
 }
 
-void ScDocument::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScMarkData& rMark )
+void ScDocument::DeleteBeforeCopyFromClip(
+    sc::CopyFromClipContext& rCxt, const ScMarkData& rMark, sc::ColumnSpanSet& rBroadcastSpans )
 {
     SCTAB nClipTab = 0;
     const TableContainer& rClipTabs = rCxt.getClipDoc()->maTabs;
@@ -55,7 +56,7 @@ void ScDocument::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const
         while (!rClipTabs[nClipTab])
             nClipTab = (nClipTab+1) % nClipTabCount;
 
-        pTab->DeleteBeforeCopyFromClip(rCxt, *rClipTabs[nClipTab]);
+        pTab->DeleteBeforeCopyFromClip(rCxt, *rClipTabs[nClipTab], rBroadcastSpans);
 
         nClipTab = (nClipTab+1) % nClipTabCount;
     }
diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx
index 5686921..79a645c 100644
--- a/sc/source/core/data/table7.cxx
+++ b/sc/source/core/data/table7.cxx
@@ -24,7 +24,8 @@ bool ScTable::IsMerged( SCCOL nCol, SCROW nRow ) const
     return aCol[nCol].IsMerged(nRow);
 }
 
-void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScTable& rClipTab )
+void ScTable::DeleteBeforeCopyFromClip(
+    sc::CopyFromClipContext& rCxt, const ScTable& rClipTab, sc::ColumnSpanSet& rBroadcastSpans )
 {
     sc::CopyFromClipContext::Range aRange = rCxt.getDestRange();
     if (!ValidCol(aRange.mnCol1) || !ValidCol(aRange.mnCol2))
@@ -37,15 +38,13 @@ void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScT
     ScRange aClipRange = rCxt.getClipDoc()->GetClipParam().getWholeRange();
     SCCOL nClipCol = aClipRange.aStart.Col();
     {
-        ScBulkBroadcast aBulkBroadcast(pDocument->GetBASM());
-
         for (SCCOL nCol = aRange.mnCol1; nCol <= aRange.mnCol2; ++nCol, ++nClipCol)
         {
             if (nClipCol > aClipRange.aEnd.Col())
                 nClipCol = aClipRange.aStart.Col(); // loop through columns.
 
             const ScColumn& rClipCol = rClipTab.aCol[nClipCol];
-            aCol[nCol].DeleteBeforeCopyFromClip(rCxt, rClipCol);
+            aCol[nCol].DeleteBeforeCopyFromClip(rCxt, rClipCol, rBroadcastSpans);
         }
     }
 


More information about the Libreoffice-commits mailing list