Kaydet (Commit) 4d666f50 authored tarafından Xisco Fauli's avatar Xisco Fauli Kaydeden (comit) Noel Grandin

tdf#89329: use shared_ptr for pImpl in slstitm

Change-Id: Icb9167f8e7612f40992e7146c0dce539c0b0eac7
Reviewed-on: https://gerrit.libreoffice.org/25632Reviewed-by: 's avatarNoel Grandin <noelgrandin@gmail.com>
Tested-by: 's avatarNoel Grandin <noelgrandin@gmail.com>
üst 71cf1aef
......@@ -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();
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment