#pragma once #include #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// //! Updates #h with #k. //! Cf. |boost::hash_combine|. void HashCombine(size_t& h, size_t k); //! Updates #h with the hash of #k. //! Cf. |boost::hash_combine|. template void HashCombine(size_t& h, const T& k); //! Computes the hash of #value handling NaN values gracefully //! (returning the same constant for all NaNs). //! If |T| is not a floating-point type, #NaNSafeHash is equivalent to #THash. template size_t NaNSafeHash(const T& value); //////////////////////////////////////////////////////////////////////////////// //! Provides a hasher that randomizes the results of another one. template > class TRandomizedHash { public: TRandomizedHash(); size_t operator()(const TElement& element) const; private: size_t Seed_; TUnderlying Underlying_; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT #define HASH_INL_H_ #include "hash-inl.h" #undef HASH_INL_H_