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 10#ifndef _LIBCPP_EXT_HASH 11#define _LIBCPP_EXT_HASH 12 13# pragma GCC system_header 14 15#include <__config> 16#include <cstring> 17#include <stddef.h> 18#include <string> 19 20namespace __gnu_cxx { 21 22template <typename _Tp> struct _LIBCPP_TEMPLATE_VIS hash { }; 23 24template <> struct _LIBCPP_TEMPLATE_VIS hash<const char*> 25 : public std::__unary_function<const char*, size_t> 26{ 27 _LIBCPP_INLINE_VISIBILITY 28 size_t operator()(const char *__c) const _NOEXCEPT 29 { 30 return std::__do_string_hash(__c, __c + strlen(__c)); 31 } 32}; 33 34template <> struct _LIBCPP_TEMPLATE_VIS hash<char *> 35 : public std::__unary_function<char*, size_t> 36{ 37 _LIBCPP_INLINE_VISIBILITY 38 size_t operator()(char *__c) const _NOEXCEPT 39 { 40 return std::__do_string_hash<const char *>(__c, __c + strlen(__c)); 41 } 42}; 43 44template <> struct _LIBCPP_TEMPLATE_VIS hash<char> 45 : public std::__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 54template <> struct _LIBCPP_TEMPLATE_VIS hash<signed char> 55 : public std::__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 64template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned char> 65 : public std::__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 74template <> struct _LIBCPP_TEMPLATE_VIS hash<short> 75 : public std::__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 84template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned short> 85 : public std::__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 94template <> struct _LIBCPP_TEMPLATE_VIS hash<int> 95 : public std::__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 104template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned int> 105 : public std::__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 114template <> struct _LIBCPP_TEMPLATE_VIS hash<long> 115 : public std::__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 124template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned long> 125 : public std::__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} // namespace __gnu_cxx 134 135#endif // _LIBCPP_EXT_HASH 136