Home | History | Annotate | Download | only in ext
      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
    136