sc/inc/chgtrack.hxx                                    |   10 +-
 sc/source/core/tool/chgtrack.cxx                       |    3 
 sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx |   76 +++++++----------
 sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx |   14 +--
 4 files changed, 47 insertions(+), 56 deletions(-)

New commits:
commit a5e733aa1d7a6e4905062dae85376fcad2c92c67
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Aug 22 15:51:30 2018 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Aug 24 08:54:37 2018 +0200

    pass ScChangeAction around by std::unique_ptr
    
    Change-Id: I34dbed97f01a14dbdcdaaec90233a4a1641cee0e
    Reviewed-on: https://gerrit.libreoffice.org/59454
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx
index eb7c63d3174c..e39920bfe5c0 100644
--- a/sc/inc/chgtrack.hxx
+++ b/sc/inc/chgtrack.hxx
@@ -215,8 +215,6 @@ protected:
     // only to be used in the XML import
     ScChangeAction( ScChangeActionType, const ScBigRange&, const sal_uLong 
nAction);
 
-    virtual ~ScChangeAction();
-
     OUString GetRefString(
         const ScBigRange& rRange, const ScDocument* pDoc, bool bFlag3D = 
false) const;
 
@@ -277,6 +275,8 @@ protected:
     virtual const ScChangeTrack* GetChangeTrack() const = 0;
 
 public:
+    virtual ~ScChangeAction();
+
     bool IsInsertType() const;
     bool IsDeleteType() const;
     bool IsVirgin() const;
@@ -367,7 +367,6 @@ class ScChangeActionIns : public ScChangeAction
     bool mbEndOfList; /// whether or not a row was auto-inserted at the bottom.
 
     ScChangeActionIns( const ScRange& rRange, bool bEndOfList = false );
-    virtual                     ~ScChangeActionIns() override;
 
     virtual void                AddContent( ScChangeActionContent* ) override 
{}
     virtual void                DeleteCellEntries() override {}
@@ -377,6 +376,7 @@ class ScChangeActionIns : public ScChangeAction
     virtual const ScChangeTrack*    GetChangeTrack() const override { return 
nullptr; }
 
 public:
+    virtual                     ~ScChangeActionIns() override;
     ScChangeActionIns(
         const sal_uLong nActionNumber,
         const ScChangeActionState eState,
@@ -437,7 +437,6 @@ class ScChangeActionDel : public ScChangeAction
     SCROW               nDy;
 
     ScChangeActionDel( const ScRange& rRange, SCCOL nDx, SCROW nDy, 
ScChangeTrack* );
-    virtual ~ScChangeActionDel() override;
 
     virtual void                AddContent( ScChangeActionContent* ) override;
     virtual void                DeleteCellEntries() override;
@@ -461,6 +460,7 @@ public:
         const OUString &sComment, const ScChangeActionType eType,
         const SCCOLROW nD, ScChangeTrack* pTrack); // only to use in the XML 
import
                                             // which of nDx and nDy is set is 
dependent on the type
+    virtual ~ScChangeActionDel() override;
 
     // is the last in a row (or single)
     bool IsBaseDelete() const;
@@ -1123,7 +1123,7 @@ public:
 
     sal_uLong           AddLoadedGenerated( const ScCellValue& rNewCell,
                             const ScBigRange& aBigRange, const OUString& 
sNewValue ); // only to use in the XML import
-    void                AppendLoaded( ScChangeAction* pAppend ); // this is 
only for the XML import public, it should be protected
+    void                AppendLoaded( std::unique_ptr<ScChangeAction> pAppend 
); // this is only for the XML import public, it should be protected
     void                SetActionMax(sal_uLong nTempActionMax)
                             { nActionMax = nTempActionMax; } // only to use in 
the XML import
 
diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx
index 840e5905af9a..149a7f016c7a 100644
--- a/sc/source/core/tool/chgtrack.cxx
+++ b/sc/source/core/tool/chgtrack.cxx
@@ -2379,8 +2379,9 @@ void ScChangeTrack::MasterLinks( ScChangeAction* pAppend )
     }
 }
 
