hash.h 950 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #pragma once
  2. #include <util/generic/hash.h>
  3. #include <util/random/random.h>
  4. namespace NYT {
  5. ////////////////////////////////////////////////////////////////////////////////
  6. //! Updates #h with #k.
  7. //! Cf. |boost::hash_combine|.
  8. void HashCombine(size_t& h, size_t k);
  9. //! Updates #h with the hash of #k.
  10. //! Cf. |boost::hash_combine|.
  11. template <class T>
  12. void HashCombine(size_t& h, const T& k);
  13. ////////////////////////////////////////////////////////////////////////////////
  14. //! Provides a hasher that randomizes the results of another one.
  15. template <class TElement, class TUnderlying = ::THash<TElement>>
  16. class TRandomizedHash
  17. {
  18. public:
  19. TRandomizedHash();
  20. size_t operator () (const TElement& element) const;
  21. private:
  22. size_t Seed_;
  23. TUnderlying Underlying_;
  24. };
  25. ////////////////////////////////////////////////////////////////////////////////
  26. } // namespace NYT
  27. #define HASH_INL_H_
  28. #include "hash-inl.h"
  29. #undef HASH_INL_H_