8#ifndef INCLUDED_BSLH_HASH
9#define INCLUDED_BSLH_HASH
490#include <bslscm_version.h>
539template <
class HASH_ALGORITHM>
547 HASH_ALGORITHM d_hashAlgorithm;
561 void operator()(
const void *input,
size_t numBytes);
565 template <
class ELEMENT_TYPE>
566 void operator()(
const ELEMENT_TYPE *input,
size_t numBytes);
581template <
class HASH_ALGORITHM = bslh::DefaultHashAlgorithm>
619 template <
class TYPE>
635template <
class HASH_ALGORITHM,
class TYPE>
645 hashAlg(&input,
sizeof(input));
658template <
class HASH_ALGORITHM,
class TYPE>
668 hashAlg(&input,
sizeof(input));
678template <
class HASH_ALGORITHM,
class TYPE>
680hashAppend(HASH_ALGORITHM& hashAlg, TYPE input);
689template <
class HASH_ALGORITHM,
class TYPE>
691hashAppend(HASH_ALGORITHM& hashAlg, TYPE input);
701template <
class HASH_ALGORITHM,
size_t N>
709template <
class HASH_ALGORITHM,
size_t N>
710void hashAppend(HASH_ALGORITHM& hashAlg,
const char (&input)[N]);
722template <
class HASH_ALGORITHM,
class TYPE,
size_t N>
731template <
class HASH_ALGORITHM,
class TYPE,
size_t N>
732void hashAppend(HASH_ALGORITHM& hashAlg,
const TYPE (&input)[N]);
745template <
class HASH_ALGORITHM>
752template <
class HASH_ALGORITHM>
757 d_hashAlgorithm(input, numBytes);
760template <
class HASH_ALGORITHM>
761template <
class ELEMENT_TYPE>
764 const ELEMENT_TYPE *input,
767 d_hashAlgorithm(input, numBytes);
770template <
class HASH_ALGORITHM>
775 return d_hashAlgorithm.computeHash();
783template <
class HASH_ALGORITHM>
812template <
class HASH_ALGORITHM,
class TYPE>
822 unsigned char normalizedData = !!input;
824 hashAlg(
static_cast<void *
>(&normalizedData),
sizeof(normalizedData));
827template <
class HASH_ALGORITHM,
class TYPE>
836#if (defined BSLS_PLATFORM_CPU_X86 || defined BSLS_PLATFORM_CPU_X86_64) && \
837 (defined BSLS_PLATFORM_CMP_GNU || defined BSLS_PLATFORM_CMP_CLANG)
893 #if !defined(BSLS_PLATFORM_CMP_CLANG) && BSLS_PLATFORM_CPU_X86_64
902 hashAlg(&input,
sizeof(input));
906 hashAlg(&input,
sizeof(input) > 10 ? 10 : sizeof(input));
908 hashAlg(&input,
sizeof(input));
912template <
class HASH_ALGORITHM,
size_t N>
916 hashAlg(&input,
sizeof(
char)*N);
919template <
class HASH_ALGORITHM,
size_t N>
923 hashAlg(&input,
sizeof(
char)*N);
926template <
class HASH_ALGORITHM,
class TYPE,
size_t N>
931 for (
size_t i = 0; i < N; ++i) {
937template <
class HASH_ALGORITHM,
class TYPE,
size_t N>
941 for (
size_t i = 0; i < N; ++i) {
Definition bslh_defaulthashalgorithm.h:346
result_type computeHash()
Definition bslh_defaulthashalgorithm.h:431
Definition bslh_hash.h:540
HASH_ALGORITHM::result_type result_type
Definition bslh_hash.h:543
result_type computeHash()
Definition bslh_hash.h:773
void operator()(const void *input, size_t numBytes)
Definition bslh_hash.h:754
Hash_AdlWrapper()
Definition bslh_hash.h:747
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlat_valuetypefunctions.h:939
Definition bslh_defaulthashalgorithm.h:339
bsl::enable_if<(bsl::is_integral< TYPE >::value||bsl::is_pointer< TYPE >::value||bsl::is_enum< TYPE >::value)&&!bsl::is_same< TYPE, bool >::value >::type hashAppend(HASH_ALGORITHM &hashAlg, TYPE input)
Definition bslh_hash.h:643
Definition bdlbb_blob.h:579
Definition bslmf_enableif.h:530
Definition bslmf_isenum.h:272
Definition bslmf_isfloatingpoint.h:144
Definition bslmf_isintegral.h:140
Definition bslmf_ispointer.h:138
Definition bslmf_issame.h:146
Definition bslmf_istriviallycopyable.h:324
Definition bslmf_istriviallydefaultconstructible.h:296
Definition bslh_hash.h:582
result_type operator()(const TYPE &type) const
~Hash()=default
Destroy this object.
Hash & operator=(const Hash &rhs)=default
Hash(const Hash &original)=default
size_t result_type
Definition bslh_hash.h:588
HASH_ALGORITHM HashAlgorithm
Make the HASH_ALGORITHM template parameter available to clients.
Definition bslh_hash.h:591
Definition bslmf_isbitwisemoveable.h:718