diff options
author | Xisco Fauli <anistenis@gmail.com> | 2016-05-29 21:01:51 +0200 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2016-06-06 07:01:24 +0000 |
commit | 4d666f5092d7c4f2ece9702dda4d874e44cdc6f7 (patch) | |
tree | 86e78c047c1d4b2b58438855d68f27fc7a24b130 | |
parent | 71cf1aefca1ecf10272308d7c75201bd39d3b0f6 (diff) |
tdf#89329: use shared_ptr for pImpl in slstitm
Change-Id: Icb9167f8e7612f40992e7146c0dce539c0b0eac7
Reviewed-on: https://gerrit.libreoffice.org/25632
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
-rw-r--r-- | include/svl/slstitm.hxx | 3 | ||||
-rw-r--r-- | svl/source/items/slstitm.cxx | 100 |
2 files changed, 31 insertions, 72 deletions
diff --git a/include/svl/slstitm.hxx b/include/svl/slstitm.hxx index 51662456e94c..79f4def0dcf6 100644 --- a/include/svl/slstitm.hxx +++ b/include/svl/slstitm.hxx @@ -24,13 +24,14 @@ #include <svl/svldllapi.h> #include <svl/poolitem.hxx> #include <com/sun/star/uno/Sequence.h> +#include <memory> class SfxImpStringList; class SVL_DLLPUBLIC SfxStringListItem : public SfxPoolItem { protected: - SfxImpStringList* pImp; + std::shared_ptr<SfxImpStringList> pImpl; public: static SfxPoolItem* CreateDefault(); diff --git a/svl/source/items/slstitm.cxx b/svl/source/items/slstitm.cxx index ec40ab2b4882..2419a1a25c54 100644 --- a/svl/source/items/slstitm.cxx +++ b/svl/source/items/slstitm.cxx @@ -27,58 +27,53 @@ #include <stringio.hxx> SfxPoolItem* SfxStringListItem::CreateDefault() { return new SfxStringListItem; } + class SfxImpStringList { public: - sal_uInt16 nRefCount; std::vector<OUString> aList; - SfxImpStringList() { nRefCount = 1; } - ~SfxImpStringList(); + SfxImpStringList() {} + ~SfxImpStringList(); }; SfxImpStringList::~SfxImpStringList() { - DBG_ASSERT(nRefCount!=0xffff,"ImpList already deleted"); - nRefCount = 0xffff; } -SfxStringListItem::SfxStringListItem() : - pImp(nullptr) +SfxStringListItem::SfxStringListItem() { } SfxStringListItem::SfxStringListItem( sal_uInt16 which, const std::vector<OUString>* pList ) : - SfxPoolItem( which ), - pImp(nullptr) + SfxPoolItem( which ) { // FIXME: Putting an empty list does not work // Therefore the query after the count is commented out if( pList /*!!! && pList->Count() */ ) { - pImp = new SfxImpStringList; - pImp->aList = *pList; + pImpl.reset(new SfxImpStringList); + pImpl->aList = *pList; } } SfxStringListItem::SfxStringListItem( sal_uInt16 which, SvStream& rStream ) : - SfxPoolItem( which ), - pImp(nullptr) + SfxPoolItem( which ) { sal_Int32 nEntryCount; rStream.ReadInt32( nEntryCount ); if( nEntryCount ) - pImp = new SfxImpStringList; + pImpl.reset(new SfxImpStringList); - if (pImp) + if (pImpl) { for( sal_Int32 i=0; i < nEntryCount; i++ ) { - pImp->aList.push_back( readByteString(rStream) ); + pImpl->aList.push_back( readByteString(rStream) ); } } } @@ -86,35 +81,21 @@ SfxStringListItem::SfxStringListItem( sal_uInt16 which, SvStream& rStream ) : SfxStringListItem::SfxStringListItem( const SfxStringListItem& rItem ) : SfxPoolItem( rItem ), - pImp(rItem.pImp) + pImpl(rItem.pImpl.get()) { - if( pImp ) - { - DBG_ASSERT(pImp->nRefCount!=0xffff,"ImpList not valid"); - pImp->nRefCount++; - } } SfxStringListItem::~SfxStringListItem() { - if( pImp ) - { - DBG_ASSERT(pImp->nRefCount!=0xffff,"ImpList not valid"); - if( pImp->nRefCount > 1 ) - pImp->nRefCount--; - else - delete pImp; - } } std::vector<OUString>& SfxStringListItem::GetList() { - if( !pImp ) - pImp = new SfxImpStringList; - DBG_ASSERT(pImp->nRefCount!=0xffff,"ImpList not valid"); - return pImp->aList; + if( !pImpl ) + pImpl.reset( new SfxImpStringList ); + return pImpl->aList; } const std::vector<OUString>& SfxStringListItem::GetList () const @@ -129,7 +110,7 @@ bool SfxStringListItem::operator==( const SfxPoolItem& rItem ) const const SfxStringListItem& rSSLItem = static_cast<const SfxStringListItem&>(rItem); - return pImp == rSSLItem.pImp; + return pImpl == rSSLItem.pImpl; } @@ -150,13 +131,6 @@ bool SfxStringListItem::GetPresentation SfxPoolItem* SfxStringListItem::Clone( SfxItemPool *) const { return new SfxStringListItem( *this ); - /* - if( pImp ) - return new SfxStringListItem( Which(), &(pImp->aList) ); - else - return new SfxStringListItem( Which(), NULL ); - */ - } @@ -168,19 +142,17 @@ SfxPoolItem* SfxStringListItem::Create( SvStream & rStream, sal_uInt16 ) const SvStream& SfxStringListItem::Store( SvStream & rStream, sal_uInt16 ) const { - if( !pImp ) + if( !pImpl ) { rStream.WriteInt32( 0 ); return rStream; } - DBG_ASSERT(pImp->nRefCount!=0xffff,"ImpList not valid"); - - sal_uInt32 nCount = pImp->aList.size(); + sal_uInt32 nCount = pImpl->aList.size(); rStream.WriteUInt32( nCount ); for( sal_uInt32 i=0; i < nCount; i++ ) - writeByteString(rStream, pImp->aList[i]); + writeByteString(rStream, pImpl->aList[i]); return rStream; } @@ -188,13 +160,7 @@ SvStream& SfxStringListItem::Store( SvStream & rStream, sal_uInt16 ) const void SfxStringListItem::SetString( const OUString& rStr ) { - DBG_ASSERT(GetRefCount()==0,"SetString:RefCount!=0"); - - if ( pImp && (pImp->nRefCount == 1) ) - delete pImp; - else if( pImp ) - pImp->nRefCount--; - pImp = new SfxImpStringList; + pImpl.reset( new SfxImpStringList ); sal_Int32 nStart = 0; OUString aStr(convertLineEnd(rStr, LINEEND_CR)); @@ -206,12 +172,12 @@ void SfxStringListItem::SetString( const OUString& rStr ) if (nStart<aStr.getLength()) { // put last string only if not empty - pImp->aList.push_back(aStr.copy(nStart)); + pImpl->aList.push_back(aStr.copy(nStart)); } break; } - pImp->aList.push_back(aStr.copy(nStart, nDelimPos-nStart)); + pImpl->aList.push_back(aStr.copy(nStart, nDelimPos-nStart)); // skip both inserted string and delimiter nStart = nDelimPos + 1 ; @@ -222,17 +188,15 @@ void SfxStringListItem::SetString( const OUString& rStr ) OUString SfxStringListItem::GetString() { OUString aStr; - if ( pImp ) + if ( pImpl ) { - DBG_ASSERT(pImp->nRefCount!=0xffff,"ImpList not valid"); - - std::vector<OUString>::const_iterator iter = pImp->aList.begin(); + std::vector<OUString>::const_iterator iter = pImpl->aList.begin(); for (;;) { aStr += *iter; ++iter; - if (iter == pImp->aList.end()) + if (iter == pImpl->aList.end()) break; aStr += "\r"; @@ -244,26 +208,20 @@ OUString SfxStringListItem::GetString() void SfxStringListItem::SetStringList( const css::uno::Sequence< OUString >& rList ) { - DBG_ASSERT(GetRefCount()==0,"SetString:RefCount!=0"); - - if ( pImp && (pImp->nRefCount == 1) ) - delete pImp; - else if( pImp ) - pImp->nRefCount--; - pImp = new SfxImpStringList; + pImpl.reset(new SfxImpStringList); // String belongs to the list for ( sal_Int32 n = 0; n < rList.getLength(); n++ ) - pImp->aList.push_back(rList[n]); + pImpl->aList.push_back(rList[n]); } void SfxStringListItem::GetStringList( css::uno::Sequence< OUString >& rList ) const { - long nCount = pImp->aList.size(); + long nCount = pImpl->aList.size(); rList.realloc( nCount ); for( long i=0; i < nCount; i++ ) - rList[i] = pImp->aList[i]; + rList[i] = pImpl->aList[i]; } // virtual |