Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qhashfunctions.h File Reference

(45fd36f1480a6229879a4e59236ffa1d1d22dfbf)

#include <QtCore/qstring.h>
#include <QtCore/qstringfwd.h>
#include <numeric>
#include <functional>
#include <utility>
+ Include dependency graph for qhashfunctions.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  QHashSeed
 \inmodule QtCore More...
 
struct  QHashHeterogeneousSearch< Key, T >
 
struct  QHashHeterogeneousSearch< QString, QStringView >
 
struct  QHashHeterogeneousSearch< QStringView, QString >
 
struct  QHashHeterogeneousSearch< QByteArray, QByteArrayView >
 
struct  QHashHeterogeneousSearch< QByteArrayView, QByteArray >
 
struct  QHashHeterogeneousSearch< QString, QLatin1StringView >
 
struct  QHashHeterogeneousSearch< QStringView, QLatin1StringView >
 
struct  QHashHeterogeneousSearch< QLatin1StringView, QString >
 
struct  QHashHeterogeneousSearch< QLatin1StringView, QStringView >
 
struct  QtPrivate::QHashCombine
 
struct  QtPrivate::QHashCombineCommutative
 
struct  QtPrivate::QNothrowHashable< T, Enable >
 
struct  QtPrivate::QNothrowHashable< T, std::enable_if_t< QNothrowHashableHelper_v< T > > >
 

Namespaces

namespace  QHashPrivate
 
namespace  QtPrivate
 \macro QT_NO_KEYWORDS >
 

Macros

#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, Arguments)
 
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(Class)    QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, const argument_type &)
 
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_VALUE(Class)    QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, argument_type)
 

Typedefs

template<typename... T>
using QtPrivate::QHashMultiReturnType
 

Functions

Q_DECL_CONST_FUNCTION constexpr size_t QHashPrivate::hash (size_t key, size_t seed) noexcept
 
template<typename T1 , typename T2 >
static constexpr bool QHashPrivate::noexceptPairHash ()
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHashBits (const void *p, size_t size, size_t seed=0) noexcept
 
