summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorJulien Nabet <serval2412@yahoo.fr>2017-08-24 23:27:57 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-09-02 08:04:15 +0200
commit9245ce93b0c9a55bd84e8b448919db2d706e9b06 (patch)
tree9e350b05db5025e1d3e021a99a2d338c724627f1 /package
parenttdf#109052: Crash after PPT import when undo is disabled (diff)
downloadcore-9245ce93b0c9a55bd84e8b448919db2d706e9b06.tar.gz
core-9245ce93b0c9a55bd84e8b448919db2d706e9b06.zip
Replace some lists by vectors in xstorage (part2)
Change-Id: Icb10605f9ac75aa5b00668a5088be8ef6e1414da Reviewed-on: https://gerrit.libreoffice.org/41543 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'package')
-rw-r--r--package/source/xstor/xstorage.cxx100
-rw-r--r--package/source/xstor/xstorage.hxx8
2 files changed, 51 insertions, 57 deletions
diff --git a/package/source/xstor/xstorage.cxx b/package/source/xstor/xstorage.cxx
index 38b501f0a3e9..2edbfcbc1873 100644
--- a/package/source/xstor/xstorage.cxx
+++ b/package/source/xstor/xstorage.cxx
@@ -321,11 +321,11 @@ OStorage_Impl::~OStorage_Impl()
m_pParent = nullptr;
}
- std::for_each(m_aChildrenList.begin(), m_aChildrenList.end(), std::default_delete<SotElement_Impl>());
- m_aChildrenList.clear();
+ std::for_each(m_aChildrenVector.begin(), m_aChildrenVector.end(), std::default_delete<SotElement_Impl>());
+ m_aChildrenVector.clear();
- std::for_each(m_aDeletedList.begin(), m_aDeletedList.end(), std::default_delete<SotElement_Impl>());
- m_aDeletedList.clear();
+ std::for_each(m_aDeletedVector.begin(), m_aDeletedVector.end(), std::default_delete<SotElement_Impl>());
+ m_aDeletedVector.clear();
if ( m_nStorageType == embed::StorageFormats::OFOPXML && m_pRelStorElement )
{
@@ -482,12 +482,12 @@ void OStorage_Impl::OpenOwnPackage()
throw embed::InvalidStorageException( THROW_WHERE );
}
-SotElementList_Impl& OStorage_Impl::GetChildrenList()
+SotElementVector_Impl& OStorage_Impl::GetChildrenVector()
{
::osl::MutexGuard aGuard( m_xMutex->GetMutex() );
ReadContents();
- return m_aChildrenList;
+ return m_aChildrenVector;
}
void OStorage_Impl::GetStorageProperties()
@@ -609,7 +609,7 @@ void OStorage_Impl::ReadContents()
pNewElement->m_bIsRemoved = true;
}
- m_aChildrenList.push_back( pNewElement );
+ m_aChildrenVector.push_back( pNewElement );
}
}
catch( const container::NoSuchElementException& rNoSuchElementException )
@@ -649,8 +649,8 @@ void OStorage_Impl::CopyToStorage( const uno::Reference< embed::XStorage >& xDes
if ( !m_xPackageFolder.is() )
throw embed::InvalidStorageException( THROW_WHERE );
- for ( SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
if ( !(*pElementIter)->m_bIsRemoved )
CopyStorageElement( *pElementIter, xDest, (*pElementIter)->m_aName, bDirect );
@@ -1003,8 +1003,8 @@ void OStorage_Impl::Commit()
xNewPackageFolder = m_xPackageFolder;
// remove replaced removed elements
- for ( SotElementList_Impl::iterator pDeletedIter = m_aDeletedList.begin();
- pDeletedIter != m_aDeletedList.end();
+ for ( SotElementVector_Impl::iterator pDeletedIter = m_aDeletedVector.begin();
+ pDeletedIter != m_aDeletedVector.end();
++pDeletedIter )
{
@@ -1017,11 +1017,11 @@ void OStorage_Impl::Commit()
delete *pDeletedIter;
*pDeletedIter = nullptr;
}
- m_aDeletedList.clear();
+ m_aDeletedVector.clear();
// remove removed elements
- SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- while ( pElementIter != m_aChildrenList.end() )
+ SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ while ( pElementIter != m_aChildrenVector.end() )
{
// renamed and inserted elements must be really inserted to package later
// since thay can conflict with removed elements
@@ -1035,19 +1035,15 @@ void OStorage_Impl::Commit()
if ( m_bCommited || m_bIsRoot )
xNewPackageFolder->removeByName( (*pElementIter)->m_aOriginalName );
- SotElement_Impl* pToDelete = *pElementIter;
-
- ++pElementIter; // to let the iterator be valid it should be increased before removing
-
- m_aChildrenList.remove( pToDelete );
- delete pToDelete;
+ delete *pElementIter;
+ pElementIter = m_aChildrenVector.erase(pElementIter);
}
else
++pElementIter;
}
// there should be no more deleted elements
- for ( pElementIter = m_aChildrenList.begin(); pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( pElementIter = m_aChildrenVector.begin(); pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
// if it is a 'duplicate commit' inserted elements must be really inserted to package later
// since thay can conflict with renamed elements
@@ -1120,7 +1116,7 @@ void OStorage_Impl::Commit()
}
}
- for ( pElementIter = m_aChildrenList.begin(); pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( pElementIter = m_aChildrenVector.begin(); pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
// now inserted elements can be inserted to the package
if ( (*pElementIter)->m_bIsInserted )
@@ -1215,17 +1211,13 @@ void OStorage_Impl::Revert()
// all the children must be removed
// they will be created later on demand
- SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- while ( pElementIter != m_aChildrenList.end() )
+ SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ while ( pElementIter != m_aChildrenVector.end() )
{
if ( (*pElementIter)->m_bIsInserted )
{
- SotElement_Impl* pToDelete = *pElementIter;
-
- ++pElementIter; // to let the iterator be valid it should be increased before removing
-
- m_aChildrenList.remove( pToDelete );
- delete pToDelete;
+ delete *pElementIter;
+ pElementIter = m_aChildrenVector.erase(pElementIter);
}
else
{
@@ -1239,18 +1231,18 @@ void OStorage_Impl::Revert()
}
// return replaced removed elements
- for ( SotElementList_Impl::iterator pDeletedIter = m_aDeletedList.begin();
- pDeletedIter != m_aDeletedList.end();
+ for ( SotElementVector_Impl::iterator pDeletedIter = m_aDeletedVector.begin();
+ pDeletedIter != m_aDeletedVector.end();
++pDeletedIter )
{
- m_aChildrenList.push_back( *pDeletedIter );
+ m_aChildrenVector.push_back( *pDeletedIter );
ClearElement( *pDeletedIter );
(*pDeletedIter)->m_aName = (*pDeletedIter)->m_aOriginalName;
(*pDeletedIter)->m_bIsRemoved = false;
}
- m_aDeletedList.clear();
+ m_aDeletedVector.clear();
m_bControlMediaType = false;
m_bControlVersion = false;
@@ -1297,8 +1289,8 @@ SotElement_Impl* OStorage_Impl::FindElement( const OUString& rName )
ReadContents();
- for ( SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
if ( (*pElementIter)->m_aName == rName && !(*pElementIter)->m_bIsRemoved )
return *pElementIter;
@@ -1332,7 +1324,7 @@ SotElement_Impl* OStorage_Impl::InsertStream( const OUString& aName, bool bEncr
SotElement_Impl* pNewElement = InsertElement( aName, false );
pNewElement->m_xStream.reset(new OWriteStream_Impl(this, xPackageSubStream, m_xPackage, m_xContext, bEncr, m_nStorageType, true));
- m_aChildrenList.push_back( pNewElement );
+ m_aChildrenVector.push_back( pNewElement );
m_bIsModified = true;
m_bBroadcastModified = true;
@@ -1371,7 +1363,7 @@ void OStorage_Impl::InsertRawStream( const OUString& aName, const uno::Reference
// the stream is inserted and must be treated as a committed one
pNewElement->m_xStream->SetToBeCommited();
- m_aChildrenList.push_back( pNewElement );
+ m_aChildrenVector.push_back( pNewElement );
m_bIsModified = true;
m_bBroadcastModified = true;
}
@@ -1405,7 +1397,7 @@ SotElement_Impl* OStorage_Impl::InsertStorage( const OUString& aName, sal_Int32
pNewElement->m_xStorage.reset(CreateNewStorageImpl(nStorageMode));
- m_aChildrenList.push_back( pNewElement );
+ m_aChildrenVector.push_back( pNewElement );
return pNewElement;
}
@@ -1418,8 +1410,8 @@ SotElement_Impl* OStorage_Impl::InsertElement( const OUString& aName, bool bIsSt
SotElement_Impl* pDeletedElm = nullptr;
- for ( SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
if ( (*pElementIter)->m_aName == aName )
{
@@ -1440,8 +1432,10 @@ SotElement_Impl* OStorage_Impl::InsertElement( const OUString& aName, bool bIsSt
else
OpenSubStream( pDeletedElm );
- m_aChildrenList.remove( pDeletedElm ); // correct usage of list ???
- m_aDeletedList.push_back( pDeletedElm );
+ m_aChildrenVector.erase(
+ std::remove(m_aChildrenVector.begin(), m_aChildrenVector.end(), pDeletedElm),
+ m_aChildrenVector.end());
+ m_aDeletedVector.push_back( pDeletedElm );
}
// create new element
@@ -1498,12 +1492,12 @@ uno::Sequence< OUString > OStorage_Impl::GetElementNames()
ReadContents();
- sal_uInt32 nSize = m_aChildrenList.size();
+ sal_uInt32 nSize = m_aChildrenVector.size();
uno::Sequence< OUString > aElementNames( nSize );
sal_uInt32 nInd = 0;
- for ( SotElementList_Impl::iterator pElementIter = m_aChildrenList.begin();
- pElementIter != m_aChildrenList.end(); ++pElementIter )
+ for ( SotElementVector_Impl::iterator pElementIter = m_aChildrenVector.begin();
+ pElementIter != m_aChildrenVector.end(); ++pElementIter )
{
if ( !(*pElementIter)->m_bIsRemoved )
aElementNames[nInd++] = (*pElementIter)->m_aName;
@@ -1526,8 +1520,8 @@ void OStorage_Impl::RemoveElement( SotElement_Impl* pElement )
if ( pElement->m_bIsInserted )
{
- m_aChildrenList.remove( pElement );
- delete pElement; // ???
+ delete pElement;
+ m_aChildrenVector.erase(std::remove(m_aChildrenVector.begin(), m_aChildrenVector.end(), pElement), m_aChildrenVector.end());
}
else
{
@@ -2406,8 +2400,8 @@ uno::Reference< embed::XStorage > SAL_CALL OStorage::openStorageElement(
if ( nStorageMode & embed::ElementModes::TRUNCATE )
{
- for ( SotElementList_Impl::iterator pElementIter = pElement->m_xStorage->m_aChildrenList.begin();
- pElementIter != pElement->m_xStorage->m_aChildrenList.end(); )
+ for ( SotElementVector_Impl::iterator pElementIter = pElement->m_xStorage->m_aChildrenVector.begin();
+ pElementIter != pElement->m_xStorage->m_aChildrenVector.end(); )
{
SotElement_Impl* pElementToDel = (*pElementIter);
++pElementIter;
@@ -3631,8 +3625,8 @@ void SAL_CALL OStorage::revert()
throw lang::DisposedException( THROW_WHERE );
}
- for ( SotElementList_Impl::iterator pElementIter = m_pImpl->m_aChildrenList.begin();
- pElementIter != m_pImpl->m_aChildrenList.end(); ++pElementIter )
+ for ( SotElementVector_Impl::iterator pElementIter = m_pImpl->m_aChildrenVector.begin();
+ pElementIter != m_pImpl->m_aChildrenVector.end(); ++pElementIter )
{
if ( ((*pElementIter)->m_xStorage
&& ( (*pElementIter)->m_xStorage->m_pAntiImpl || !(*pElementIter)->m_xStorage->m_aReadOnlyWrapVector.empty() ))
@@ -3936,7 +3930,7 @@ sal_Bool SAL_CALL OStorage::hasElements()
try
{
- return ( m_pImpl->GetChildrenList().size() != 0 );
+ return ( m_pImpl->GetChildrenVector().size() != 0 );
}
catch( const uno::RuntimeException& rRuntimeException )
{
diff --git a/package/source/xstor/xstorage.hxx b/package/source/xstor/xstorage.hxx
index 6acd1e3957f4..1b7532fd34ee 100644
--- a/package/source/xstor/xstorage.hxx
+++ b/package/source/xstor/xstorage.hxx
@@ -92,7 +92,7 @@ public:
SotElement_Impl(const OUString& rName, bool bStor, bool bNew);
};
-typedef ::std::list< SotElement_Impl* > SotElementList_Impl;
+typedef ::std::vector< SotElement_Impl* > SotElementVector_Impl;
// Main storage implementation
@@ -138,8 +138,8 @@ struct OStorage_Impl
return m_nModifiedListenerCount > 0 && m_pAntiImpl != nullptr;
}
- SotElementList_Impl m_aChildrenList;
- SotElementList_Impl m_aDeletedList;
+ SotElementVector_Impl m_aChildrenVector;
+ SotElementVector_Impl m_aDeletedVector;
css::uno::Reference< css::container::XNameContainer > m_xPackageFolder;
@@ -204,7 +204,7 @@ struct OStorage_Impl
void ReadContents();
void ReadRelInfoIfNecessary();
- SotElementList_Impl& GetChildrenList();
+ SotElementVector_Impl& GetChildrenVector();
void GetStorageProperties();
css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > GetAllRelationshipsIfAny();