-void ScChangeTrack::AppendLoaded( ScChangeAction* pAppend )
+void ScChangeTrack::AppendLoaded( std::unique_ptr<ScChangeAction> pActionParam 
)
 {
+    ScChangeAction* pAppend = pActionParam.release();
     aMap.insert( ::std::make_pair( pAppend->GetActionNumber(), pAppend ) );
     if ( !pLast )
         pFirst = pLast = pAppend;
diff --git a/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx 
b/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx
index 8d0c4ce6c9b7..e440861e43f6 100644
--- a/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx
+++ b/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx
@@ -26,6 +26,7 @@
 #include <tools/datetime.hxx>
 #include <osl/diagnose.h>
 #include <svl/zforlist.hxx>
+#include <o3tl/make_unique.hxx>
 #include <sax/tools/converter.hxx>
 
 #define SC_CHANGE_ID_PREFIX "ct"
@@ -168,29 +169,29 @@ void 
ScXMLChangeTrackingImportHelper::StartChangeAction(const ScChangeActionType
         case SC_CAT_INSERT_ROWS:
         case SC_CAT_INSERT_TABS:
         {
-            pCurrentAction = new ScMyInsAction(nActionType);
+            pCurrentAction = o3tl::make_unique<ScMyInsAction>(nActionType);
         }
         break;
         case SC_CAT_DELETE_COLS:
         case SC_CAT_DELETE_ROWS:
         case SC_CAT_DELETE_TABS:
         {
-            pCurrentAction = new ScMyDelAction(nActionType);
+            pCurrentAction = o3tl::make_unique<ScMyDelAction>(nActionType);
         }
         break;
         case SC_CAT_MOVE:
         {
-            pCurrentAction = new ScMyMoveAction();
+            pCurrentAction = o3tl::make_unique<ScMyMoveAction>();
         }
         break;
         case SC_CAT_CONTENT:
         {
-            pCurrentAction = new ScMyContentAction();
+            pCurrentAction = o3tl::make_unique<ScMyContentAction>();
         }
         break;
         case SC_CAT_REJECT:
         {
-            pCurrentAction = new ScMyRejAction();
+            pCurrentAction = o3tl::make_unique<ScMyRejAction>();
         }
         break;
         default:
@@ -231,7 +232,7 @@ void 
ScXMLChangeTrackingImportHelper::SetPreviousChange(const sal_uInt32 nPrevio
                             ScMyCellInfo* pCellInfo)
 {
     OSL_ENSURE(pCurrentAction->nActionType == SC_CAT_CONTENT, "wrong action 
type");
-    ScMyContentAction* pAction = 
static_cast<ScMyContentAction*>(pCurrentAction);
+    ScMyContentAction* pAction = 
static_cast<ScMyContentAction*>(pCurrentAction.get());
     pAction->nPreviousAction = nPreviousAction;
     pAction->pCellInfo.reset( pCellInfo );
 }
@@ -298,7 +299,7 @@ void 
ScXMLChangeTrackingImportHelper::SetInsertionCutOff(const sal_uInt32 nID, c
     if ((pCurrentAction->nActionType == SC_CAT_DELETE_COLS) ||
         (pCurrentAction->nActionType == SC_CAT_DELETE_ROWS))
     {
-        static_cast<ScMyDelAction*>(pCurrentAction)->pInsCutOff.reset( new 
ScMyInsertionCutOff(nID, nPosition) );
+        static_cast<ScMyDelAction*>(pCurrentAction.get())->pInsCutOff.reset( 
new ScMyInsertionCutOff(nID, nPosition) );
     }
     else
     {
@@ -311,7 +312,7 @@ void ScXMLChangeTrackingImportHelper::AddMoveCutOff(const 
sal_uInt32 nID, const
     if ((pCurrentAction->nActionType == SC_CAT_DELETE_COLS) ||
         (pCurrentAction->nActionType == SC_CAT_DELETE_ROWS))
     {
-        
static_cast<ScMyDelAction*>(pCurrentAction)->aMoveCutOffs.push_front(ScMyMoveCutOff(nID,
 nStartPosition, nEndPosition));
+        
static_cast<ScMyDelAction*>(pCurrentAction.get())->aMoveCutOffs.push_front(ScMyMoveCutOff(nID,
 nStartPosition, nEndPosition));
     }
     else
     {
@@ -323,7 +324,7 @@ void ScXMLChangeTrackingImportHelper::SetMoveRanges(const 
ScBigRange& aSourceRan
 {
     if (pCurrentAction->nActionType == SC_CAT_MOVE)
     {
-         static_cast<ScMyMoveAction*>(pCurrentAction)->pMoveRanges.reset( new 
ScMyMoveRanges(aSourceRange, aTargetRange) );
+         
static_cast<ScMyMoveAction*>(pCurrentAction.get())->pMoveRanges.reset( new 
ScMyMoveRanges(aSourceRange, aTargetRange) );
     }
     else
     {
@@ -338,7 +339,7 @@ void ScXMLChangeTrackingImportHelper::GetMultiSpannedRange()
     {
         if (nMultiSpannedSlaveCount)
         {
-            static_cast<ScMyDelAction*>(pCurrentAction)->nD = 
nMultiSpannedSlaveCount;
+            static_cast<ScMyDelAction*>(pCurrentAction.get())->nD = 
nMultiSpannedSlaveCount;
         }
         ++nMultiSpannedSlaveCount;
         if (nMultiSpannedSlaveCount >= nMultiSpanned)
@@ -358,12 +359,12 @@ void 
ScXMLChangeTrackingImportHelper::AddGenerated(std::unique_ptr<ScMyCellInfo>
     ScMyGenerated aGenerated { aBigRange, 0, std::move(pCellInfo) };
     if (pCurrentAction->nActionType == SC_CAT_MOVE)
     {
-        
static_cast<ScMyMoveAction*>(pCurrentAction)->aGeneratedList.push_back(std::move(aGenerated));
+        
static_cast<ScMyMoveAction*>(pCurrentAction.get())->aGeneratedList.push_back(std::move(aGenerated));
     }
     else if ((pCurrentAction->nActionType == SC_CAT_DELETE_COLS) ||
         (pCurrentAction->nActionType == SC_CAT_DELETE_ROWS))
     {
-        
static_cast<ScMyDelAction*>(pCurrentAction)->aGeneratedList.push_back(std::move(aGenerated));
+        
static_cast<ScMyDelAction*>(pCurrentAction.get())->aGeneratedList.push_back(std::move(aGenerated));
     }
     else
     {
@@ -384,7 +385,7 @@ void ScXMLChangeTrackingImportHelper::EndChangeAction()
         GetMultiSpannedRange();
 
     if  (pCurrentAction->nActionNumber > 0)
-        aActions.push_back(pCurrentAction);
+        aActions.push_back(std::move(pCurrentAction));
     else
     {
         OSL_FAIL("no current action");
@@ -412,7 +413,7 @@ void ScXMLChangeTrackingImportHelper::ConvertInfo(const 
ScMyActionInfo& aInfo, O
         rUser = aInfo.sUser; // shouldn't happen
 }
 
-ScChangeAction* ScXMLChangeTrackingImportHelper::CreateInsertAction(const 
ScMyInsAction* pAction)
+std::unique_ptr<ScChangeAction> 
ScXMLChangeTrackingImportHelper::CreateInsertAction(const ScMyInsAction* 
pAction)
 {
     DateTime aDateTime( Date(0), tools::Time(0) );
     OUString aUser;
@@ -420,12 +421,11 @@ ScChangeAction* 
ScXMLChangeTrackingImportHelper::CreateInsertAction(const ScMyIn
 
     OUString sComment (pAction->aInfo.sComment);
 
-    ScChangeAction* pNewAction = new ScChangeActionIns(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
+    return o3tl::make_unique<ScChangeActionIns>(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
         pAction->aBigRange, aUser, aDateTime, sComment, pAction->nActionType);
-    return pNewAction;
 }
 
-ScChangeAction* ScXMLChangeTrackingImportHelper::CreateDeleteAction(const 
ScMyDelAction* pAction)
+std::unique_ptr<ScChangeAction> 
ScXMLChangeTrackingImportHelper::CreateDeleteAction(const ScMyDelAction* 
pAction)
 {
     DateTime aDateTime( Date(0), tools::Time(0) );
     OUString aUser;
@@ -433,12 +433,11 @@ ScChangeAction* 
ScXMLChangeTrackingImportHelper::CreateDeleteAction(const ScMyDe
 
     OUString sComment (pAction->aInfo.sComment);
 
-    ScChangeAction* pNewAction = new ScChangeActionDel(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
+    return o3tl::make_unique<ScChangeActionDel>(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
         pAction->aBigRange, aUser, aDateTime, sComment, pAction->nActionType, 
pAction->nD, pTrack);
-    return pNewAction;
 }
 
-ScChangeAction* ScXMLChangeTrackingImportHelper::CreateMoveAction(const 
ScMyMoveAction* pAction)
+std::unique_ptr<ScChangeAction> 
ScXMLChangeTrackingImportHelper::CreateMoveAction(const ScMyMoveAction* pAction)
 {
     OSL_ENSURE(pAction->pMoveRanges, "no move ranges");
     if (pAction->pMoveRanges)
@@ -449,14 +448,13 @@ ScChangeAction* 
ScXMLChangeTrackingImportHelper::CreateMoveAction(const ScMyMove
 
         OUString sComment (pAction->aInfo.sComment);
 
-        ScChangeAction* pNewAction = new 
ScChangeActionMove(pAction->nActionNumber, pAction->nActionState, 
pAction->nRejectingNumber,
+        return o3tl::make_unique<ScChangeActionMove>(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
             pAction->pMoveRanges->aTargetRange, aUser, aDateTime, sComment, 
pAction->pMoveRanges->aSourceRange , pTrack);
-        return pNewAction;
     }
     return nullptr;
 }
 
-ScChangeAction* ScXMLChangeTrackingImportHelper::CreateRejectionAction(const 
ScMyRejAction* pAction)
+std::unique_ptr<ScChangeAction> 
ScXMLChangeTrackingImportHelper::CreateRejectionAction(const ScMyRejAction* 
pAction)
 {
     DateTime aDateTime( Date(0), tools::Time(0) );
     OUString aUser;
@@ -464,12 +462,11 @@ ScChangeAction* 
ScXMLChangeTrackingImportHelper::CreateRejectionAction(const ScM
 
     OUString sComment (pAction->aInfo.sComment);
 
-    ScChangeAction* pNewAction = new 
ScChangeActionReject(pAction->nActionNumber, pAction->nActionState, 
pAction->nRejectingNumber,
+    return o3tl::make_unique<ScChangeActionReject>(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
         pAction->aBigRange, aUser, aDateTime, sComment);
-    return pNewAction;
 }
 
-ScChangeAction* ScXMLChangeTrackingImportHelper::CreateContentAction(const 
ScMyContentAction* pAction)
+std::unique_ptr<ScChangeAction> 
ScXMLChangeTrackingImportHelper::CreateContentAction(const ScMyContentAction* 
pAction)
 {
     ScCellValue aCell;
     OUString sInputString;
@@ -485,9 +482,8 @@ ScChangeAction* 
ScXMLChangeTrackingImportHelper::CreateContentAction(const ScMyC
 
     OUString sComment (pAction->aInfo.sComment);
 
-    ScChangeAction* pNewAction = new 
ScChangeActionContent(pAction->nActionNumber, pAction->nActionState, 
pAction->nRejectingNumber,
+    return o3tl::make_unique<ScChangeActionContent>(pAction->nActionNumber, 
pAction->nActionState, pAction->nRejectingNumber,
         pAction->aBigRange, aUser, aDateTime, sComment, aCell, pDoc, 
sInputString);
-    return pNewAction;
 }
 
 void 
ScXMLChangeTrackingImportHelper::CreateGeneratedActions(std::deque<ScMyGenerated>&
 rList)
@@ -752,7 +748,7 @@ void 
ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc)
         auto aEndItr(aActions.end());
         while (aItr != aEndItr)
         {
-            ScChangeAction* pAction = nullptr;
+            std::unique_ptr<ScChangeAction> pAction;
 
             switch ((*aItr)->nActionType)
             {
@@ -760,33 +756,33 @@ void 
ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc)
                 case SC_CAT_INSERT_ROWS:
                 case SC_CAT_INSERT_TABS:
                 {
-                    pAction = 
CreateInsertAction(static_cast<ScMyInsAction*>(*aItr));
+                    pAction = 
CreateInsertAction(static_cast<ScMyInsAction*>(aItr->get()));
                 }
                 break;
                 case SC_CAT_DELETE_COLS:
                 case SC_CAT_DELETE_ROWS:
                 case SC_CAT_DELETE_TABS:
                 {
-                    ScMyDelAction* pDelAct = 
static_cast<ScMyDelAction*>(*aItr);
+                    ScMyDelAction* pDelAct = 
static_cast<ScMyDelAction*>(aItr->get());
                     pAction = CreateDeleteAction(pDelAct);
                     CreateGeneratedActions(pDelAct->aGeneratedList);
                 }
                 break;
                 case SC_CAT_MOVE:
                 {
-                    ScMyMoveAction* pMovAct = 
static_cast<ScMyMoveAction*>(*aItr);
+                    ScMyMoveAction* pMovAct = 
static_cast<ScMyMoveAction*>(aItr->get());
                     pAction = CreateMoveAction(pMovAct);
                     CreateGeneratedActions(pMovAct->aGeneratedList);
                 }
                 break;
                 case SC_CAT_CONTENT:
                 {
-                    pAction = 
CreateContentAction(static_cast<ScMyContentAction*>(*aItr));
+                    pAction = 
CreateContentAction(static_cast<ScMyContentAction*>(aItr->get()));
                 }
                 break;
                 case SC_CAT_REJECT:
                 {
-                    pAction = 
CreateRejectionAction(static_cast<ScMyRejAction*>(*aItr));
+                    pAction = 
CreateRejectionAction(static_cast<ScMyRejAction*>(aItr->get()));
                 }
                 break;
                 default:
@@ -796,7 +792,7 @@ void 
ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc)
             }
 
             if (pAction)
-                pTrack->AppendLoaded(pAction);
+                pTrack->AppendLoaded(std::move(pAction));
             else
             {
                 OSL_FAIL("no action");
@@ -811,16 +807,12 @@ void 
ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc)
         aEndItr = aActions.end();
         while (aItr != aEndItr)
         {
-            SetDependencies(*aItr);
+            SetDependencies(aItr->get());
 
             if ((*aItr)->nActionType == SC_CAT_CONTENT)
                 ++aItr;
             else
-            {
-                if (*aItr)
-                    delete *aItr;
                 aItr = aActions.erase(aItr);
-            }
         }
 
         aItr = aActions.begin();
@@ -828,9 +820,7 @@ void 
ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc)
         while (aItr != aEndItr)
         {
             OSL_ENSURE((*aItr)->nActionType == SC_CAT_CONTENT, "wrong action 
type");
-            SetNewCell(static_cast<ScMyContentAction*>(*aItr));
-            if (*aItr)
-                delete *aItr;
+            SetNewCell(static_cast<ScMyContentAction*>(aItr->get()));
             aItr = aActions.erase(aItr);
         }
         if (aProtect.getLength())
diff --git a/sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx 
b/sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx
index deeb12a6674d..587cf654d2d8 100644
--- a/sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx
+++ b/sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx
@@ -164,21 +164,21 @@ struct ScMyRejAction : public ScMyBaseAction
 class ScXMLChangeTrackingImportHelper
 {
     std::set<OUString>  aUsers;
-    std::deque<ScMyBaseAction*> aActions;
+    std::deque<std::unique_ptr<ScMyBaseAction>> aActions;
     css::uno::Sequence<sal_Int8> aProtect;
     ScDocument*         pDoc;
     ScChangeTrack*      pTrack;
-    ScMyBaseAction*     pCurrentAction;
+    std::unique_ptr<ScMyBaseAction> pCurrentAction;
     sal_Int16           nMultiSpanned;
     sal_Int16           nMultiSpannedSlaveCount;
 
 private:
     void ConvertInfo(const ScMyActionInfo& aInfo, OUString& rUser, DateTime& 
aDateTime);
-    ScChangeAction* CreateInsertAction(const ScMyInsAction* pAction);
-    ScChangeAction* CreateDeleteAction(const ScMyDelAction* pAction);
-    ScChangeAction* CreateMoveAction(const ScMyMoveAction* pAction);
-    ScChangeAction* CreateRejectionAction(const ScMyRejAction* pAction);
-    ScChangeAction* CreateContentAction(const ScMyContentAction* pAction);
+    std::unique_ptr<ScChangeAction> CreateInsertAction(const ScMyInsAction* 
pAction);
+    std::unique_ptr<ScChangeAction> CreateDeleteAction(const ScMyDelAction* 
pAction);
+    std::unique_ptr<ScChangeAction> CreateMoveAction(const ScMyMoveAction* 
pAction);
+    std::unique_ptr<ScChangeAction> CreateRejectionAction(const ScMyRejAction* 
pAction);
+    std::unique_ptr<ScChangeAction> CreateContentAction(const 
ScMyContentAction* pAction);
 
     void CreateGeneratedActions(std::deque<ScMyGenerated>& rList);
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to