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