111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997-1999 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_STRING_HASH_H 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_STRING_HASH_H 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_HASH_FUN_H 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_hash_fun.h> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_STRING_H 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_string.h> 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _CharT, class _Traits, class _Alloc> 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_INLINE_LOOP size_t 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__stl_string_hash(const basic_string<_CharT,_Traits,_Alloc>& __s) { 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long __h = 0; 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __len = __s.size(); 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _CharT* __data = __s.data(); 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for ( size_t __i = 0; __i < __len; ++__i) 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __h = /* 5 *__h */(__h << 2) + __h + __data[__i]; 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return size_t(__h); 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && \ 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x560)) 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _CharT, class _Traits, class _Alloc> 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct hash<basic_string<_CharT,_Traits,_Alloc> > { 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t operator()(const basic_string<_CharT,_Traits,_Alloc>& __s) const 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return __stl_string_hash(__s); } 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _STLP_CLASS_DECLSPEC hash<string> { 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t operator()(const string& __s) const 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return __stl_string_hash(__s); } 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_HAS_WCHAR_T) 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _STLP_CLASS_DECLSPEC hash<wstring> { 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t operator()(const wstring& __s) const 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return __stl_string_hash(__s); } 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */ 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 72