blob: 5675d54055e02486e26ce4f5fa9944f123bfa8da [file] [log] [blame]
Sean Huntaffd9e52011-07-29 23:31:56 +00001// -*- 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
Peter Collingbourne9d3d0322014-03-06 04:11:10 +000022template <typename _Tp> struct _LIBCPP_TYPE_VIS_ONLY hash { };
Sean Huntaffd9e52011-07-29 23:31:56 +000023
Howard Hinnant0f678bd2013-08-12 18:38:34 +000024template <> struct _LIBCPP_TYPE_VIS_ONLY hash<const char*>
Sean Huntaffd9e52011-07-29 23:31:56 +000025 : 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
Howard Hinnant0f678bd2013-08-12 18:38:34 +000034template <> struct _LIBCPP_TYPE_VIS_ONLY hash<char *>
Sean Huntaffd9e52011-07-29 23:31:56 +000035 : 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};
Peter Collingbourne9d3d0322014-03-06 04:11:10 +000043
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};
Sean Huntaffd9e52011-07-29 23:31:56 +0000133}
134
Howard Hinnant0919dba2012-11-06 21:55:44 +0000135#endif // _LIBCPP_EXT_HASH