summaryrefslogtreecommitdiff
path: root/l10ntools/source/merge.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-03-18 18:34:39 +0100
committerStephan Bergmann <sbergman@redhat.com>2019-03-18 21:24:23 +0100
commitdc2329fb66dc38f62a21b1afaca38529d7e40fa9 (patch)
tree9d70445837e07574bfc0998fe7df3c86b1e6ca54 /l10ntools/source/merge.cxx
parent8925bd2efca8dd07a3ac044ecbc6505bb7bfa0a6 (diff)
Remove broken MergeDataHashMap optimization
...which apparently didn't take into account that inserting into a std::unordered_map may invalidate iterators, which now started to cause build failures like > [PRP] dictionaries/hu_HU/dialog/hu_HU_de > warn:sal.osl:25175:25175:sal/osl/unx/thread.cxx:1026: RTL_TEXTENCODING_DONTKNOW -> _ASCII_US > .../gcc/trunk/inst/include/c++/9.0.1/debug/safe_iterator.h:307: > In function: > __gnu_debug::_Safe_iterator<_Iterator, _Sequence, _Category>::pointer > __gnu_debug::_Safe_iterator<_Iterator, _Sequence, > _Category>::operator->() const [with _Iterator = > std::__detail::_Node_iterator<std::pair<const rtl::OString, > std::unique_ptr<MergeData> >, false, true>; _Sequence = > std::__debug::unordered_map<rtl::OString, std::unique_ptr<MergeData> >; > _Category = std::forward_iterator_tag; > __gnu_debug::_Safe_iterator<_Iterator, _Sequence, _Category>::pointer = > std::pair<const rtl::OString, std::unique_ptr<MergeData> >*] > > Error: attempt to dereference a singular iterator. > > Objects involved in the operation: > iterator "this" @ 0x0x5a8228 { > type = std::__detail::_Node_iterator<std::pair<rtl::OString const, std::unique_ptr<MergeData, std::default_delete<MergeData> > >, false, true> (mutable iterator); > state = singular; > references sequence with type 'std::__debug::unordered_map<rtl::OString, std::unique_ptr<MergeData, std::default_delete<MergeData> >, std::hash<rtl::OString>, std::equal_to<rtl::OString>, std::allocator<std::pair<rtl::OString const, std::unique_ptr<MergeData, std::default_delete<MergeData> > > > >' @ 0x0x5a81c8 > } > /bin/sh: line 1: 25175 Aborted (core dumped) LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}"$I/program:$I/program" $W/LinkTarget/Executable/propex -i $S/dictionaries/hu_HU/dialog/hu_HU_en_US.properties -l de -m ${MERGEINPUT} -o $W/PropertiesTranslateTarget/dictionaries/hu_HU/dialog/hu_HU_de.properties > make[1]: *** [.../solenv/gbuild/Dictionary.mk:88: .../workdir/PropertiesTranslateTarget/dictionaries/hu_HU/dialog/hu_HU_de.properties] Error 134 with trunk libstdc++ in debug mode. Both classes MergeData and MergeDataHashMap became redundant. Change-Id: I771548a6155e14037d84acfd74cd13566a26a8d7 Reviewed-on: https://gerrit.libreoffice.org/69395 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'l10ntools/source/merge.cxx')
-rw-r--r--l10ntools/source/merge.cxx95
1 files changed, 10 insertions, 85 deletions
diff --git a/l10ntools/source/merge.cxx b/l10ntools/source/merge.cxx
index eeef73a6dc5b..aff23bafdd07 100644
--- a/l10ntools/source/merge.cxx
+++ b/l10ntools/source/merge.cxx
@@ -108,74 +108,6 @@ OString MergeEntrys::GetQTZText(const ResData& rResData, const OString& rOrigTex
return sKey + GetDoubleBars() + rOrigText;
}
-
-// class MergeDataHashMap
-
-
-std::pair<MergeDataHashMap::iterator,bool> MergeDataHashMap::insert(const OString& rKey, std::unique_ptr<MergeData> pMergeData)
-{
- std::pair<iterator,bool> aTemp = m_aHashMap.emplace( rKey, std::move(pMergeData) );
- if( m_aHashMap.size() == 1 )
- {
- // When first insert, set an iterator to the first element
- aFirstInOrder = aTemp.first;
- }
- else
- {
- // Define insertion order by setting an iterator to the next element.
- aLastInsertion->second->m_aNextData = aTemp.first;
- }
- aLastInsertion = aTemp.first;
- return aTemp;
-}
-
-MergeDataHashMap::iterator const & MergeDataHashMap::find(const OString& rKey)
-{
- iterator aHint = m_aHashMap.end();
-
- // Add a hint
- if( bFirstSearch && !m_aHashMap.empty() )
- {
- aHint = aFirstInOrder;
- }
- else if( aLastFound == aLastInsertion )
- {
- // Next to the last element is the first element
- aHint = aFirstInOrder;
- }
- else if( aLastFound != m_aHashMap.end() && aLastFound != aLastInsertion )
- {
- aHint = aLastFound->second->m_aNextData;
- }
-
- // If hint works than no need for search
- if( aHint != m_aHashMap.end() && aHint->first == rKey )
- {
- aLastFound = aHint;
- }
- else
- {
- aLastFound = m_aHashMap.find(rKey);
- }
-
- bFirstSearch = false;
- return aLastFound;
-}
-
-
-// class MergeData
-
-
-MergeData::MergeData()
- : pMergeEntrys( new MergeEntrys() )
-{
-}
-
-MergeData::~MergeData()
-{
-}
-
-
// class MergeDataFile
@@ -304,7 +236,7 @@ std::vector<OString> MergeDataFile::GetLanguages() const
return std::vector<OString>(aLanguageSet.begin(),aLanguageSet.end());
}
-MergeData *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive )
+MergeEntrys *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive )
{
OString sOldG = pResData->sGId;
OString sOldL = pResData->sId;
@@ -319,7 +251,7 @@ MergeData *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive
OString sKey = CreateKey( pResData->sResTyp , pResData->sGId , pResData->sId , pResData->sFilename , bCaseSensitive );
- MergeDataHashMap::const_iterator mit = aMap.find( sKey );
+ auto mit = aMap.find( sKey );
if(mit != aMap.end())
{
pResData->sGId = sOldG;
@@ -334,19 +266,13 @@ MergeData *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive
MergeEntrys *MergeDataFile::GetMergeEntrys( ResData *pResData )
{
// search for requested MergeEntrys
- MergeData *pData = GetMergeData( pResData );
- if ( pData )
- return pData->GetMergeEntries();
- return nullptr;
+ return GetMergeData( pResData );
}
MergeEntrys *MergeDataFile::GetMergeEntrysCaseSensitive( ResData *pResData )
{
// search for requested MergeEntrys
- MergeData *pData = GetMergeData( pResData , true );
- if ( pData )
- return pData->GetMergeEntries();
- return nullptr;
+ return GetMergeData( pResData , true );
}
void MergeDataFile::InsertEntry(
@@ -356,28 +282,27 @@ void MergeDataFile::InsertEntry(
const OString &rTITLE, const OString &rInFilename,
bool bFirstLang, bool bCaseSensitive )
{
- MergeData *pData = nullptr;
+ MergeEntrys *pMergeEntrys = nullptr;
// search for MergeData
OString sKey = CreateKey(rTYP , rGID , rLID , rInFilename , bCaseSensitive);
if( !bFirstLang )
{
- MergeDataHashMap::const_iterator mit = aMap.find( sKey );
+ auto mit = aMap.find( sKey );
if(mit != aMap.end())
- pData = mit->second.get();
+ pMergeEntrys = mit->second.get();
}
- if( !pData )
+ if( !pMergeEntrys )
{
- pData = new MergeData;
- aMap.insert( sKey, std::unique_ptr<MergeData>(pData) );
+ pMergeEntrys = new MergeEntrys;
+ aMap.emplace( sKey, std::unique_ptr<MergeEntrys>(pMergeEntrys) );
}
// insert the cur string
- MergeEntrys *pMergeEntrys = pData->GetMergeEntries();
if( nLANG =="qtz" )
{
const OString sTemp = rInFilename + rGID + rLID + rTYP;