editeng/source/rtf/rtfitem.cxx |    4 +--
 editeng/source/rtf/svxrtf.cxx  |   54 +++++++++++++++++------------------------
 include/editeng/svxrtf.hxx     |    2 -
 3 files changed, 26 insertions(+), 34 deletions(-)

New commits:
commit 2ebde17fec5fa991bd211c56ca93b7e528eea5b8
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Jul 20 15:11:48 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Jul 20 19:23:16 2021 +0200

    no need to allocate child array separately in SvxRTFItemStackType
    
    Change-Id: Ie40cc3b2d05bbb16a2b33a6beb4fdb804454333e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119250
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/editeng/source/rtf/rtfitem.cxx b/editeng/source/rtf/rtfitem.cxx
index c7ea1d3f9ba6..2f7f2fde29de 100644
--- a/editeng/source/rtf/rtfitem.cxx
+++ b/editeng/source/rtf/rtfitem.cxx
@@ -214,7 +214,7 @@ void SvxRTFParser::ReadAttr( int nToken, SfxItemSet* pSet )
                 if( RTF_PARD == nLastToken || RTF_PLAIN == nLastToken )
                     break;
 
-                if (pCurrent->aAttrSet.Count() || pCurrent->m_pChildList ||
+                if (pCurrent->aAttrSet.Count() || 
!pCurrent->maChildList.empty() ||
                     pCurrent->nStyleNo )
                 {
                     // Open a new Group
@@ -1670,7 +1670,7 @@ void SvxRTFParser::RTFPardPlain( bool const bPard, 
SfxItemSet** ppSet )
         RTF_PLAIN != nLastToken &&
         BRACELEFT != nLastToken )
     {
-        if (pCurrent->aAttrSet.Count() || pCurrent->m_pChildList || 
pCurrent->nStyleNo)
+        if (pCurrent->aAttrSet.Count() || !pCurrent->maChildList.empty() || 
pCurrent->nStyleNo)
         {
             // open a new group
             auto xNew(std::make_unique<SvxRTFItemStackType>(*pCurrent, 
*mxInsertPosition, true));
diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx
index 7bbf46a6026c..4b0fd66bb224 100644
--- a/editeng/source/rtf/svxrtf.cxx
+++ b/editeng/source/rtf/svxrtf.cxx
@@ -694,7 +694,7 @@ void SvxRTFParser::AttrGroupEnd()   // process the current, 
delete from Stack
 
     do {        // middle check loop
         sal_Int32 nOldSttNdIdx = pOld->mxStartNodeIdx->GetIdx();
-        if (!pOld->m_pChildList &&
+        if (pOld->maChildList.empty() &&
             ((!pOld->aAttrSet.Count() && !pOld->nStyleNo ) ||
             (nOldSttNdIdx == mxInsertPosition->GetNodeIdx() &&
             pOld->nSttCnt == mxInsertPosition->GetCntIdx() )))
@@ -715,7 +715,7 @@ void SvxRTFParser::AttrGroupEnd()   // process the current, 
delete from Stack
                 pItem = aIter.NextItem();
             } while (pItem);
 
-            if (!pOld->aAttrSet.Count() && !pOld->m_pChildList &&
+            if (!pOld->aAttrSet.Count() && pOld->maChildList.empty() &&
                 !pOld->nStyleNo )
                 break;
         }
@@ -815,7 +815,7 @@ void SvxRTFParser::AttrGroupEnd()   // process the current, 
delete from Stack
                 pCurrent->Add(std::move(pOld));
                 // split up and create new entry, because it makes no sense
                 // to create a "so long" depend list. Bug 95010
-                if (bCrsrBack && 50 < pCurrent->m_pChildList->size())
+                if (bCrsrBack && 50 < pCurrent->maChildList.size())
                 {
                     // at the beginning of a paragraph? Move back one position
                     MovePos();
@@ -869,15 +869,14 @@ void SvxRTFParser::SetAttrSet( SvxRTFItemStackType &rSet )
     if( !bIsSetDfltTab )
         SetDefault( RTF_DEFTAB, 720 );
 
-    if (rSet.m_pChildList)
+    if (!rSet.maChildList.empty())
         rSet.Compress( *this );
     if( rSet.aAttrSet.Count() || rSet.nStyleNo )
         SetAttrInDoc( rSet );
 
     // then process all the children
-    if (rSet.m_pChildList)
-        for (size_t n = 0; n < rSet.m_pChildList->size(); ++n)
-            SetAttrSet( *(*rSet.m_pChildList)[ n ] );
+    for (size_t n = 0; n < rSet.maChildList.size(); ++n)
+        SetAttrSet( *(rSet.maChildList[ n ]) );
 }
 
 // Has no text been inserted yet? (SttPos from the top Stack entry!)
@@ -1019,7 +1018,7 @@ SvxRTFItemStackType::SvxRTFItemStackType(
 */
 void SvxRTFItemStackType::DropChildList()
 {
-    if (!m_pChildList || m_pChildList->empty())
+    if (maChildList.empty())
         return;
 
     std::vector<SvxRTFItemStackType*> bfs;
@@ -1030,9 +1029,9 @@ void SvxRTFItemStackType::DropChildList()
     {
         auto* front = aQueue.front();
         aQueue.pop();
-        if (front->m_pChildList)
+        if (!front->maChildList.empty())
         {
-            for (const auto& a : *front->m_pChildList)
+            for (const auto& a : front->maChildList)
                 aQueue.push(a.get());
             bfs.push_back(front);
         }
@@ -1041,7 +1040,7 @@ void SvxRTFItemStackType::DropChildList()
     for (auto it = bfs.rbegin(); it != bfs.rend(); ++it)
     {
         SvxRTFItemStackType* pNode = *it;
-        pNode->m_pChildList.reset();
+        pNode->maChildList.clear();
     }
 }
 
@@ -1051,9 +1050,7 @@ SvxRTFItemStackType::~SvxRTFItemStackType()
 
 void SvxRTFItemStackType::Add(std::unique_ptr<SvxRTFItemStackType> pIns)
 {
-    if (!m_pChildList)
-         m_pChildList.reset( new SvxRTFItemStackList );
-    m_pChildList->push_back(std::move(pIns));
+    maChildList.push_back(std::move(pIns));
 }
 
 void SvxRTFItemStackType::SetStartPos( const EditPosition& rPos )
@@ -1065,10 +1062,9 @@ void SvxRTFItemStackType::SetStartPos( const 
EditPosition& rPos )
 
 void SvxRTFItemStackType::Compress( const SvxRTFParser& rParser )
 {
-    ENSURE_OR_RETURN_VOID(m_pChildList, "Compress: no ChildList" );
-    ENSURE_OR_RETURN_VOID(!m_pChildList->empty(), "Compress: ChildList empty");
+    ENSURE_OR_RETURN_VOID(!maChildList.empty(), "Compress: ChildList empty");
 
-    SvxRTFItemStackType* pTmp = (*m_pChildList)[0].get();
+    SvxRTFItemStackType* pTmp = maChildList[0].get();
 
     if( !pTmp->aAttrSet.Count() ||
         mxStartNodeIdx->GetIdx() != pTmp->mxStartNodeIdx->GetIdx() ||
@@ -1079,10 +1075,10 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& 
rParser )
     sal_Int32 nLastCnt = pTmp->nEndCnt;
 
     SfxItemSet aMrgSet( pTmp->aAttrSet );
-    for (size_t n = 1; n < m_pChildList->size(); ++n)
+    for (size_t n = 1; n < maChildList.size(); ++n)
     {
-        pTmp = (*m_pChildList)[n].get();
-        if (pTmp->m_pChildList)
+        pTmp = maChildList[n].get();
+        if (!pTmp->maChildList.empty())
             pTmp->Compress( rParser );
 
         if( !pTmp->nSttCnt
@@ -1091,10 +1087,10 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& 
rParser )
             : ( pTmp->nSttCnt != nLastCnt ||
                 aLastNd.GetIdx() != pTmp->mxStartNodeIdx->GetIdx() ))
         {
-            while (++n < m_pChildList->size())
+            while (++n < maChildList.size())
             {
-                pTmp = (*m_pChildList)[n].get();
-                if (pTmp->m_pChildList)
+                pTmp = maChildList[n].get();
+                if (!pTmp->maChildList.empty())
                     pTmp->Compress( rParser );
             }
             return;
@@ -1129,24 +1125,20 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& 
rParser )
     // It can be merged
     aAttrSet.Put( aMrgSet );
 
-    size_t n = 0, nChildLen = m_pChildList->size();
+    size_t n = 0, nChildLen = maChildList.size();
     while (n < nChildLen)
     {
-        pTmp = (*m_pChildList)[n].get();
+        pTmp = maChildList[n].get();
         pTmp->aAttrSet.Differentiate( aMrgSet );
 
-        if (!pTmp->m_pChildList && !pTmp->aAttrSet.Count() && !pTmp->nStyleNo)
+        if (pTmp->maChildList.empty() && !pTmp->aAttrSet.Count() && 
!pTmp->nStyleNo)
         {
-            m_pChildList->erase( m_pChildList->begin() + n );
+            maChildList.erase( maChildList.begin() + n );
             --nChildLen;
             continue;
         }
         ++n;
     }
-    if (m_pChildList->empty())
-    {
-        m_pChildList.reset();
-    }
 }
 void SvxRTFItemStackType::SetRTFDefaults( const SfxItemSet& rDefaults )
 {
diff --git a/include/editeng/svxrtf.hxx b/include/editeng/svxrtf.hxx
index 19a911303fa0..44723700d4a8 100644
--- a/include/editeng/svxrtf.hxx
+++ b/include/editeng/svxrtf.hxx
@@ -225,7 +225,7 @@ class SvxRTFItemStackType
     std::optional<EditNodeIdx>  mxStartNodeIdx;
     std::optional<EditNodeIdx>  mxEndNodeIdx;
     sal_Int32    nSttCnt, nEndCnt;
-    std::unique_ptr<SvxRTFItemStackList> m_pChildList;
+    SvxRTFItemStackList maChildList;
     sal_uInt16   nStyleNo;
 
     SvxRTFItemStackType(SvxRTFItemStackType const&) = delete;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to