template<typename T1 , typename T2 >
size_t qHash (const std::pair< T1, T2 > &key, size_t seed=0) noexcept(QHashPrivate::noexceptPairHash< T1, T2 >())
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (char key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (uchar key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (signed char key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (ushort key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (short key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (uint key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (int key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (ulong key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (long key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (quint64 key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (qint64 key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION size_t qHash (float key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash (double key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash (long double key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (wchar_t key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (char16_t key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (char32_t key, size_t seed=0) noexcept
 
template<class T >
size_t qHash (const T *key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (std::nullptr_t, size_t seed=0) noexcept
 
template<class Enum , std::enable_if_t< std::is_enum_v< Enum >, bool > = true>
Q_DECL_CONST_FUNCTION constexpr size_t qHash (Enum e, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (const QChar key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash (QByteArrayView key, size_t seed=0) noexcept
 
Q_DECL_PURE_FUNCTION size_t qHash (const QByteArray &key, size_t seed=0 QT6_DECL_NEW_OVERLOAD_TAIL) noexcept
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash (QStringView key, size_t seed=0) noexcept
 
Q_DECL_PURE_FUNCTION size_t qHash (const QString &key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash (const QBitArray &key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash (QLatin1StringView key, size_t seed=0) noexcept
 
Q_DECL_CONST_FUNCTION constexpr size_t qHash (QKeyCombination key, size_t seed=0) noexcept
 
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash (QStringView key, uint chained=0) noexcept
 
template<typename Enum >
Q_DECL_CONST_FUNCTION constexpr size_t qHash (QFlags< Enum > flags, size_t seed=0) noexcept
 
template<typename T >
bool qHashEquals (const T &a, const T &b)
 
template<typename T1 , typename T2 >
std::enable_if_t< QHashPrivate::HeterogeneouslySearchableWith< T1, T2 >, bool > qHashEquals (const T1 &a, const T2 &b)
 
template<typename... T>
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti (size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
 
template<typename... T>
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMultiCommutative (size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
 
template<typename InputIterator >
size_t qHashRange (InputIterator first, InputIterator last, size_t seed=0) noexcept(noexcept(qHash(*first)))
 
template<typename InputIterator >
size_t qHashRangeCommutative (InputIterator first, InputIterator last, size_t seed=0) noexcept(noexcept(qHash(*first)))
 

Variables

template<typename Key , typename T >
constexpr bool QHashPrivate::HeterogeneouslySearchableWith = false
 
template<typename T >
constexpr bool QtPrivate::QNothrowHashableHelper_v = noexcept(qHash(std::declval<const T &>()))
 
template<typename T >
constexpr bool QtPrivate::QNothrowHashable_v = QNothrowHashable<T>::value
 

Macro Definition Documentation

◆ QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH

#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH ( Class,
Arguments )
Value:
QT_BEGIN_INCLUDE_NAMESPACE \
namespace std { \
template <> \
struct hash< QT_PREPEND_NAMESPACE(Class) > { \
using argument_type = QT_PREPEND_NAMESPACE(Class); \
using result_type = size_t; \
size_t operator()(Arguments s) const \
noexcept(QT_PREPEND_NAMESPACE( \
QtPrivate::QNothrowHashable_v)<argument_type>) \
{ \
/* this seeds qHash with the result of */ \
/* std::hash applied to an int, to reap */ \
/* any protection against predictable hash */ \
/* values the std implementation may provide */ \
using QT_PREPEND_NAMESPACE(qHash); \
return qHash(s, qHash(std::hash<int>{}(0))); \
} \
}; \
} \
/*end*/
QHash< int, QWidget * > hash
[35multi]
constexpr bool QNothrowHashable_v
size_t qHash(const QFileSystemWatcherPathKey &key, size_t seed=0)
GLdouble s
[6]
Definition qopenglext.h:235
#define QT_END_INCLUDE_NAMESPACE

Definition at line 371 of file qhashfunctions.h.

◆ QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF

#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF ( Class)     QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, const argument_type &)

Definition at line 394 of file qhashfunctions.h.

◆ QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_VALUE

#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_VALUE ( Class)     QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, argument_type)

Definition at line 396 of file qhashfunctions.h.

Function Documentation

◆ qHash() [1/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( char key,
size_t seed = 0 )
related

Definition at line 101 of file qhashfunctions.h.

◆ qHash() [2/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( char16_t key,
size_t seed = 0 )
related

Definition at line 170 of file qhashfunctions.h.

◆ qHash() [3/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( char32_t key,
size_t seed = 0 )
related

Definition at line 172 of file qhashfunctions.h.

◆ qHash() [4/30]

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash ( const QBitArray & key,
size_t seed = 0 )
related

Definition at line 42 of file qhash.cpp.

◆ qHash() [5/30]

Q_DECL_PURE_FUNCTION size_t qHash ( const QByteArray & key,
size_t seed = QT6_DECL_NEW_OVERLOAD_TAIL )
related

Definition at line 198 of file qhashfunctions.h.

◆ qHash() [6/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( const QChar key,
size_t seed = 0 )
related

Definition at line 191 of file qhashfunctions.h.

◆ qHash() [7/30]

Q_DECL_PURE_FUNCTION size_t qHash ( const QString & key,
size_t seed = 0 )
related

Definition at line 204 of file qhashfunctions.h.

◆ qHash() [8/30]

template<typename T1 , typename T2 >
size_t qHash ( const std::pair< T1, T2 > & key,
size_t seed = 0 )
related

Definition at line 365 of file qhashfunctions.h.

Referenced by QHash< Key, T >::qHash(), QHash< Key, T >::qHash(), QHash< Key, T >::qHash(), QHash< Key, T >::qHash(), qHash(), QHash< Key, T >::qHash(), and qHash().

+ Here is the caller graph for this function:

◆ qHash() [9/30]

template<class T >
size_t qHash ( const T * key,
size_t seed = 0 )
related

Definition at line 178 of file qhashfunctions.h.

◆ qHash() [10/30]

Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash ( double key,
size_t seed = 0 )
related

◆ qHash() [11/30]

template<class Enum , std::enable_if_t< std::is_enum_v< Enum >, bool > = true>
Q_DECL_CONST_FUNCTION constexpr size_t qHash ( Enum e,
size_t seed = 0 )
inlineconstexprnoexcept

Definition at line 187 of file qhashfunctions.h.

References QHashPrivate::hash(), qToUnderlying(), and seed.

+ Here is the call graph for this function:

◆ qHash() [12/30]

Q_DECL_CONST_FUNCTION size_t qHash ( float key,
size_t seed = 0 )
related

Definition at line 158 of file qhashfunctions.h.

◆ qHash() [13/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( int key,
size_t seed = 0 )
related

Definition at line 113 of file qhashfunctions.h.

◆ qHash() [14/30]

Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash ( long double key,
size_t seed = 0 )
related

◆ qHash() [15/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( long key,
size_t seed = 0 )
related

Definition at line 117 of file qhashfunctions.h.

◆ qHash() [16/30]

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash ( QByteArrayView key,
size_t seed = 0 )
noexcept

Definition at line 1114 of file qhash.cpp.

References qHashBits(), and seed.

+ Here is the call graph for this function:

◆ qHash() [17/30]

template<typename Enum >
Q_DECL_CONST_FUNCTION constexpr size_t qHash ( QFlags< Enum > flags,
size_t seed = 0 )
inlineconstexprnoexcept

Definition at line 215 of file qhashfunctions.h.

References qHash(), and seed.

+ Here is the call graph for this function:

◆ qHash() [18/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( qint64 key,
size_t seed = 0 )
related

Definition at line 125 of file qhashfunctions.h.

◆ qHash() [19/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( QKeyCombination key,
size_t seed = 0 )
inlineconstexprnoexcept

Definition at line 210 of file qhashfunctions.h.

References qHash(), and seed.

+ Here is the call graph for this function:

◆ qHash() [20/30]

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash ( QLatin1StringView key,
size_t seed = 0 )
related

Definition at line 1139 of file qhash.cpp.

◆ qHash() [21/30]

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash ( QStringView key,
size_t seed = 0 )
related

Definition at line 1119 of file qhash.cpp.

◆ qHash() [22/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( quint64 key,
size_t seed = 0 )
related

Definition at line 119 of file qhashfunctions.h.

◆ qHash() [23/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( short key,
size_t seed = 0 )
related

Definition at line 109 of file qhashfunctions.h.

◆ qHash() [24/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( signed char key,
size_t seed = 0 )
related

Definition at line 105 of file qhashfunctions.h.

◆ qHash() [25/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( std::nullptr_t ,
size_t seed = 0 )
related

Definition at line 182 of file qhashfunctions.h.

◆ qHash() [26/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( uchar key,
size_t seed = 0 )
related

Definition at line 103 of file qhashfunctions.h.

◆ qHash() [27/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( uint key,
size_t seed = 0 )
related

Definition at line 111 of file qhashfunctions.h.

◆ qHash() [28/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( ulong key,
size_t seed = 0 )
related

Definition at line 115 of file qhashfunctions.h.

◆ qHash() [29/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( ushort key,
size_t seed = 0 )
related

Definition at line 107 of file qhashfunctions.h.

◆ qHash() [30/30]

Q_DECL_CONST_FUNCTION constexpr size_t qHash ( wchar_t key,
size_t seed = 0 )
related

Definition at line 168 of file qhashfunctions.h.

◆ qHashBits()

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHashBits ( const void * p,
size_t size,
size_t seed = 0 )
related

Definition at line 1089 of file qhash.cpp.

Referenced by QTlsPrivate::X509CertificateOpenSSL::hash(), qHash(), qHash(), qHash(), qHash(), qHash(), and QStringView::qHash().

+ Here is the caller graph for this function:

◆ qHashEquals() [1/2]

template<typename T >
bool qHashEquals ( const T & a,
const T & b )
related

Definition at line 256 of file qhashfunctions.h.

Referenced by QHashPrivate::Data< Node >::findBucket().

+ Here is the caller graph for this function:

◆ qHashEquals() [2/2]

template<typename T1 , typename T2 >
std::enable_if_t< QHashPrivate::HeterogeneouslySearchableWith< T1, T2 >, bool > qHashEquals ( const T1 & a,
const T2 & b )

Definition at line 263 of file qhashfunctions.h.

◆ qHashMulti()

template<typename... T>
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti ( size_t seed,
const T &... args )
related

Definition at line 322 of file qhashfunctions.h.

Referenced by QGeoCirclePrivate::hash(), QGeoPathPrivate::hash(), QGeoPolygonPrivate::hash(), QGeoRectanglePrivate::hash(), qHash(), QByteArray::FromBase64Result::qHash(), qHash(), qHash(), qHash(), QGeoAddress::qHash(), QGeoLocation::qHash(), qHash(), qHash(), qHash(), qHash(), QShaderKey::qHash(), qHash(), qHash(), QHash< Key, T >::qHash(), and QHash< Key, T >::qHash().

+ Here is the caller graph for this function:

◆ qHashMultiCommutative()

template<typename... T>
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMultiCommutative ( size_t seed,
const T &... args )
related

Definition at line 336 of file qhashfunctions.h.

◆ qHashRange()

template<typename InputIterator >
size_t qHashRange ( InputIterator first,
InputIterator last,
size_t seed = 0 )
related

Definition at line 344 of file qhashfunctions.h.

Referenced by QVLABase< T >::hash(), QGeoPathPrivate::hash(), QGeoPolygonPrivate::hash(), qHash(), qHash(), qHash(), and qHash().

+ Here is the caller graph for this function:

◆ qHashRangeCommutative()

template<typename InputIterator >
size_t qHashRangeCommutative ( InputIterator first,
InputIterator last,
size_t seed = 0 )
related

Definition at line 351 of file qhashfunctions.h.

Referenced by qHash().

+ Here is the caller graph for this function:

◆ qt_hash()

Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash ( QStringView key,
uint chained )
noexcept

Private copy of the implementation of the Qt 4 qHash algorithm for strings, (that is, QChar-based arrays, so all QString-like classes), to be used wherever the result is somehow stored or reused across multiple Qt versions. The public qHash implementation can change at any time, therefore one must not rely on the fact that it will always give the same results.

The qt_hash functions must never change their results.

This function can hash discontiguous memory by invoking it on each chunk, passing the previous's result in the next call's chained argument.

Definition at line 1325 of file qhash.cpp.

Referenced by qt_rcc_compare_hash::operator()(), and RCCFileInfo::writeDataName().

+ Here is the caller graph for this function: