__hash revision 278724
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