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