[Libreoffice-commits] core.git: basctl/source filter/inc include/svx include/xmloff sc/inc sc/source sdext/source vbahelper/source vcl/source vcl/unx xmloff/inc xmloff/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 8 06:52:32 UTC 2019
basctl/source/basicide/bastypes.cxx | 6 +
filter/inc/gfxtypes.hxx | 97 +++++++++++-----------
include/svx/sdasitm.hxx | 5 -
include/xmloff/nmspmap.hxx | 5 -
sc/inc/externalrefmgr.hxx | 9 +-
sc/source/core/data/dpresfilter.cxx | 7 +
sc/source/ui/view/spellcheckcontext.cxx | 9 +-
sdext/source/pdfimport/inc/pdfihelper.hxx | 66 +++++++-------
vbahelper/source/vbahelper/vbaapplicationbase.cxx | 9 +-
vcl/source/font/fontinstance.cxx | 7 -
vcl/unx/generic/glyphs/glyphcache.cxx | 18 ++--
vcl/unx/generic/printer/ppdparser.cxx | 12 +-
xmloff/inc/StyleMap.hxx | 7 +
xmloff/source/core/xmltkmap.cxx | 6 +
xmloff/source/forms/property_meta_data.cxx | 6 +
xmloff/source/transform/TransformerActions.hxx | 7 +
16 files changed, 161 insertions(+), 115 deletions(-)
New commits:
commit 7be675cdfad328667bfbab043d71539dfd9e6fe6
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Sun Apr 7 16:25:49 2019 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Mon Apr 8 08:52:09 2019 +0200
improve combining in hash functions
specifically, use boost::hash_combine to combine values in hash
functions, except for a couple of places where I use the
small-prime-number strategy popular in the Java world, to avoid
including boost in header files that are widely shared.
Change-Id: I0e184c9ec8803bf09fc6e84fe20131b203e1652a
Reviewed-on: https://gerrit.libreoffice.org/70384
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/basctl/source/basicide/bastypes.cxx b/basctl/source/basicide/bastypes.cxx
index 6fe3475c49e8..ffb3e9d87f83 100644
--- a/basctl/source/basicide/bastypes.cxx
+++ b/basctl/source/basicide/bastypes.cxx
@@ -36,6 +36,7 @@
#include <svl/srchdefs.hxx>
#include <vcl/weld.hxx>
#include <tools/stream.hxx>
+#include <boost/functional/hash.hpp>
namespace basctl
{
@@ -693,7 +694,10 @@ bool LibInfo::Key::operator == (Key const& rKey) const
size_t LibInfo::Key::Hash::operator () (Key const& rKey) const
{
- return rKey.m_aDocument.hashCode() + rKey.m_aLibName.hashCode();
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rKey.m_aDocument.hashCode());
+ boost::hash_combine(seed, rKey.m_aLibName.hashCode());
+ return seed;
}
LibInfo::Item::Item (
diff --git a/filter/inc/gfxtypes.hxx b/filter/inc/gfxtypes.hxx
index 365e381c0ab4..af180e2e1d3a 100644
--- a/filter/inc/gfxtypes.hxx
+++ b/filter/inc/gfxtypes.hxx
@@ -16,6 +16,7 @@
#include <functional>
#include <unordered_set>
#include <unordered_map>
+#include <boost/functional/hash.hpp>
namespace svgi
{
@@ -264,53 +265,55 @@ namespace std
using argument_type = svgi::State;
std::size_t operator()(const svgi::State& rState ) const
{
- return std::hash<double>()(rState.maCTM.get( 0, 0 ))
- ^ std::hash<double>()(rState.maCTM.get( 1, 0 ))
- ^ std::hash<double>()(rState.maCTM.get( 0, 1 ))
- ^ std::hash<double>()(rState.maCTM.get( 1, 1 ))
- ^ std::hash<double>()(rState.maCTM.get( 0, 2 ))
- ^ std::hash<double>()(rState.maCTM.get( 1, 2 ))
- ^ std::hash<double>()(rState.maViewport.getWidth())
- ^ std::hash<double>()(rState.maViewport.getHeight())
- ^ std::hash<double>()(rState.maViewBox.getWidth())
- ^ std::hash<double>()(rState.maViewBox.getHeight())
- ^ size_t(rState.mbIsText)
- ^ size_t(rState.maFontFamily.hashCode())
- ^ std::hash<double>()(rState.mnFontSize)
- ^ std::hash<double>()(rState.mnParentFontSize)
- ^ size_t(rState.maFontStyle.hashCode())
- ^ size_t(rState.maFontVariant.hashCode())
- ^ std::hash<double>()(rState.mnFontWeight)
- ^ size_t(rState.meTextAnchor)
- ^ size_t(rState.mbVisibility)
- ^ size_t(rState.meFillType)
- ^ std::hash<double>()(rState.mnFillOpacity)
- ^ std::hash<double>()(rState.mnOpacity)
- ^ size_t(rState.meStrokeType)
- ^ std::hash<double>()(rState.mnStrokeOpacity)
- ^ std::hash<double>()(rState.mnViewportFillOpacity)
- ^ size_t(rState.maFillColor.a)
- ^ size_t(rState.maFillColor.r)
- ^ size_t(rState.maFillColor.g)
- ^ size_t(rState.maFillColor.b)
- ^ size_t(rState.maFillGradient.maStops.size())
- ^ size_t(rState.meFillRule)
- ^ size_t(rState.maStrokeColor.a)
- ^ size_t(rState.maStrokeColor.r)
- ^ size_t(rState.maStrokeColor.g)
- ^ size_t(rState.maStrokeColor.b)
- ^ size_t(rState.maStrokeGradient.maStops.size())
- ^ size_t(rState.maDashArray.size())
- ^ std::hash<double>()(rState.mnDashOffset)
- ^ size_t(rState.meLineCap)
- ^ size_t(rState.meLineJoin)
- ^ std::hash<double>()(rState.mnMiterLimit)
- ^ std::hash<double>()(rState.mnStrokeWidth)
- ^ size_t(rState.maViewportFillColor.a)
- ^ size_t(rState.maViewportFillColor.r)
- ^ size_t(rState.maViewportFillColor.g)
- ^ size_t(rState.maViewportFillColor.b)
- ^ size_t(rState.maViewportFillGradient.maStops.size());
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rState.maCTM.get( 0, 0 ));
+ boost::hash_combine(seed, rState.maCTM.get( 1, 0 ));
+ boost::hash_combine(seed, rState.maCTM.get( 0, 1 ));
+ boost::hash_combine(seed, rState.maCTM.get( 1, 1 ));
+ boost::hash_combine(seed, rState.maCTM.get( 0, 2 ));
+ boost::hash_combine(seed, rState.maCTM.get( 1, 2 ));
+ boost::hash_combine(seed, rState.maViewport.getWidth());
+ boost::hash_combine(seed, rState.maViewport.getHeight());
+ boost::hash_combine(seed, rState.maViewBox.getWidth());
+ boost::hash_combine(seed, rState.maViewBox.getHeight());
+ boost::hash_combine(seed, rState.mbIsText);
+ boost::hash_combine(seed, rState.maFontFamily);
+ boost::hash_combine(seed, rState.mnFontSize);
+ boost::hash_combine(seed, rState.mnParentFontSize);
+ boost::hash_combine(seed, rState.maFontStyle);
+ boost::hash_combine(seed, rState.maFontVariant);
+ boost::hash_combine(seed, rState.mnFontWeight);
+ boost::hash_combine(seed, rState.meTextAnchor);
+ boost::hash_combine(seed, rState.mbVisibility);
+ boost::hash_combine(seed, rState.meFillType)
+ boost::hash_combine(seed, rState.mnFillOpacity);
+ boost::hash_combine(seed, rState.mnOpacity);
+ boost::hash_combine(seed, rState.meStrokeType);
+ boost::hash_combine(seed, rState.mnStrokeOpacity);
+ boost::hash_combine(seed, rState.mnViewportFillOpacity);
+ boost::hash_combine(seed, rState.maFillColor.a);
+ boost::hash_combine(seed, rState.maFillColor.r);
+ boost::hash_combine(seed, rState.maFillColor.g);
+ boost::hash_combine(seed, rState.maFillColor.b);
+ boost::hash_combine(seed, rState.maFillGradient.maStops.size());
+ boost::hash_combine(seed, rState.meFillRule);
+ boost::hash_combine(seed, rState.maStrokeColor.a);
+ boost::hash_combine(seed, rState.maStrokeColor.r);
+ boost::hash_combine(seed, rState.maStrokeColor.g);
+ boost::hash_combine(seed, rState.maStrokeColor.b);
+ boost::hash_combine(seed, rState.maStrokeGradient.maStops.size());
+ boost::hash_combine(seed, rState.maDashArray.size());
+ boost::hash_combine(seed, rState.mnDashOffset);
+ boost::hash_combine(seed, rState.meLineCap);
+ boost::hash_combine(seed, rState.meLineJoin);
+ boost::hash_combine(seed, rState.mnMiterLimit);
+ boost::hash_combine(seed, rState.mnStrokeWidth);
+ boost::hash_combine(seed, rState.maViewportFillColor.a);
+ boost::hash_combine(seed, rState.maViewportFillColor.r);
+ boost::hash_combine(seed, rState.maViewportFillColor.g);
+ boost::hash_combine(seed, rState.maViewportFillColor.b);
+ boost::hash_combine(seed, rState.maViewportFillGradient.maStops.size());
+ return seed;
}
};
}
diff --git a/include/svx/sdasitm.hxx b/include/svx/sdasitm.hxx
index 44bdfbc714d6..3e2623b0ca76 100644
--- a/include/svx/sdasitm.hxx
+++ b/include/svx/sdasitm.hxx
@@ -89,7 +89,10 @@ inline SdrOnOffItem makeSdrTextWordWrapItem( bool bAuto ) {
inline size_t SdrCustomShapeGeometryItem::PropertyPairHash::operator()( const SdrCustomShapeGeometryItem::PropertyPair &r1 ) const
{
- return static_cast<size_t>(r1.first.hashCode()) + r1.second.hashCode();
+ size_t hash = 17;
+ hash = hash * 37 + r1.first.hashCode();
+ hash = hash * 37 + r1.second.hashCode();
+ return hash;
};
#endif
diff --git a/include/xmloff/nmspmap.hxx b/include/xmloff/nmspmap.hxx
index 127d5b59f06b..1eb0f8f15b95 100644
--- a/include/xmloff/nmspmap.hxx
+++ b/include/xmloff/nmspmap.hxx
@@ -56,7 +56,10 @@ struct QNamePairHash
{
size_t operator()( const QNamePair &r1 ) const
{
- return static_cast<size_t>(r1.second.hashCode()) + r1.first;
+ size_t hash = 17;
+ hash = hash * 37 + r1.first;
+ hash = hash * 37 + r1.second.hashCode();
+ return hash;
}
};
diff --git a/sc/inc/externalrefmgr.hxx b/sc/inc/externalrefmgr.hxx
index d55693b8af46..087e05570a5d 100644
--- a/sc/inc/externalrefmgr.hxx
+++ b/sc/inc/externalrefmgr.hxx
@@ -305,7 +305,14 @@ private:
{
const ScAddress& s = rRange.aStart;
const ScAddress& e = rRange.aEnd;
- return s.Tab() + s.Col() + s.Row() + e.Tab() + e.Col() + e.Row();
+ size_t hash = 17;
+ hash = hash * 37 + s.Tab();
+ hash = hash * 37 + s.Col();
+ hash = hash * 37 + s.Row();
+ hash = hash * 37 + e.Tab();
+ hash = hash * 37 + e.Col();
+ hash = hash * 37 + e.Row();
+ return hash;
}
};
diff --git a/sc/source/core/data/dpresfilter.cxx b/sc/source/core/data/dpresfilter.cxx
index c4102824fe1f..2efb4563f8ee 100644
--- a/sc/source/core/data/dpresfilter.cxx
+++ b/sc/source/core/data/dpresfilter.cxx
@@ -13,6 +13,7 @@
#include <unotools/charclass.hxx>
#include <rtl/math.hxx>
#include <sal/log.hxx>
+#include <boost/functional/hash.hpp>
#include <com/sun/star/sheet/DataPilotFieldFilter.hpp>
#include <com/sun/star/uno/Sequence.hxx>
@@ -28,8 +29,10 @@ ScDPResultFilterContext::ScDPResultFilterContext() :
size_t ScDPResultTree::NamePairHash::operator() (const NamePairType& rPair) const
{
- OUStringHash aHash;
- return aHash(rPair.first) + aHash(rPair.second);
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rPair.first.hashCode());
+ boost::hash_combine(seed, rPair.second.hashCode());
+ return seed;
}
ScDPResultTree::DimensionNode::DimensionNode() {}
diff --git a/sc/source/ui/view/spellcheckcontext.cxx b/sc/source/ui/view/spellcheckcontext.cxx
index 5f03da7d882c..867dc26f5738 100644
--- a/sc/source/ui/view/spellcheckcontext.cxx
+++ b/sc/source/ui/view/spellcheckcontext.cxx
@@ -8,15 +8,16 @@
*/
#include <spellcheckcontext.hxx>
+#include <boost/functional/hash.hpp>
namespace sc {
size_t SpellCheckContext::CellPos::Hash::operator() (const CellPos& rPos) const
{
- size_t nVal = rPos.mnCol;
- nVal = nVal << 4;
- nVal += rPos.mnRow;
- return nVal;
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rPos.mnCol);
+ boost::hash_combine(seed, rPos.mnRow);
+ return seed;
}
SpellCheckContext::CellPos::CellPos() : mnCol(0), mnRow(0) {}
diff --git a/sdext/source/pdfimport/inc/pdfihelper.hxx b/sdext/source/pdfimport/inc/pdfihelper.hxx
index 072a5bd01d50..4a7fd569688e 100644
--- a/sdext/source/pdfimport/inc/pdfihelper.hxx
+++ b/sdext/source/pdfimport/inc/pdfihelper.hxx
@@ -82,13 +82,14 @@ namespace pdfi
{
size_t operator()(const FontAttributes& rFont ) const
{
- return static_cast<size_t>(rFont.familyName.hashCode())
- ^ size_t(rFont.isBold ? 0xd47be593 : 0)
- ^ size_t(rFont.isItalic ? 0x1efd51a1 : 0)
- ^ size_t(rFont.isUnderline ? 0xf6bd325a : 0)
- ^ size_t(rFont.isOutline ? 0x12345678 : 0)
- ^ size_t(rFont.size)
- ;
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rFont.familyName.hashCode());
+ boost::hash_combine(seed, rFont.isBold);
+ boost::hash_combine(seed, rFont.isItalic);
+ boost::hash_combine(seed, rFont.isUnderline);
+ boost::hash_combine(seed, rFont.isOutline);
+ boost::hash_combine(seed, rFont.size);
+ return seed;
}
};
@@ -184,31 +185,32 @@ namespace pdfi
{
size_t operator()(const GraphicsContext& rGC ) const
{
- return boost::hash_value(rGC.LineColor.Red)
- ^ boost::hash_value(rGC.LineColor.Green)
- ^ boost::hash_value(rGC.LineColor.Blue)
- ^ boost::hash_value(rGC.LineColor.Alpha)
- ^ boost::hash_value(rGC.FillColor.Red)
- ^ boost::hash_value(rGC.FillColor.Green)
- ^ boost::hash_value(rGC.FillColor.Blue)
- ^ boost::hash_value(rGC.FillColor.Alpha)
- ^ boost::hash_value(rGC.LineJoin)
- ^ boost::hash_value(rGC.LineCap)
- ^ boost::hash_value(rGC.BlendMode)
- ^ boost::hash_value(rGC.LineWidth)
- ^ boost::hash_value(rGC.Flatness)
- ^ boost::hash_value(rGC.MiterLimit)
- ^ rGC.DashArray.size()
- ^ boost::hash_value(rGC.FontId)
- ^ boost::hash_value(rGC.TextRenderMode)
- ^ boost::hash_value(rGC.Transformation.get( 0, 0 ))
- ^ boost::hash_value(rGC.Transformation.get( 1, 0 ))
- ^ boost::hash_value(rGC.Transformation.get( 0, 1 ))
- ^ boost::hash_value(rGC.Transformation.get( 1, 1 ))
- ^ boost::hash_value(rGC.Transformation.get( 0, 2 ))
- ^ boost::hash_value(rGC.Transformation.get( 1, 2 ))
- ^ boost::hash_value(rGC.Clip.count() ? rGC.Clip.getB2DPolygon(0).count() : 0)
- ;
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rGC.LineColor.Red);
+ boost::hash_combine(seed, rGC.LineColor.Green);
+ boost::hash_combine(seed, rGC.LineColor.Blue);
+ boost::hash_combine(seed, rGC.LineColor.Alpha);
+ boost::hash_combine(seed, rGC.FillColor.Red);
+ boost::hash_combine(seed, rGC.FillColor.Green);
+ boost::hash_combine(seed, rGC.FillColor.Blue);
+ boost::hash_combine(seed, rGC.FillColor.Alpha);
+ boost::hash_combine(seed, rGC.LineJoin);
+ boost::hash_combine(seed, rGC.LineCap);
+ boost::hash_combine(seed, rGC.BlendMode);
+ boost::hash_combine(seed, rGC.LineWidth);
+ boost::hash_combine(seed, rGC.Flatness);
+ boost::hash_combine(seed, rGC.MiterLimit);
+ boost::hash_combine(seed, rGC.DashArray.size());
+ boost::hash_combine(seed, rGC.FontId);
+ boost::hash_combine(seed, rGC.TextRenderMode);
+ boost::hash_combine(seed, rGC.Transformation.get( 0, 0 ));
+ boost::hash_combine(seed, rGC.Transformation.get( 1, 0 ));
+ boost::hash_combine(seed, rGC.Transformation.get( 0, 1 ));
+ boost::hash_combine(seed, rGC.Transformation.get( 1, 1 ));
+ boost::hash_combine(seed, rGC.Transformation.get( 0, 2 ));
+ boost::hash_combine(seed, rGC.Transformation.get( 1, 2 ));
+ boost::hash_combine(seed, rGC.Clip.count() ? rGC.Clip.getB2DPolygon(0).count() : 0);
+ return seed;
}
};
diff --git a/vbahelper/source/vbahelper/vbaapplicationbase.cxx b/vbahelper/source/vbahelper/vbaapplicationbase.cxx
index f65d2bfc6e35..0ea9d721157a 100644
--- a/vbahelper/source/vbahelper/vbaapplicationbase.cxx
+++ b/vbahelper/source/vbahelper/vbaapplicationbase.cxx
@@ -50,6 +50,7 @@
#include "vbacommandbars.hxx"
+#include <boost/functional/hash.hpp>
#include <unordered_map>
using namespace ::com::sun::star;
@@ -139,9 +140,11 @@ struct VbaTimerInfoHash
{
size_t operator()( const VbaTimerInfo& rTimerInfo ) const
{
- return static_cast<size_t>(rTimerInfo.first.hashCode())
- + static_cast<size_t>(rtl_str_hashCode_WithLength( reinterpret_cast<char const *>(&rTimerInfo.second.first), sizeof( double ) ))
- + static_cast<size_t>(rtl_str_hashCode_WithLength( reinterpret_cast<char const *>(&rTimerInfo.second.second), sizeof( double ) ));
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rTimerInfo.first.hashCode());
+ boost::hash_combine(seed, rTimerInfo.second.first);
+ boost::hash_combine(seed, rTimerInfo.second.second);
+ return seed;
}
};
diff --git a/vcl/source/font/fontinstance.cxx b/vcl/source/font/fontinstance.cxx
index 595259731db1..bcbbe6d94d9d 100644
--- a/vcl/source/font/fontinstance.cxx
+++ b/vcl/source/font/fontinstance.cxx
@@ -32,9 +32,10 @@ namespace std
{
size_t operator()(const pair< sal_UCS4, FontWeight >& rData) const
{
- size_t h1 = hash<sal_UCS4>()(rData.first);
- size_t h2 = hash<int>()(rData.second);
- return h1 ^ h2;
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rData.first);
+ boost::hash_combine(seed, rData.second);
+ return seed;
}
};
}
diff --git a/vcl/unx/generic/glyphs/glyphcache.cxx b/vcl/unx/generic/glyphs/glyphcache.cxx
index 0aa8be45e84a..558e3d8c3323 100644
--- a/vcl/unx/generic/glyphs/glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/glyphcache.cxx
@@ -85,15 +85,15 @@ size_t GlyphCache::IFSD_Hash::operator()(const rtl::Reference<LogicalFontInstanc
nFontId ^= aFeatName.hashCode();
}
- size_t nHash = nFontId << 8;
- nHash += rFontSelData.mnHeight;
- nHash += rFontSelData.mnOrientation;
- nHash += size_t(rFontSelData.mbVertical);
- nHash += rFontSelData.GetItalic();
- nHash += rFontSelData.GetWeight();
- nHash += static_cast<sal_uInt16>(rFontSelData.meLanguage);
-
- return nHash;
+ std::size_t seed = 0;
+ boost::hash_combine(seed, nFontId);
+ boost::hash_combine(seed, rFontSelData.mnHeight);
+ boost::hash_combine(seed, rFontSelData.mnOrientation);
+ boost::hash_combine(seed, size_t(rFontSelData.mbVertical));
+ boost::hash_combine(seed, rFontSelData.GetItalic());
+ boost::hash_combine(seed, rFontSelData.GetWeight());
+ boost::hash_combine(seed, static_cast<sal_uInt16>(rFontSelData.meLanguage));
+ return seed;
}
bool GlyphCache::IFSD_Equal::operator()(const rtl::Reference<LogicalFontInstance>& rAFontInstance,
diff --git a/vcl/unx/generic/printer/ppdparser.cxx b/vcl/unx/generic/printer/ppdparser.cxx
index 923d8612e7a1..aa99e3638580 100644
--- a/vcl/unx/generic/printer/ppdparser.cxx
+++ b/vcl/unx/generic/printer/ppdparser.cxx
@@ -54,6 +54,7 @@
#include <config_dbus.h>
#include <config_gio.h>
+#include <boost/functional/hash.hpp>
namespace psp
{
@@ -73,11 +74,12 @@ namespace psp
struct LocaleHash
{
size_t operator()(const css::lang::Locale& rLocale) const
- { return
- static_cast<size_t>(rLocale.Language.hashCode())
- ^ static_cast<size_t>(rLocale.Country.hashCode())
- ^ static_cast<size_t>(rLocale.Variant.hashCode())
- ;
+ {
+ std::size_t seed = 0;
+ boost::hash_combine(seed, rLocale.Language.hashCode());
+ boost::hash_combine(seed, rLocale.Country.hashCode());
+ boost::hash_combine(seed, rLocale.Variant.hashCode());
+ return seed;
}
};
diff --git a/xmloff/inc/StyleMap.hxx b/xmloff/inc/StyleMap.hxx
index 8fb76e61104d..aef67399b8cd 100644
--- a/xmloff/inc/StyleMap.hxx
+++ b/xmloff/inc/StyleMap.hxx
@@ -22,6 +22,7 @@
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <cppuhelper/implbase.hxx>
+#include <boost/functional/hash.hpp>
#include <unordered_map>
struct StyleNameKey_Impl
@@ -46,8 +47,10 @@ struct StyleNameHash_Impl
inline size_t StyleNameHash_Impl::operator()( const StyleNameKey_Impl& r ) const
{
- return static_cast< size_t >( r.m_nFamily ) +
- static_cast< size_t >( r.m_aName.hashCode() );
+ std::size_t seed = 0;
+ boost::hash_combine(seed, r.m_nFamily);
+ boost::hash_combine(seed, r.m_aName.hashCode());
+ return seed;
}
inline bool StyleNameHash_Impl::operator()(
diff --git a/xmloff/source/core/xmltkmap.cxx b/xmloff/source/core/xmltkmap.cxx
index 1aca38975d9b..d89eb9621638 100644
--- a/xmloff/source/core/xmltkmap.cxx
+++ b/xmloff/source/core/xmltkmap.cxx
@@ -20,6 +20,7 @@
#include <rtl/ustring.hxx>
#include <xmloff/xmltkmap.hxx>
#include <xmloff/xmltoken.hxx>
+#include <boost/functional/hash.hpp>
#include <unordered_map>
#include <utility>
@@ -33,7 +34,10 @@ private:
{
std::size_t operator()(const std::pair<sal_uInt16,OUString> &pair) const
{
- return static_cast<std::size_t>( pair.first | pair.second.hashCode() );
+ std::size_t seed = 0;
+ boost::hash_combine(seed, pair.first);
+ boost::hash_combine(seed, pair.second.hashCode());
+ return seed;
}
};
std::unordered_map< std::pair<sal_uInt16, OUString>,
diff --git a/xmloff/source/forms/property_meta_data.cxx b/xmloff/source/forms/property_meta_data.cxx
index 87ccd36fc160..edf505faa45d 100644
--- a/xmloff/source/forms/property_meta_data.cxx
+++ b/xmloff/source/forms/property_meta_data.cxx
@@ -24,6 +24,7 @@
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmlnmspe.hxx>
+#include <boost/functional/hash.hpp>
#include <tools/debug.hxx>
#include <osl/diagnose.h>
#include <sal/log.hxx>
@@ -128,7 +129,10 @@ namespace xmloff { namespace metadata
{
size_t operator()( const AttributeDescription& i_attribute ) const
{
- return size_t( i_attribute.attributeToken * 100 ) + size_t( i_attribute.namespacePrefix );
+ std::size_t seed = 0;
+ boost::hash_combine(seed, i_attribute.attributeToken);
+ boost::hash_combine(seed, i_attribute.namespacePrefix);
+ return seed;
}
};
diff --git a/xmloff/source/transform/TransformerActions.hxx b/xmloff/source/transform/TransformerActions.hxx
index 3c7f61c7c365..17109c031808 100644
--- a/xmloff/source/transform/TransformerActions.hxx
+++ b/xmloff/source/transform/TransformerActions.hxx
@@ -24,6 +24,7 @@
#include <xmloff/nmspmap.hxx>
#include "TransformerActionInit.hxx"
#include "TransformerAction.hxx"
+#include <boost/functional/hash.hpp>
#include <unordered_map>
struct NameKey_Impl
@@ -57,8 +58,10 @@ struct NameHash_Impl
inline size_t NameHash_Impl::operator()( const NameKey_Impl& r ) const
{
- return static_cast< size_t >( r.m_nPrefix ) +
- static_cast< size_t >( r.m_aLocalName.hashCode() );
+ std::size_t seed = 0;
+ boost::hash_combine(seed, r.m_nPrefix);
+ boost::hash_combine(seed, r.m_aLocalName.hashCode());
+ return seed;
}
inline bool NameHash_Impl::operator()(
More information about the Libreoffice-commits
mailing list