86 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_EXT_HASH11#define _LIBCPP_EXT_HASH12 13#pragma GCC system_header14 15#include <__config>16#include <cstring>17#include <stddef.h>18#include <string>19 20namespace __gnu_cxx {21 22template <typename _Tp>23struct hash {};24 25template <>26struct hash<const char*> : public std::__unary_function<const char*, size_t> {27 _LIBCPP_HIDE_FROM_ABI size_t operator()(const char* __c) const _NOEXCEPT {28 return std::__do_string_hash(__c, __c + strlen(__c));29 }30};31 32template <>33struct hash<char*> : public std::__unary_function<char*, size_t> {34 _LIBCPP_HIDE_FROM_ABI size_t operator()(char* __c) const _NOEXCEPT {35 return std::__do_string_hash<const char*>(__c, __c + strlen(__c));36 }37};38 39template <>40struct hash<char> : public std::__unary_function<char, size_t> {41 _LIBCPP_HIDE_FROM_ABI size_t operator()(char __c) const _NOEXCEPT { return __c; }42};43 44template <>45struct hash<signed char> : public std::__unary_function<signed char, size_t> {46 _LIBCPP_HIDE_FROM_ABI size_t operator()(signed char __c) const _NOEXCEPT { return __c; }47};48 49template <>50struct hash<unsigned char> : public std::__unary_function<unsigned char, size_t> {51 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned char __c) const _NOEXCEPT { return __c; }52};53 54template <>55struct hash<short> : public std::__unary_function<short, size_t> {56 _LIBCPP_HIDE_FROM_ABI size_t operator()(short __c) const _NOEXCEPT { return __c; }57};58 59template <>60struct hash<unsigned short> : public std::__unary_function<unsigned short, size_t> {61 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned short __c) const _NOEXCEPT { return __c; }62};63 64template <>65struct hash<int> : public std::__unary_function<int, size_t> {66 _LIBCPP_HIDE_FROM_ABI size_t operator()(int __c) const _NOEXCEPT { return __c; }67};68 69template <>70struct hash<unsigned int> : public std::__unary_function<unsigned int, size_t> {71 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned int __c) const _NOEXCEPT { return __c; }72};73 74template <>75struct hash<long> : public std::__unary_function<long, size_t> {76 _LIBCPP_HIDE_FROM_ABI size_t operator()(long __c) const _NOEXCEPT { return __c; }77};78 79template <>80struct hash<unsigned long> : public std::__unary_function<unsigned long, size_t> {81 _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned long __c) const _NOEXCEPT { return __c; }82};83} // namespace __gnu_cxx84 85#endif // _LIBCPP_EXT_HASH86