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