editeng/source/editeng/eertfpar.cxx | 13 +- editeng/source/rtf/rtfitem.cxx | 4 editeng/source/rtf/svxrtf.cxx | 162 ++++++++++++++++++------------------ include/editeng/svxrtf.hxx | 31 ++---- 4 files changed, 103 insertions(+), 107 deletions(-)
New commits: commit a0021a7fbf3b9799829f4a27efe20e992e8709f6 Author: Michael Stahl <mst...@redhat.com> Date: Mon Jul 20 13:32:03 2015 +0200 editeng: replace boost::ptr_vector with std::vector<std::unique_ptr>> Change-Id: I29923bc78100d4b196d285dd78f664f7bcf3df19 diff --git a/editeng/source/rtf/rtfitem.cxx b/editeng/source/rtf/rtfitem.cxx index ca864e1..5e1f233 100644 --- a/editeng/source/rtf/rtfitem.cxx +++ b/editeng/source/rtf/rtfitem.cxx @@ -244,7 +244,7 @@ void SvxRTFParser::ReadAttr( int nToken, SfxItemSet* pSet ) if( RTF_PARD == nLastToken || RTF_PLAIN == nLastToken ) break; - if( pAkt->aAttrSet.Count() || pAkt->pChildList || + if (pAkt->aAttrSet.Count() || pAkt->m_pChildList || pAkt->nStyleNo ) { // Open a new Group @@ -1715,7 +1715,7 @@ void SvxRTFParser::RTFPardPlain( bool const bPard, SfxItemSet** ppSet ) RTF_PLAIN != nLastToken && BRACELEFT != nLastToken ) { - if( pAkt->aAttrSet.Count() || pAkt->pChildList || pAkt->nStyleNo ) + if (pAkt->aAttrSet.Count() || pAkt->m_pChildList || pAkt->nStyleNo) { // open a new group SvxRTFItemStackType* pNew = new SvxRTFItemStackType( *pAkt, *pInsPos, true ); diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx index 2656e44..6fb3283 100644 --- a/editeng/source/rtf/svxrtf.cxx +++ b/editeng/source/rtf/svxrtf.cxx @@ -195,11 +195,11 @@ INSINGLECHAR: { InsertText(); // all collected Attributes are set - for( sal_uInt16 n = aAttrSetList.size(); n; ) + for (size_t n = m_AttrSetList.size(); n; ) { - SvxRTFItemStackType* pStkSet = &aAttrSetList[--n]; + auto const& pStkSet = m_AttrSetList[--n]; SetAttrSet( *pStkSet ); - aAttrSetList.pop_back(); + m_AttrSetList.pop_back(); } } break; @@ -876,7 +876,7 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack do { // middle check loop sal_Int32 nOldSttNdIdx = pOld->pSttNd->GetIdx(); - if( !pOld->pChildList && + if (!pOld->m_pChildList && ((!pOld->aAttrSet.Count() && !pOld->nStyleNo ) || (nOldSttNdIdx == pInsPos->GetNodeIdx() && pOld->nSttCnt == pInsPos->GetCntIdx() ))) @@ -899,7 +899,7 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack pItem = aIter.NextItem(); } - if( !pOld->aAttrSet.Count() && !pOld->pChildList && + if (!pOld->aAttrSet.Count() && !pOld->m_pChildList && !pOld->nStyleNo ) break; } @@ -933,8 +933,8 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack // - all character attributes sre keep the area // - all paragraph attributes to get the area // up to the previous paragraph - SvxRTFItemStackType* pNew = new SvxRTFItemStackType( - *pOld, *pInsPos, true ); + ::std::unique_ptr<SvxRTFItemStackType> pNew( + new SvxRTFItemStackType(*pOld, *pInsPos, true)); pNew->aAttrSet.SetParent( pOld->aAttrSet.GetParent() ); // Delete all paragraph attributes from pNew @@ -946,7 +946,9 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack // Were there any? if( pNew->aAttrSet.Count() == pOld->aAttrSet.Count() ) - delete pNew; + { + pNew.reset(); + } else { pNew->nStyleNo = 0; @@ -963,16 +965,16 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack if( pAkt ) { - pAkt->Add( pOld ); - pAkt->Add( pNew ); + pAkt->Add(std::unique_ptr<SvxRTFItemStackType>(pOld)); + pAkt->Add(std::move(pNew)); } else { // Last off the stack, thus cache it until the next text was // read. (Span no attributes!) - aAttrSetList.push_back( pOld ); - aAttrSetList.push_back( pNew ); + m_AttrSetList.push_back(std::unique_ptr<SvxRTFItemStackType>(pOld)); + m_AttrSetList.push_back(std::move(pNew)); } pOld = 0; // Do not delete pOld break; @@ -998,10 +1000,10 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack if( pAkt ) { - pAkt->Add( pOld ); + pAkt->Add(std::unique_ptr<SvxRTFItemStackType>(pOld)); // split up and create new entry, because it make no sense // to create a "so long" depend list. Bug 95010 - if( bCrsrBack && 50 < pAkt->pChildList->size() ) + if (bCrsrBack && 50 < pAkt->m_pChildList->size()) { // at the beginning of a paragraph? Move back one position MovePos(true); @@ -1023,7 +1025,7 @@ void SvxRTFParser::AttrGroupEnd() // process the current, delete from Stack else // Last off the stack, thus cache it until the next text was // read. (Span no attributes!) - aAttrSetList.push_back( pOld ); + m_AttrSetList.push_back(std::unique_ptr<SvxRTFItemStackType>(pOld)); pOld = 0; } @@ -1046,11 +1048,11 @@ void SvxRTFParser::SetAllAttrOfStk() // end all Attr. and set it into doc while( !aAttrStack.empty() ) AttrGroupEnd(); - for( sal_uInt16 n = aAttrSetList.size(); n; ) + for (size_t n = m_AttrSetList.size(); n; ) { - SvxRTFItemStackType* pStkSet = &aAttrSetList[--n]; + auto const& pStkSet = m_AttrSetList[--n]; SetAttrSet( *pStkSet ); - aAttrSetList.pop_back(); + m_AttrSetList.pop_back(); } } @@ -1061,15 +1063,15 @@ void SvxRTFParser::SetAttrSet( SvxRTFItemStackType &rSet ) if( !bIsSetDfltTab ) SetDefault( RTF_DEFTAB, 720 ); - if( rSet.pChildList ) + if (rSet.m_pChildList) rSet.Compress( *this ); if( rSet.aAttrSet.Count() || rSet.nStyleNo ) SetAttrInDoc( rSet ); // then process all the children - if( rSet.pChildList ) - for( size_t n = 0; n < rSet.pChildList->size(); ++n ) - SetAttrSet( (*rSet.pChildList)[ n ] ); + if (rSet.m_pChildList) + for (size_t n = 0; n < rSet.m_pChildList->size(); ++n) + SetAttrSet( *(*rSet.m_pChildList)[ n ] ); } // Has no text been inserted yet? (SttPos from the top Stack entry!) @@ -1130,9 +1132,9 @@ SvxRTFStyleType::SvxRTFStyleType( SfxItemPool& rPool, const sal_uInt16* pWhichRa SvxRTFItemStackType::SvxRTFItemStackType( SfxItemPool& rPool, const sal_uInt16* pWhichRange, const SvxPosition& rPos ) - : aAttrSet( rPool, pWhichRange ), - pChildList( 0 ), - nStyleNo( 0 ) + : aAttrSet( rPool, pWhichRange ) + , m_pChildList( nullptr ) + , nStyleNo( 0 ) { pSttNd = rPos.MakeNodeIdx(); nSttCnt = rPos.GetCntIdx(); @@ -1144,9 +1146,9 @@ SvxRTFItemStackType::SvxRTFItemStackType( const SvxRTFItemStackType& rCpy, const SvxPosition& rPos, bool const bCopyAttr ) - : aAttrSet( *rCpy.aAttrSet.GetPool(), rCpy.aAttrSet.GetRanges() ), - pChildList( 0 ), - nStyleNo( rCpy.nStyleNo ) + : aAttrSet( *rCpy.aAttrSet.GetPool(), rCpy.aAttrSet.GetRanges() ) + , m_pChildList( nullptr ) + , nStyleNo( rCpy.nStyleNo ) { pSttNd = rPos.MakeNodeIdx(); nSttCnt = rPos.GetCntIdx(); @@ -1160,18 +1162,18 @@ SvxRTFItemStackType::SvxRTFItemStackType( SvxRTFItemStackType::~SvxRTFItemStackType() { - if( pChildList ) - delete pChildList; + if (m_pChildList) + delete m_pChildList; if( pSttNd != pEndNd ) delete pEndNd; delete pSttNd; } -void SvxRTFItemStackType::Add( SvxRTFItemStackType* pIns ) +void SvxRTFItemStackType::Add(std::unique_ptr<SvxRTFItemStackType> pIns) { - if( !pChildList ) - pChildList = new SvxRTFItemStackList(); - pChildList->push_back( pIns ); + if (!m_pChildList) + m_pChildList = new SvxRTFItemStackList(); + m_pChildList->push_back(std::move(pIns)); } void SvxRTFItemStackType::SetStartPos( const SvxPosition& rPos ) @@ -1204,21 +1206,20 @@ void SvxRTFItemStackType::MoveFullNode(const SvxNodeIdx &rOldNode, } //And the same for all the children - sal_Int32 nCount = pChildList ? pChildList->size() : 0; + sal_Int32 nCount = m_pChildList ? m_pChildList->size() : 0; for (sal_Int32 i = 0; i < nCount; ++i) { - SvxRTFItemStackType* pStk = &(*pChildList)[i]; + auto const& pStk = (*m_pChildList)[i]; pStk->MoveFullNode(rOldNode, rNewNode); } } void SvxRTFItemStackType::Compress( const SvxRTFParser& rParser ) { - ENSURE_OR_RETURN_VOID(pChildList, "Compress: no ChildList" ); - ENSURE_OR_RETURN_VOID(!pChildList->empty(), "Compress: ChildList empty"); + ENSURE_OR_RETURN_VOID(m_pChildList, "Compress: no ChildList" ); + ENSURE_OR_RETURN_VOID(!m_pChildList->empty(), "Compress: ChildList empty"); - sal_uInt16 n; - SvxRTFItemStackType* pTmp = &(*pChildList)[0]; + SvxRTFItemStackType* pTmp = (*m_pChildList)[0].get(); if( !pTmp->aAttrSet.Count() || pSttNd->GetIdx() != pTmp->pSttNd->GetIdx() || @@ -1229,10 +1230,10 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& rParser ) sal_Int32 nLastCnt = pTmp->nEndCnt; SfxItemSet aMrgSet( pTmp->aAttrSet ); - for( n = 1; n < pChildList->size(); ++n ) + for (size_t n = 1; n < m_pChildList->size(); ++n) { - pTmp = &(*pChildList)[n]; - if( pTmp->pChildList ) + pTmp = (*m_pChildList)[n].get(); + if (pTmp->m_pChildList) pTmp->Compress( rParser ); if( !pTmp->nSttCnt @@ -1241,9 +1242,12 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& rParser ) : ( pTmp->nSttCnt != nLastCnt || pLastNd->GetIdx() != pTmp->pSttNd->GetIdx() )) { - while( ++n < pChildList->size() ) - if( (pTmp = &(*pChildList)[n])->pChildList ) + while (++n < m_pChildList->size()) + { + pTmp = (*m_pChildList)[n].get(); + if (pTmp->m_pChildList) pTmp->Compress( rParser ); + } return; } @@ -1277,21 +1281,21 @@ void SvxRTFItemStackType::Compress( const SvxRTFParser& rParser ) // It can be merged aAttrSet.Put( aMrgSet ); - for( n = 0; n < pChildList->size(); ++n ) + for (size_t n = 0; n < m_pChildList->size(); ++n) { - pTmp = &(*pChildList)[n]; + pTmp = (*m_pChildList)[n].get(); pTmp->aAttrSet.Differentiate( aMrgSet ); - if( !pTmp->pChildList && !pTmp->aAttrSet.Count() && !pTmp->nStyleNo ) + if (!pTmp->m_pChildList && !pTmp->aAttrSet.Count() && !pTmp->nStyleNo) { - pChildList->erase( pChildList->begin() + n ); + m_pChildList->erase( m_pChildList->begin() + n ); --n; } } - if( pChildList->empty() ) + if (m_pChildList->empty()) { - delete pChildList; - pChildList = 0; + delete m_pChildList; + m_pChildList = nullptr; } } void SvxRTFItemStackType::SetRTFDefaults( const SfxItemSet& rDefaults ) diff --git a/include/editeng/svxrtf.hxx b/include/editeng/svxrtf.hxx index c4b1ef7..19a3f84 100644 --- a/include/editeng/svxrtf.hxx +++ b/include/editeng/svxrtf.hxx @@ -31,7 +31,6 @@ #include <map> #include <utility> #include <memory> -#include <boost/ptr_container/ptr_vector.hpp> namespace vcl { class Font; } class Color; @@ -39,7 +38,7 @@ class Graphic; class DateTime; struct SvxRTFStyleType; class SvxRTFItemStackType; -class SvxRTFItemStackList : public boost::ptr_vector<SvxRTFItemStackType> {}; +class SvxRTFItemStackList : public std::vector<std::unique_ptr<SvxRTFItemStackType>> {}; namespace com { namespace sun { namespace star { namespace document { @@ -176,7 +175,7 @@ class EDITENG_DLLPUBLIC SvxRTFParser : public SvRTFParser SvxRTFFontTbl m_FontTable; SvxRTFStyleTbl m_StyleTable; SvxRTFItemStack aAttrStack; - SvxRTFItemStackList aAttrSetList; + SvxRTFItemStackList m_AttrSetList; RTFPlainAttrMapIds aPlainMap; RTFPardAttrMapIds aPardMap; @@ -326,13 +325,13 @@ class EDITENG_DLLPUBLIC SvxRTFItemStackType SfxItemSet aAttrSet; SvxNodeIdx *pSttNd, *pEndNd; sal_Int32 nSttCnt, nEndCnt; - SvxRTFItemStackList* pChildList; + SvxRTFItemStackList* m_pChildList; sal_uInt16 nStyleNo; SvxRTFItemStackType( SfxItemPool&, const sal_uInt16* pWhichRange, const SvxPosition& ); - void Add( SvxRTFItemStackType* ); + void Add(std::unique_ptr<SvxRTFItemStackType>); void Compress( const SvxRTFParser& ); public: commit d2726959ff54f1c0b19dc4e605bd3ebadbdc0283 Author: Michael Stahl <mst...@redhat.com> Date: Mon Jul 20 13:00:22 2015 +0200 editeng: replace boost::ptr_map with std::map<std::unique_ptr>> Change-Id: Ia6fce8eceb364d83cbbf5abcf734be262614e792 diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx index c0f8bed..2656e44 100644 --- a/editeng/source/rtf/svxrtf.cxx +++ b/editeng/source/rtf/svxrtf.cxx @@ -114,7 +114,7 @@ SvParserState SvxRTFParser::CallParser() if( !aColorTbl.empty() ) ClearColorTbl(); - if( !aFontTbl.empty() ) + if (!m_FontTable.empty()) ClearFontTbl(); if (!m_StyleTable.empty()) ClearStyleTbl(); @@ -159,7 +159,7 @@ void SvxRTFParser::NextToken( int nToken ) case RTF_DEFF: if( bNewDoc ) { - if( !aFontTbl.empty() ) + if (!m_FontTable.empty()) // Can immediately be set SetDefault( nToken, nTokenValue ); else @@ -442,7 +442,7 @@ void SvxRTFParser::ReadFontTable() { int nToken = 0; int _nOpenBrakets = 1; // the first was already detected earlier!! - vcl::Font* pFont = new vcl::Font(); + std::unique_ptr<vcl::Font> pFont(new vcl::Font); short nFontNo(0), nInsFontNo (0); OUString sAltNm, sFntNm; bool bIsAltFntNm = false; @@ -558,15 +558,15 @@ void SvxRTFParser::ReadFontTable() sFntNm = sFntNm + ";" + sAltNm; pFont->SetName( sFntNm ); - aFontTbl.insert( nInsFontNo, pFont ); - pFont = new vcl::Font(); + m_FontTable.insert(std::make_pair(nInsFontNo, std::move(pFont))); + pFont.reset(new vcl::Font); pFont->SetCharSet( nSystemChar ); sAltNm.clear(); sFntNm.clear(); } } // the last one we have to delete manually - delete pFont; + pFont.reset(); SkipToken( -1 ); // the closing brace is evaluated "above" // set the default font in the Document @@ -760,7 +760,7 @@ void SvxRTFParser::ClearColorTbl() void SvxRTFParser::ClearFontTbl() { - aFontTbl.clear(); + m_FontTable.clear(); } void SvxRTFParser::ClearStyleTbl() @@ -793,19 +793,16 @@ OUString& SvxRTFParser::DelCharAtEnd( OUString& rStr, const sal_Unicode cDel ) const vcl::Font& SvxRTFParser::GetFont( sal_uInt16 nId ) { - SvxRTFFontTbl::const_iterator it = aFontTbl.find( nId ); - const vcl::Font* pFont; - if( it == aFontTbl.end() ) + SvxRTFFontTbl::const_iterator it = m_FontTable.find( nId ); + if (it != m_FontTable.end()) { - const SvxFontItem& rDfltFont = static_cast<const SvxFontItem&>( - pAttrPool->GetDefaultItem( aPlainMap.nFont )); - pDfltFont->SetName( rDfltFont.GetStyleName() ); - pDfltFont->SetFamily( rDfltFont.GetFamily() ); - pFont = pDfltFont; + return *it->second; } - else - pFont = it->second; - return *pFont; + const SvxFontItem& rDfltFont = static_cast<const SvxFontItem&>( + pAttrPool->GetDefaultItem( aPlainMap.nFont )); + pDfltFont->SetName( rDfltFont.GetStyleName() ); + pDfltFont->SetFamily( rDfltFont.GetFamily() ); + return *pDfltFont; } SvxRTFItemStackType* SvxRTFParser::_GetAttrSet( bool const bCopyAttr ) diff --git a/include/editeng/svxrtf.hxx b/include/editeng/svxrtf.hxx index f96eea6..c4b1ef7 100644 --- a/include/editeng/svxrtf.hxx +++ b/include/editeng/svxrtf.hxx @@ -31,7 +31,6 @@ #include <map> #include <utility> #include <memory> -#include <boost/ptr_container/ptr_map.hpp> #include <boost/ptr_container/ptr_vector.hpp> namespace vcl { class Font; } @@ -79,7 +78,7 @@ public: typedef std::deque< Color* > SvxRTFColorTbl; -typedef boost::ptr_map<short, vcl::Font> SvxRTFFontTbl; +typedef std::map<short, std::unique_ptr<vcl::Font>> SvxRTFFontTbl; typedef std::map<sal_uInt16, std::unique_ptr<SvxRTFStyleType>> SvxRTFStyleTbl; // SvxRTFItemStack can't be "std::stack< SvxRTFItemStackType* >" type, because @@ -170,15 +169,11 @@ struct RTFPardAttrMapIds }; - - - - class EDITENG_DLLPUBLIC SvxRTFParser : public SvRTFParser { SvStream &rStrm; SvxRTFColorTbl aColorTbl; - SvxRTFFontTbl aFontTbl; + SvxRTFFontTbl m_FontTable; SvxRTFStyleTbl m_StyleTable; SvxRTFItemStack aAttrStack; SvxRTFItemStackList aAttrSetList; @@ -389,7 +384,6 @@ inline SfxItemSet& SvxRTFParser::GetAttrSet() } -#endif - // INCLUDED_EDITENG_SVXRTF_HXX +#endif // INCLUDED_EDITENG_SVXRTF_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 144d82434ddbb77bb3cd722bc7b636a612bb9db7 Author: Michael Stahl <mst...@redhat.com> Date: Mon Jul 20 12:54:57 2015 +0200 editeng: replace boost::ptr_map with std::map<std::unique_ptr>> Change-Id: Id59fb4ee59872e60094bde85746416c83f058b00 diff --git a/editeng/source/editeng/eertfpar.cxx b/editeng/source/editeng/eertfpar.cxx index 2c7e970..ebda620 100644 --- a/editeng/source/editeng/eertfpar.cxx +++ b/editeng/source/editeng/eertfpar.cxx @@ -368,7 +368,7 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet ) DBG_ASSERT( it != GetStyleTbl().end(), "Template not defined in RTF!" ); if ( it != GetStyleTbl().end() ) { - SvxRTFStyleType* pS = it->second; + auto const& pS = it->second; mpEditEngine->SetStyleSheet( EditSelection(aStartPaM, aEndPaM), static_cast<SfxStyleSheet*>(mpEditEngine->GetStyleSheetPool()->Find(pS->sName, SFX_STYLE_FAMILY_ALL))); @@ -433,11 +433,10 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet ) SvxRTFStyleType* EditRTFParser::FindStyleSheet( const OUString& rName ) { SvxRTFStyleTbl& rTable = GetStyleTbl(); - for ( SvxRTFStyleTbl::iterator it = rTable.begin(); it != rTable.end(); ++it ) + for (auto const& iter : rTable) { - SvxRTFStyleType* pS = it->second; - if ( pS->sName == rName ) - return pS; + if (iter.second->sName == rName) + return iter.second.get(); } return NULL; } @@ -456,7 +455,7 @@ SfxStyleSheet* EditRTFParser::CreateStyleSheet( SvxRTFStyleType* pRTFStyle ) SvxRTFStyleTbl::iterator it = GetStyleTbl().find( pRTFStyle->nBasedOn ); if ( it != GetStyleTbl().end()) { - SvxRTFStyleType* pS = it->second; + SvxRTFStyleType *const pS = it->second.get(); if ( pS && ( pS !=pRTFStyle ) ) aParent = pS->sName; } @@ -492,7 +491,7 @@ void EditRTFParser::CreateStyleSheets() { for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it) { - SvxRTFStyleType* pRTFStyle = it->second; + SvxRTFStyleType* pRTFStyle = it->second.get(); CreateStyleSheet( pRTFStyle ); } } diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx index c4a8221..c0f8bed 100644 --- a/editeng/source/rtf/svxrtf.cxx +++ b/editeng/source/rtf/svxrtf.cxx @@ -116,7 +116,7 @@ SvParserState SvxRTFParser::CallParser() ClearColorTbl(); if( !aFontTbl.empty() ) ClearFontTbl(); - if( !aStyleTbl.empty() ) + if (!m_StyleTable.empty()) ClearStyleTbl(); if( !aAttrStack.empty() ) ClearAttrStack(); @@ -300,7 +300,8 @@ void SvxRTFParser::ReadStyleTable() int nToken, bSaveChkStyleAttr = bChkStyleAttr ? 1 : 0; sal_uInt16 nStyleNo = 0; int _nOpenBrakets = 1; // the first was already detected earlier!! - SvxRTFStyleType* pStyle = new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] ); + ::std::unique_ptr<SvxRTFStyleType> pStyle( + new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] )); pStyle->aAttrSet.Put( GetRTFDefaults() ); bIsInReadStyleTab = true; @@ -348,13 +349,13 @@ void SvxRTFParser::ReadStyleTable() { pStyle->sName = DelCharAtEnd( aToken, ';' ); - if( !aStyleTbl.empty() ) + if (!m_StyleTable.empty()) { - aStyleTbl.erase(nStyleNo); + m_StyleTable.erase(nStyleNo); } // All data from the font is available, so off to the table - aStyleTbl.insert( nStyleNo , pStyle); - pStyle = new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] ); + m_StyleTable.insert(std::make_pair(nStyleNo, std::move(pStyle))); + pStyle.reset(new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] )); pStyle->aAttrSet.Put( GetRTFDefaults() ); nStyleNo = 0; } @@ -386,7 +387,7 @@ void SvxRTFParser::ReadStyleTable() break; } } - delete pStyle; // Delete the Last Style + pStyle.reset(); // Delete the Last Style SkipToken( -1 ); // the closing brace is evaluated "above" // Flag back to old state @@ -764,7 +765,7 @@ void SvxRTFParser::ClearFontTbl() void SvxRTFParser::ClearStyleTbl() { - aStyleTbl.clear(); + m_StyleTable.clear(); } void SvxRTFParser::ClearAttrStack() @@ -835,7 +836,7 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType& rStkType ) if( !IsChkStyleAttr() || !rStkType.GetAttrSet().Count() || - aStyleTbl.count( rStkType.nStyleNo ) == 0 ) + m_StyleTable.count( rStkType.nStyleNo ) == 0 ) { for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich = aIter.NextWhich() ) { @@ -849,7 +850,7 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType& rStkType ) { // Delete all Attributes, which are already defined in the Style, // from the current AttrSet. - SvxRTFStyleType* pStyle = aStyleTbl.find( rStkType.nStyleNo )->second; + auto const& pStyle = m_StyleTable.find(rStkType.nStyleNo)->second; SfxItemSet &rStyleSet = pStyle->aAttrSet; const SfxPoolItem* pSItem; for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich = aIter.NextWhich() ) diff --git a/include/editeng/svxrtf.hxx b/include/editeng/svxrtf.hxx index fe93c33..f96eea6 100644 --- a/include/editeng/svxrtf.hxx +++ b/include/editeng/svxrtf.hxx @@ -27,8 +27,10 @@ #include <editeng/editengdllapi.h> #include <deque> -#include <utility> #include <vector> +#include <map> +#include <utility> +#include <memory> #include <boost/ptr_container/ptr_map.hpp> #include <boost/ptr_container/ptr_vector.hpp> @@ -78,7 +80,7 @@ public: typedef std::deque< Color* > SvxRTFColorTbl; typedef boost::ptr_map<short, vcl::Font> SvxRTFFontTbl; -typedef boost::ptr_map<sal_uInt16, SvxRTFStyleType> SvxRTFStyleTbl; +typedef std::map<sal_uInt16, std::unique_ptr<SvxRTFStyleType>> SvxRTFStyleTbl; // SvxRTFItemStack can't be "std::stack< SvxRTFItemStackType* >" type, because // the methods are using operator[] in sw/source/filter/rtf/rtftbl.cxx file @@ -177,7 +179,7 @@ class EDITENG_DLLPUBLIC SvxRTFParser : public SvRTFParser SvStream &rStrm; SvxRTFColorTbl aColorTbl; SvxRTFFontTbl aFontTbl; - SvxRTFStyleTbl aStyleTbl; + SvxRTFStyleTbl m_StyleTable; SvxRTFItemStack aAttrStack; SvxRTFItemStackList aAttrSetList; @@ -292,7 +294,7 @@ protected: // Query/Set the current insert position void SetInsPos( const SvxPosition& rNew ); - SvxRTFStyleTbl& GetStyleTbl() { return aStyleTbl; } + SvxRTFStyleTbl& GetStyleTbl() { return m_StyleTable; } public: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits