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