diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-06-27 15:02:15 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-06-27 18:39:33 +0200 |
commit | 40e5ad1179ab97577dd4305c36820f8b6a23d17d (patch) | |
tree | 29c520a968389d112185f68f5de1713d016e8549 /sdext | |
parent | 1e533f69f0c3a9a2136ea5d46b884145703ad637 (diff) |
Break HashedStyle::RefCount out into new RefCountedHashdStyle
...as that member is only used in m_aIdToStyle, and it was confusing how the
user-provided HashedStyle copy ctor initializes it to zero while the implicitly
defined copy assignment op copies it. (And existence of only one of those
copy functions also triggered -Wdeprecated-copy with GCC trunk towards GCC 9.)
Change-Id: I176ef95af8780fefe21e53f61fd66f5e2d9156ab
Reviewed-on: https://gerrit.libreoffice.org/56528
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'sdext')
-rw-r--r-- | sdext/source/pdfimport/tree/style.cxx | 52 | ||||
-rw-r--r-- | sdext/source/pdfimport/tree/style.hxx | 32 |
2 files changed, 39 insertions, 45 deletions
diff --git a/sdext/source/pdfimport/tree/style.cxx b/sdext/source/pdfimport/tree/style.cxx index bceb36003acb..67e188c4b0ce 100644 --- a/sdext/source/pdfimport/tree/style.cxx +++ b/sdext/source/pdfimport/tree/style.cxx @@ -53,22 +53,22 @@ sal_Int32 StyleContainer::impl_getStyleId( const Style& rStyle, bool bSubStyle ) if( it != m_aStyleToId.end() ) { nRet = it->second; - HashedStyle& rFound = m_aIdToStyle[ nRet ]; + RefCountedHashedStyle& rFound = m_aIdToStyle[ nRet ]; // increase refcount on this style rFound.RefCount++; if( ! bSubStyle ) - rFound.IsSubStyle = false; + rFound.style.IsSubStyle = false; } else { nRet = m_nNextId++; // create new style - HashedStyle& rNew = m_aIdToStyle[ nRet ]; - rNew = aSearchStyle; + RefCountedHashedStyle& rNew = m_aIdToStyle[ nRet ]; + rNew.style = aSearchStyle; rNew.RefCount = 1; - rNew.IsSubStyle = bSubStyle; + rNew.style.IsSubStyle = bSubStyle; // fill the style hash to find the id - m_aStyleToId[ rNew ] = nRet; + m_aStyleToId[ rNew.style ] = nRet; } return nRet; } @@ -85,15 +85,15 @@ sal_Int32 StyleContainer::getStandardStyleId( const OString& rName ) const PropertyMap* StyleContainer::getProperties( sal_Int32 nStyleId ) const { - std::unordered_map< sal_Int32, HashedStyle >::const_iterator it = + std::unordered_map< sal_Int32, RefCountedHashedStyle >::const_iterator it = m_aIdToStyle.find( nStyleId ); - return it != m_aIdToStyle.end() ? &(it->second.Properties) : nullptr; + return it != m_aIdToStyle.end() ? &(it->second.style.Properties) : nullptr; } sal_Int32 StyleContainer::setProperties( sal_Int32 nStyleId, const PropertyMap& rNewProps ) { sal_Int32 nRet = -1; - std::unordered_map< sal_Int32, HashedStyle >::iterator it = + std::unordered_map< sal_Int32, RefCountedHashedStyle >::iterator it = m_aIdToStyle.find( nStyleId ); if( it != m_aIdToStyle.end() ) { @@ -101,11 +101,11 @@ sal_Int32 StyleContainer::setProperties( sal_Int32 nStyleId, const PropertyMap& { nRet = it->first; // erase old hash to id mapping - m_aStyleToId.erase( it->second ); + m_aStyleToId.erase( it->second.style ); // change properties - it->second.Properties = rNewProps; + it->second.style.Properties = rNewProps; // fill in new hash to id mapping - m_aStyleToId[ it->second ] = nRet; + m_aStyleToId[ it->second.style ] = nRet; } else { @@ -113,12 +113,12 @@ sal_Int32 StyleContainer::setProperties( sal_Int32 nStyleId, const PropertyMap& it->second.RefCount--; // acquire new HashedStyle HashedStyle aSearchStyle; - aSearchStyle.Name = it->second.Name; + aSearchStyle.Name = it->second.style.Name; aSearchStyle.Properties = rNewProps; - aSearchStyle.Contents = it->second.Contents; - aSearchStyle.ContainedElement = it->second.ContainedElement; - aSearchStyle.SubStyles = it->second.SubStyles; - aSearchStyle.IsSubStyle = it->second.IsSubStyle; + aSearchStyle.Contents = it->second.style.Contents; + aSearchStyle.ContainedElement = it->second.style.ContainedElement; + aSearchStyle.SubStyles = it->second.style.SubStyles; + aSearchStyle.IsSubStyle = it->second.style.IsSubStyle; // find out whether this new style already exists std::unordered_map< HashedStyle, sal_Int32, StyleHash >::iterator new_it = @@ -132,8 +132,8 @@ sal_Int32 StyleContainer::setProperties( sal_Int32 nStyleId, const PropertyMap& { nRet = m_nNextId++; // create new style with new id - HashedStyle& rNew = m_aIdToStyle[ nRet ]; - rNew = aSearchStyle; + RefCountedHashedStyle& rNew = m_aIdToStyle[ nRet ]; + rNew.style = aSearchStyle; rNew.RefCount = 1; // fill style to id hash m_aStyleToId[ aSearchStyle ] = nRet; @@ -147,11 +147,11 @@ OUString StyleContainer::getStyleName( sal_Int32 nStyle ) const { OUStringBuffer aRet( 64 ); - std::unordered_map< sal_Int32, HashedStyle >::const_iterator style_it = + std::unordered_map< sal_Int32, RefCountedHashedStyle >::const_iterator style_it = m_aIdToStyle.find( nStyle ); if( style_it != m_aIdToStyle.end() ) { - const HashedStyle& rStyle = style_it->second; + const HashedStyle& rStyle = style_it->second.style; PropertyMap::const_iterator name_it = rStyle.Properties.find( "style:name" ); if( name_it != rStyle.Properties.end() ) @@ -184,10 +184,10 @@ void StyleContainer::impl_emitStyle( sal_Int32 nStyleId, EmitContext& rContext, ElementTreeVisitor& rContainedElemVisitor ) { - std::unordered_map< sal_Int32, HashedStyle >::const_iterator it = m_aIdToStyle.find( nStyleId ); + std::unordered_map< sal_Int32, RefCountedHashedStyle >::const_iterator it = m_aIdToStyle.find( nStyleId ); if( it != m_aIdToStyle.end() ) { - const HashedStyle& rStyle = it->second; + const HashedStyle& rStyle = it->second.style; PropertyMap aProps( rStyle.Properties ); if( !rStyle.IsSubStyle ) aProps[ "style:name" ] = getStyleName( nStyleId ); @@ -210,12 +210,12 @@ void StyleContainer::emit( EmitContext& rContext, ElementTreeVisitor& rContainedElemVisitor ) { std::vector< sal_Int32 > aMasterPageSection, aAutomaticStyleSection, aOfficeStyleSection; - for( std::unordered_map< sal_Int32, HashedStyle >::iterator it = m_aIdToStyle.begin(); + for( std::unordered_map< sal_Int32, RefCountedHashedStyle >::iterator it = m_aIdToStyle.begin(); it != m_aIdToStyle.end(); ++it ) { - if( ! it->second.IsSubStyle ) + if( ! it->second.style.IsSubStyle ) { - if( it->second.Name == "style:master-page" ) + if( it->second.style.Name == "style:master-page" ) aMasterPageSection.push_back( it->first ); else if( getStyleName( it->first ) == "standard" ) aOfficeStyleSection.push_back( it->first ); diff --git a/sdext/source/pdfimport/tree/style.hxx b/sdext/source/pdfimport/tree/style.hxx index 043529988276..9dd360ea9965 100644 --- a/sdext/source/pdfimport/tree/style.hxx +++ b/sdext/source/pdfimport/tree/style.hxx @@ -60,19 +60,8 @@ namespace pdfi std::vector<sal_Int32> SubStyles; bool IsSubStyle; - sal_Int32 RefCount; - - HashedStyle() : ContainedElement( nullptr ), IsSubStyle( true ), RefCount( 0 ) {} - - HashedStyle( const HashedStyle& rRight ) : - Name( rRight.Name ), - Properties( rRight.Properties ), - Contents( rRight.Contents ), - ContainedElement( rRight.ContainedElement ), - SubStyles( rRight.SubStyles ), - IsSubStyle( rRight.IsSubStyle ), - RefCount( 0 ) - {} + + HashedStyle() : ContainedElement( nullptr ), IsSubStyle( true ) {} size_t hashCode() const { @@ -108,6 +97,11 @@ namespace pdfi } }; + struct RefCountedHashedStyle { + HashedStyle style; + sal_Int32 RefCount = 0; + }; + struct StyleHash; friend struct StyleHash; struct StyleHash @@ -122,28 +116,28 @@ namespace pdfi friend struct StyleIdNameSort; struct StyleIdNameSort { - const std::unordered_map< sal_Int32, HashedStyle >* m_pMap; + const std::unordered_map< sal_Int32, RefCountedHashedStyle >* m_pMap; - explicit StyleIdNameSort( const std::unordered_map< sal_Int32, HashedStyle >* pMap ) : + explicit StyleIdNameSort( const std::unordered_map< sal_Int32, RefCountedHashedStyle >* pMap ) : m_pMap(pMap) {} bool operator()( sal_Int32 nLeft, sal_Int32 nRight ) { - const std::unordered_map< sal_Int32, HashedStyle >::const_iterator left_it = + const std::unordered_map< sal_Int32, RefCountedHashedStyle >::const_iterator left_it = m_pMap->find( nLeft ); - const std::unordered_map< sal_Int32, HashedStyle >::const_iterator right_it = + const std::unordered_map< sal_Int32, RefCountedHashedStyle >::const_iterator right_it = m_pMap->find( nRight ); if( left_it == m_pMap->end() ) return false; else if( right_it == m_pMap->end() ) return true; else - return left_it->second.Name < right_it->second.Name; + return left_it->second.style.Name < right_it->second.style.Name; } }; sal_Int32 m_nNextId; - std::unordered_map< sal_Int32, HashedStyle > m_aIdToStyle; + std::unordered_map< sal_Int32, RefCountedHashedStyle > m_aIdToStyle; std::unordered_map< HashedStyle, sal_Int32, StyleHash > m_aStyleToId; void impl_emitStyle( sal_Int32 nStyleId, |