Home | History | Annotate | Download | only in backward
      1 // 'struct hash' from SGI -*- C++ -*-
      2 
      3 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
      4 // Free Software Foundation, Inc.
      5 //
      6 // This file is part of the GNU ISO C++ Library.  This library is free
      7 // software; you can redistribute it and/or modify it under the
      8 // terms of the GNU General Public License as published by the
      9 // Free Software Foundation; either version 3, or (at your option)
     10 // any later version.
     11 
     12 // This library is distributed in the hope that it will be useful,
     13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 // GNU General Public License for more details.
     16 
     17 // Under Section 7 of GPL version 3, you are granted additional
     18 // permissions described in the GCC Runtime Library Exception, version
     19 // 3.1, as published by the Free Software Foundation.
     20 
     21 // You should have received a copy of the GNU General Public License and
     22 // a copy of the GCC Runtime Library Exception along with this program;
     23 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     24 // <http://www.gnu.org/licenses/>.
     25 
     26 /*
     27  * Copyright (c) 1996-1998
     28  * Silicon Graphics Computer Systems, Inc.
     29  *
     30  * Permission to use, copy, modify, distribute and sell this software
     31  * and its documentation for any purpose is hereby granted without fee,
     32  * provided that the above copyright notice appear in all copies and
     33  * that both that copyright notice and this permission notice appear
     34  * in supporting documentation.  Silicon Graphics makes no
     35  * representations about the suitability of this software for any
     36  * purpose.  It is provided "as is" without express or implied warranty.
     37  *
     38  *
     39  * Copyright (c) 1994
     40  * Hewlett-Packard Company
     41  *
     42  * Permission to use, copy, modify, distribute and sell this software
     43  * and its documentation for any purpose is hereby granted without fee,
     44  * provided that the above copyright notice appear in all copies and
     45  * that both that copyright notice and this permission notice appear
     46  * in supporting documentation.  Hewlett-Packard Company makes no
     47  * representations about the suitability of this software for any
     48  * purpose.  It is provided "as is" without express or implied warranty.
     49  *
     50  */
     51 
     52 /** @file backward/hash_fun.h
     53  *  This file is a GNU extension to the Standard C++ Library (possibly
     54  *  containing extensions from the HP/SGI STL subset).
     55  */
     56 
     57 #ifndef _BACKWARD_HASH_FUN_H
     58 #define _BACKWARD_HASH_FUN_H 1
     59 
     60 #include <bits/c++config.h>
     61 
     62 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
     63 {
     64 _GLIBCXX_BEGIN_NAMESPACE_VERSION
     65 
     66   using std::size_t;
     67 
     68   template<class _Key>
     69     struct hash { };
     70 
     71   inline size_t
     72   __stl_hash_string(const char* __s)
     73   {
     74     unsigned long __h = 0;
     75     for ( ; *__s; ++__s)
     76       __h = 5 * __h + *__s;
     77     return size_t(__h);
     78   }
     79 
     80   template<>
     81     struct hash<char*>
     82     {
     83       size_t
     84       operator()(const char* __s) const
     85       { return __stl_hash_string(__s); }
     86     };
     87 
     88   template<>
     89     struct hash<const char*>
     90     {
     91       size_t
     92       operator()(const char* __s) const
     93       { return __stl_hash_string(__s); }
     94     };
     95 
     96   template<>
     97     struct hash<char>
     98     {
     99       size_t
    100       operator()(char __x) const
    101       { return __x; }
    102     };
    103 
    104   template<>
    105     struct hash<unsigned char>
    106     {
    107       size_t
    108       operator()(unsigned char __x) const
    109       { return __x; }
    110     };
    111 
    112   template<>
    113     struct hash<signed char>
    114     {
    115       size_t
    116       operator()(unsigned char __x) const
    117       { return __x; }
    118     };
    119 
    120   template<>
    121     struct hash<short>
    122     {
    123       size_t
    124       operator()(short __x) const
    125       { return __x; }
    126     };
    127 
    128   template<>
    129     struct hash<unsigned short>
    130     {
    131       size_t
    132       operator()(unsigned short __x) const
    133       { return __x; }
    134     };
    135 
    136   template<>
    137     struct hash<int>
    138     {
    139       size_t
    140       operator()(int __x) const
    141       { return __x; }
    142     };
    143 
    144   template<>
    145     struct hash<unsigned int>
    146     {
    147       size_t
    148       operator()(unsigned int __x) const
    149       { return __x; }
    150     };
    151 
    152   template<>
    153     struct hash<long>
    154     {
    155       size_t
    156       operator()(long __x) const
    157       { return __x; }
    158     };
    159 
    160   template<>
    161     struct hash<unsigned long>
    162     {
    163       size_t
    164       operator()(unsigned long __x) const
    165       { return __x; }
    166     };
    167 
    168 _GLIBCXX_END_NAMESPACE_VERSION
    169 } // namespace
    170 
    171 #endif
    172