/* * Copyright (c) 1997-1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */ #ifndef __SGI_STL_STRING_HASH_H # define __SGI_STL_STRING_HASH_H #ifndef __SGI_STL_HASH_FUN_H # include #endif __STL_BEGIN_NAMESPACE template __STL_INLINE_LOOP size_t __stl_string_hash(const basic_string<_CharT,_Traits,_Alloc>& __s) { unsigned long __h = 0; typedef typename basic_string<_CharT,_Traits,_Alloc>::const_pointer const_ptr; size_t __len = __s.size(); const _CharT* __data = __s.data(); for ( size_t __i = 0; __i < __len; ++__i) __h = 5*__h + __data[__i]; return size_t(__h); } #ifdef __STL_CLASS_PARTIAL_SPECIALIZATION template struct hash > { size_t operator()(const basic_string<_CharT,_Traits,_Alloc>& __s) const { return __stl_string_hash(__s); } }; #else __STL_TEMPLATE_NULL struct __STL_CLASS_DECLSPEC hash { size_t operator()(const string& __s) const { return __stl_string_hash(__s); } }; # if defined (__STL_HAS_WCHAR_T) __STL_TEMPLATE_NULL struct __STL_CLASS_DECLSPEC hash { size_t operator()(const wstring& __s) const { return __stl_string_hash(__s); } }; # endif #endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */ __STL_END_NAMESPACE #endif