summaryrefslogtreecommitdiffstats
path: root/sdext
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2018-06-27 15:02:15 +0200
committerStephan Bergmann <sbergman@redhat.com>2018-06-27 18:39:33 +0200
commit40e5ad1179ab97577dd4305c36820f8b6a23d17d (patch)
tree29c520a968389d112185f68f5de1713d016e8549 /sdext
parenttdf#102960 vcl opengl: fix missing support for polygon track frames (diff)
downloadcore-40e5ad1179ab97577dd4305c36820f8b6a23d17d.tar.gz
core-40e5ad1179ab97577dd4305c36820f8b6a23d17d.zip
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.cxx52
-rw-r--r--sdext/source/pdfimport/tree/style.hxx32
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,