]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/libc++/include/ext/__hash
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / libc++ / include / ext / __hash
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
19 namespace __gnu_cxx {
20 using namespace std;
21
22 template <typename _Tp> struct _LIBCPP_TYPE_VIS_ONLY hash { };
23
24 template <> 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
34 template <> 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
44 template <> 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
54 template <> 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
64 template <> 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
74 template <> 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
84 template <> 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
94 template <> 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
104 template <> 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
114 template <> 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
124 template <> 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