1// -*- C++ -*-
2//===------------------------- hash_set ------------------------------------===//
3//
4//                     The LLVM Compiler Infrastructure
5//
6// This file is dual licensed under the MIT and the University of Illinois Open
7// Source Licenses. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
11#ifndef _LIBCPP_EXT_HASH
12#define _LIBCPP_EXT_HASH
13
14#pragma GCC system_header
15
16#include <string>
17#include <cstring>
18
19namespace __gnu_cxx {
20using namespace std;
21
22template <typename _Tp> struct _LIBCPP_TYPE_VIS_ONLY hash { };
23
24template <> struct _LIBCPP_TYPE_VIS_ONLY hash<const char*>
25    : public unary_function<const char*, size_t>
26{
27    _LIBCPP_INLINE_VISIBILITY
28    size_t operator()(const char *__c) const _NOEXCEPT
29    {
30        return __do_string_hash(__c, __c + strlen(__c));
31    }
32};
33
34template <> struct _LIBCPP_TYPE_VIS_ONLY hash<char *>
35    : public unary_function<char*, size_t>
36{
37    _LIBCPP_INLINE_VISIBILITY
38    size_t operator()(char *__c) const _NOEXCEPT
39    {
40        return __do_string_hash<const char *>(__c, __c + strlen(__c));
41    }
42};
43
44template <> struct _LIBCPP_TYPE_VIS_ONLY hash<char>
45    : public 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_TYPE_VIS_ONLY hash<signed char>
55    : public 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_TYPE_VIS_ONLY hash<unsigned char>
65    : public 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_TYPE_VIS_ONLY hash<short>
75    : public 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_TYPE_VIS_ONLY hash<unsigned short>
85    : public 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_TYPE_VIS_ONLY hash<int>
95    : public 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_TYPE_VIS_ONLY hash<unsigned int>
105    : public 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_TYPE_VIS_ONLY hash<long>
115    : public 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_TYPE_VIS_ONLY hash<unsigned long>
125    : public 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}
134
135#endif  // _LIBCPP_EXT_HASH
136