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> 23struct _LIBCPP_TEMPLATE_VIS hash {}; 24 25template <> 26struct _LIBCPP_TEMPLATE_VIS hash<const char*> : public std::__unary_function<const char*, size_t> { 27 _LIBCPP_HIDE_FROM_ABI size_t operator()(const char* __c) const _NOEXCEPT { 28 return std::__do_string_hash(__c, __c + strlen(__c)); 29 } 30}; 31 32template <> 33struct _LIBCPP_TEMPLATE_VIS hash<char*> : public std::__unary_function<char*, size_t> { 34 _LIBCPP_HIDE_FROM_ABI size_t operator()(char* __c) const _NOEXCEPT { 35 return std::__do_string_hash<const char*>(__c, __c + strlen(__c)); 36 } 37}; 38 39template <> 40struct _LIBCPP_TEMPLATE_VIS hash<char> : public std::__unary_function<char, size_t> { 41 _LIBCPP_HIDE_FROM_ABI size_t operator()(char __c) const _NOEXCEPT { return __c; } 42}; 43 44template <> 45struct _LIBCPP_TEMPLATE_VIS hash<signed char> : public std::__unary_function<signed char, size_t> { 46 _LIBCPP_HIDE_FROM_ABI size_t operator()(signed char __c) const _NOEXCEPT { return __c; } 47}; 48 49template <> 50struct _LIBCPP_TEMPLATE_VIS hash<unsigned char> : public std::__unary_function<unsigned char, size_t> { 51 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned char __c) const _NOEXCEPT { return __c; } 52}; 53 54template <> 55struct _LIBCPP_TEMPLATE_VIS hash<short> : public std::__unary_function<short, size_t> { 56 _LIBCPP_HIDE_FROM_ABI size_t operator()(short __c) const _NOEXCEPT { return __c; } 57}; 58 59template <> 60struct _LIBCPP_TEMPLATE_VIS hash<unsigned short> : public std::__unary_function<unsigned short, size_t> { 61 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned short __c) const _NOEXCEPT { return __c; } 62}; 63 64template <> 65struct _LIBCPP_TEMPLATE_VIS hash<int> : public std::__unary_function<int, size_t> { 66 _LIBCPP_HIDE_FROM_ABI size_t operator()(int __c) const _NOEXCEPT { return __c; } 67}; 68 69template <> 70struct _LIBCPP_TEMPLATE_VIS hash<unsigned int> : public std::__unary_function<unsigned int, size_t> { 71 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned int __c) const _NOEXCEPT { return __c; } 72}; 73 74template <> 75struct _LIBCPP_TEMPLATE_VIS hash<long> : public std::__unary_function<long, size_t> { 76 _LIBCPP_HIDE_FROM_ABI size_t operator()(long __c) const _NOEXCEPT { return __c; } 77}; 78 79template <> 80struct _LIBCPP_TEMPLATE_VIS hash<unsigned long> : public std::__unary_function<unsigned long, size_t> { 81 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned long __c) const _NOEXCEPT { return __c; } 82}; 83} // namespace __gnu_cxx 84 85#endif // _LIBCPP_EXT_HASH 86