1 // -*- C++ -*- 2 //===------------------------- hash_set ------------------------------------===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is dual licensed under the MIT and the University of Illinois Open 7 // Source Licenses. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #ifndef _LIBCPP_EXT_HASH 12 #define _LIBCPP_EXT_HASH 13 14 #pragma GCC system_header 15 16 #include <string> 17 #include <cstring> 18 19 namespace __gnu_cxx { 20 using namespace std; 21 22 template <typename _Tp> struct _LIBCPP_TYPE_VIS_ONLY hash { }; 23 24 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<const char*> 25 : public unary_function<const char*, size_t> 26 { 27 _LIBCPP_INLINE_VISIBILITY 28 size_t operator()(const char *__c) const _NOEXCEPT 29 { 30 return __do_string_hash(__c, __c + strlen(__c)); 31 } 32 }; 33 34 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<char *> 35 : public unary_function<char*, size_t> 36 { 37 _LIBCPP_INLINE_VISIBILITY 38 size_t operator()(char *__c) const _NOEXCEPT 39 { 40 return __do_string_hash<const char *>(__c, __c + strlen(__c)); 41 } 42 }; 43 44 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<char> 45 : public unary_function<char, size_t> 46 { 47 _LIBCPP_INLINE_VISIBILITY 48 size_t operator()(char __c) const _NOEXCEPT 49 { 50 return __c; 51 } 52 }; 53 54 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<signed char> 55 : public unary_function<signed char, size_t> 56 { 57 _LIBCPP_INLINE_VISIBILITY 58 size_t operator()(signed char __c) const _NOEXCEPT 59 { 60 return __c; 61 } 62 }; 63 64 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned char> 65 : public unary_function<unsigned char, size_t> 66 { 67 _LIBCPP_INLINE_VISIBILITY 68 size_t operator()(unsigned char __c) const _NOEXCEPT 69 { 70 return __c; 71 } 72 }; 73 74 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<short> 75 : public unary_function<short, size_t> 76 { 77 _LIBCPP_INLINE_VISIBILITY 78 size_t operator()(short __c) const _NOEXCEPT 79 { 80 return __c; 81 } 82 }; 83 84 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned short> 85 : public unary_function<unsigned short, size_t> 86 { 87 _LIBCPP_INLINE_VISIBILITY 88 size_t operator()(unsigned short __c) const _NOEXCEPT 89 { 90 return __c; 91 } 92 }; 93 94 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<int> 95 : public unary_function<int, size_t> 96 { 97 _LIBCPP_INLINE_VISIBILITY 98 size_t operator()(int __c) const _NOEXCEPT 99 { 100 return __c; 101 } 102 }; 103 104 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned int> 105 : public unary_function<unsigned int, size_t> 106 { 107 _LIBCPP_INLINE_VISIBILITY 108 size_t operator()(unsigned int __c) const _NOEXCEPT 109 { 110 return __c; 111 } 112 }; 113 114 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<long> 115 : public unary_function<long, size_t> 116 { 117 _LIBCPP_INLINE_VISIBILITY 118 size_t operator()(long __c) const _NOEXCEPT 119 { 120 return __c; 121 } 122 }; 123 124 template <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned long> 125 : public unary_function<unsigned long, size_t> 126 { 127 _LIBCPP_INLINE_VISIBILITY 128 size_t operator()(unsigned long __c) const _NOEXCEPT 129 { 130 return __c; 131 } 132 }; 133 } 134 135 #endif // _LIBCPP_EXT_HASH 136