summaryrefslogtreecommitdiff
path: root/l10ntools/inc
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-03-18 18:34:39 +0100
committerAndras Timar <andras.timar@collabora.com>2019-12-31 16:29:11 +0100
commitd45cb911dd3853bc5f590d12265706aeaa9f0080 (patch)
tree989f862fa090d8632a530bb2e646a37d963a83bb /l10ntools/inc
parent52a1cadbdf82ddc7a8ef550627e59d5f8f15c195 (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. Reviewed-on: https://gerrit.libreoffice.org/69395 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com> (cherry picked from commit dc2329fb66dc38f62a21b1afaca38529d7e40fa9) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85866 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Aron Budea <aron.budea@collabora.com> Tested-by: Aron Budea <aron.budea@collabora.com> (cherry picked from commit 0df20a65441cacb58cddfa6e5451691088bfcf8f) Change-Id: I771548a6155e14037d84acfd74cd13566a26a8d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85962 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'l10ntools/inc')
-rw-r--r--l10ntools/inc/export.hxx74
1 files changed, 2 insertions, 72 deletions
diff --git a/l10ntools/inc/export.hxx b/l10ntools/inc/export.hxx
index 0ed0f45c5175..ced715071f2e 100644
--- a/l10ntools/inc/export.hxx
+++ b/l10ntools/inc/export.hxx
@@ -130,76 +130,6 @@ public:
};
-
-// class MergeDataHashMap
-
-
-class MergeData;
-
-/** Container for MergeData
-
- This class is an HashMap with a hidden insertion
- order. The class can used just like a simple
- HashMap, but good to know that it's use is
- more effective if the accessing(find) order
- match with the insertion order.
-
- In the most case, this match is good.
- (e.g. reading PO files of different languages,
- executables merging)
-*/
-class MergeDataHashMap
-{
- private:
- typedef std::unordered_map<OString, MergeData*> HashMap_t;
-
- public:
- MergeDataHashMap()
- : bFirstSearch(true)
- , aLastInsertion(m_aHashMap.end())
- , aLastFound(m_aHashMap.end())
- , aFirstInOrder(m_aHashMap.end())
- {
- }
-
- typedef HashMap_t::iterator iterator;
- typedef HashMap_t::const_iterator const_iterator;
-
- std::pair<iterator,bool> insert(const OString& rKey, MergeData* pMergeData);
- iterator const & find(const OString& rKey);
-
- iterator begin() {return m_aHashMap.begin();}
- iterator end() {return m_aHashMap.end();}
-
- private:
- bool bFirstSearch;
- HashMap_t m_aHashMap;
- iterator aLastInsertion;
- iterator aLastFound;
- iterator aFirstInOrder;
-};
-
-
-// class MergeData
-
-
-/// Purpose: holds information of data to merge (one resource)
-class MergeData
-{
- friend class MergeDataHashMap;
-
-public:
- std::unique_ptr<MergeEntrys> pMergeEntrys;
-private:
- MergeDataHashMap::iterator m_aNextData;
-public:
- MergeData();
- ~MergeData();
- MergeEntrys* GetMergeEntries() { return pMergeEntrys.get();}
-
-};
-
-
// class MergeDataFile
@@ -207,10 +137,10 @@ public:
class MergeDataFile
{
private:
- MergeDataHashMap aMap;
+ std::unordered_map<OString, std::unique_ptr<MergeEntrys>> aMap;
std::set<OString> aLanguageSet;
- MergeData *GetMergeData( ResData *pResData , bool bCaseSensitive = false );
+ MergeEntrys *GetMergeData( ResData *pResData , bool bCaseSensitive = false );
void InsertEntry(const OString &rTYP, const OString &rGID,
const OString &rLID, const OString &nLang,
const OString &rTEXT, const OString &rQHTEXT,