__hash 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // -*- C++ -*-
  2. //===----------------------------------------------------------------------===//
  3. //
  4. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  5. // See https://llvm.org/LICENSE.txt for license information.
  6. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef _LIBCPP_EXT_HASH
  10. #define _LIBCPP_EXT_HASH
  11. #pragma GCC system_header
  12. #include <__config>
  13. #include <cstring>
  14. #include <stddef.h>
  15. #include <string>
  16. namespace __gnu_cxx {
  17. template <typename _Tp>
  18. struct _LIBCPP_TEMPLATE_VIS hash {};
  19. template <>
  20. struct _LIBCPP_TEMPLATE_VIS hash<const char*> : public std::__unary_function<const char*, size_t> {
  21. _LIBCPP_HIDE_FROM_ABI size_t operator()(const char* __c) const _NOEXCEPT {
  22. return std::__do_string_hash(__c, __c + strlen(__c));
  23. }
  24. };
  25. template <>
  26. struct _LIBCPP_TEMPLATE_VIS hash<char*> : public std::__unary_function<char*, size_t> {
  27. _LIBCPP_HIDE_FROM_ABI size_t operator()(char* __c) const _NOEXCEPT {
  28. return std::__do_string_hash<const char*>(__c, __c + strlen(__c));
  29. }
  30. };
  31. template <>
  32. struct _LIBCPP_TEMPLATE_VIS hash<char> : public std::__unary_function<char, size_t> {
  33. _LIBCPP_HIDE_FROM_ABI size_t operator()(char __c) const _NOEXCEPT { return __c; }
  34. };
  35. template <>
  36. struct _LIBCPP_TEMPLATE_VIS hash<signed char> : public std::__unary_function<signed char, size_t> {
  37. _LIBCPP_HIDE_FROM_ABI size_t operator()(signed char __c) const _NOEXCEPT { return __c; }
  38. };
  39. template <>
  40. struct _LIBCPP_TEMPLATE_VIS hash<unsigned char> : public std::__unary_function<unsigned char, size_t> {
  41. _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned char __c) const _NOEXCEPT { return __c; }
  42. };
  43. template <>
  44. struct _LIBCPP_TEMPLATE_VIS hash<short> : public std::__unary_function<short, size_t> {
  45. _LIBCPP_HIDE_FROM_ABI size_t operator()(short __c) const _NOEXCEPT { return __c; }
  46. };
  47. template <>
  48. struct _LIBCPP_TEMPLATE_VIS hash<unsigned short> : public std::__unary_function<unsigned short, size_t> {
  49. _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned short __c) const _NOEXCEPT { return __c; }
  50. };
  51. template <>
  52. struct _LIBCPP_TEMPLATE_VIS hash<int> : public std::__unary_function<int, size_t> {
  53. _LIBCPP_HIDE_FROM_ABI size_t operator()(int __c) const _NOEXCEPT { return __c; }
  54. };
  55. template <>
  56. struct _LIBCPP_TEMPLATE_VIS hash<unsigned int> : public std::__unary_function<unsigned int, size_t> {
  57. _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned int __c) const _NOEXCEPT { return __c; }
  58. };
  59. template <>
  60. struct _LIBCPP_TEMPLATE_VIS hash<long> : public std::__unary_function<long, size_t> {
  61. _LIBCPP_HIDE_FROM_ABI size_t operator()(long __c) const _NOEXCEPT { return __c; }
  62. };
  63. template <>
  64. struct _LIBCPP_TEMPLATE_VIS hash<unsigned long> : public std::__unary_function<unsigned long, size_t> {
  65. _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned long __c) const _NOEXCEPT { return __c; }
  66. };
  67. } // namespace __gnu_cxx
  68. #endif // _LIBCPP_EXT_HASH