1227825Stheraven// -*- C++ -*-
2227825Stheraven//===------------------------- hash_set ------------------------------------===//
3227825Stheraven//
4227825Stheraven//                     The LLVM Compiler Infrastructure
5227825Stheraven//
6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open
7227825Stheraven// Source Licenses. See LICENSE.TXT for details.
8227825Stheraven//
9227825Stheraven//===----------------------------------------------------------------------===//
10227825Stheraven
11227825Stheraven#ifndef _LIBCPP_EXT_HASH
12227825Stheraven#define _LIBCPP_EXT_HASH
13227825Stheraven
14227825Stheraven#pragma GCC system_header
15227825Stheraven
16227825Stheraven#include <string>
17227825Stheraven#include <cstring>
18227825Stheraven
19227825Stheravennamespace __gnu_cxx {
20227825Stheravenusing namespace std;
21227825Stheraven
22278724Sdimtemplate <typename _Tp> struct _LIBCPP_TYPE_VIS_ONLY hash { };
23227825Stheraven
24262801Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<const char*>
25227825Stheraven    : public unary_function<const char*, size_t>
26227825Stheraven{
27227825Stheraven    _LIBCPP_INLINE_VISIBILITY
28227825Stheraven    size_t operator()(const char *__c) const _NOEXCEPT
29227825Stheraven    {
30227825Stheraven        return __do_string_hash(__c, __c + strlen(__c));
31227825Stheraven    }
32227825Stheraven};
33227825Stheraven
34262801Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<char *>
35227825Stheraven    : public unary_function<char*, size_t>
36227825Stheraven{
37227825Stheraven    _LIBCPP_INLINE_VISIBILITY
38227825Stheraven    size_t operator()(char *__c) const _NOEXCEPT
39227825Stheraven    {
40227825Stheraven        return __do_string_hash<const char *>(__c, __c + strlen(__c));
41227825Stheraven    }
42227825Stheraven};
43278724Sdim
44278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<char>
45278724Sdim    : public unary_function<char, size_t>
46278724Sdim{
47278724Sdim    _LIBCPP_INLINE_VISIBILITY
48278724Sdim    size_t operator()(char __c) const _NOEXCEPT
49278724Sdim    {
50278724Sdim        return __c;
51278724Sdim    }
52278724Sdim};
53278724Sdim
54278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<signed char>
55278724Sdim    : public unary_function<signed char, size_t>
56278724Sdim{
57278724Sdim    _LIBCPP_INLINE_VISIBILITY
58278724Sdim    size_t operator()(signed char __c) const _NOEXCEPT
59278724Sdim    {
60278724Sdim        return __c;
61278724Sdim    }
62278724Sdim};
63278724Sdim
64278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned char>
65278724Sdim    : public unary_function<unsigned char, size_t>
66278724Sdim{
67278724Sdim    _LIBCPP_INLINE_VISIBILITY
68278724Sdim    size_t operator()(unsigned char __c) const _NOEXCEPT
69278724Sdim    {
70278724Sdim        return __c;
71278724Sdim    }
72278724Sdim};
73278724Sdim
74278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<short>
75278724Sdim    : public unary_function<short, size_t>
76278724Sdim{
77278724Sdim    _LIBCPP_INLINE_VISIBILITY
78278724Sdim    size_t operator()(short __c) const _NOEXCEPT
79278724Sdim    {
80278724Sdim        return __c;
81278724Sdim    }
82278724Sdim};
83278724Sdim
84278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned short>
85278724Sdim    : public unary_function<unsigned short, size_t>
86278724Sdim{
87278724Sdim    _LIBCPP_INLINE_VISIBILITY
88278724Sdim    size_t operator()(unsigned short __c) const _NOEXCEPT
89278724Sdim    {
90278724Sdim        return __c;
91278724Sdim    }
92278724Sdim};
93278724Sdim
94278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<int>
95278724Sdim    : public unary_function<int, size_t>
96278724Sdim{
97278724Sdim    _LIBCPP_INLINE_VISIBILITY
98278724Sdim    size_t operator()(int __c) const _NOEXCEPT
99278724Sdim    {
100278724Sdim        return __c;
101278724Sdim    }
102278724Sdim};
103278724Sdim
104278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned int>
105278724Sdim    : public unary_function<unsigned int, size_t>
106278724Sdim{
107278724Sdim    _LIBCPP_INLINE_VISIBILITY
108278724Sdim    size_t operator()(unsigned int __c) const _NOEXCEPT
109278724Sdim    {
110278724Sdim        return __c;
111278724Sdim    }
112278724Sdim};
113278724Sdim
114278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<long>
115278724Sdim    : public unary_function<long, size_t>
116278724Sdim{
117278724Sdim    _LIBCPP_INLINE_VISIBILITY
118278724Sdim    size_t operator()(long __c) const _NOEXCEPT
119278724Sdim    {
120278724Sdim        return __c;
121278724Sdim    }
122278724Sdim};
123278724Sdim
124278724Sdimtemplate <> struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned long>
125278724Sdim    : public unary_function<unsigned long, size_t>
126278724Sdim{
127278724Sdim    _LIBCPP_INLINE_VISIBILITY
128278724Sdim    size_t operator()(unsigned long __c) const _NOEXCEPT
129278724Sdim    {
130278724Sdim        return __c;
131278724Sdim    }
132278724Sdim};
133227825Stheraven}
134227825Stheraven
135242945Stheraven#endif  // _LIBCPP_EXT_HASH
136