// -*- C++ -*-
//===------------------------- hash_set ------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP_EXT_HASH
#define _LIBCPP_EXT_HASH

#pragma GCC system_header

#include <string>
#include <cstring>

namespace __gnu_cxx {
using namespace std;

template <typename T> struct _LIBCPP_TYPE_VIS hash : public std::hash<T>
    { };

template <> struct _LIBCPP_TYPE_VIS hash<const char*>
    : public unary_function<const char*, size_t>
{
    _LIBCPP_INLINE_VISIBILITY
    size_t operator()(const char *__c) const _NOEXCEPT
    {
        return __do_string_hash(__c, __c + strlen(__c));
    }
};

template <> struct _LIBCPP_TYPE_VIS hash<char *>
    : public unary_function<char*, size_t>
{
    _LIBCPP_INLINE_VISIBILITY
    size_t operator()(char *__c) const _NOEXCEPT
    {
        return __do_string_hash<const char *>(__c, __c + strlen(__c));
    }
};
}

#endif  // _LIBCPP_EXT_HASH
