177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997-1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_STRING_HASH_H
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_STRING_HASH_H
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_HASH_FUN_H
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_hash_fun.h>
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_STRING_H
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_string.h>
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP size_t
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__stl_string_hash(const basic_string<_CharT,_Traits,_Alloc>& __s) {
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  unsigned long __h = 0;
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t __len = __s.size();
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const _CharT* __data = __s.data();
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( size_t __i = 0; __i < __len; ++__i)
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __h = /* 5 *__h */(__h << 2) + __h + __data[__i];
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return size_t(__h);
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && \
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x560))
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct hash<basic_string<_CharT,_Traits,_Alloc> > {
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t operator()(const basic_string<_CharT,_Traits,_Alloc>& __s) const
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __stl_string_hash(__s); }
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _STLP_CLASS_DECLSPEC hash<string> {
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t operator()(const string& __s) const
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __stl_string_hash(__s); }
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_HAS_WCHAR_T)
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _STLP_CLASS_DECLSPEC hash<wstring> {
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t operator()(const wstring& __s) const
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return __stl_string_hash(__s); }
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
72