llvm-project/libcxx/include/typeindex

85 lines
2.1 KiB
Plaintext
Raw Normal View History

2010-05-12 03:42:16 +08:00
// -*- C++ -*-
//===-------------------------- typeindex ---------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef _LIBCPP_TYPEINDEX
#define _LIBCPP_TYPEINDEX
/*
typeindex synopsis
namespace std
{
class type_index
{
public:
type_index(const type_info& rhs);
bool operator==(const type_index& rhs) const;
bool operator!=(const type_index& rhs) const;
bool operator< (const type_index& rhs) const;
bool operator<=(const type_index& rhs) const;
bool operator> (const type_index& rhs) const;
bool operator>=(const type_index& rhs) const;
size_t hash_code() const;
const char* name() const;
};
template <>
struct hash<type_index>
: public unary_function<type_index, size_t>
{
size_t operator()(type_index index) const;
};
} // std
*/
#include <__config>
#include <typeinfo>
#include <__functional_base>
#pragma GCC system_header
_LIBCPP_BEGIN_NAMESPACE_STD
class type_index
{
const type_info* __t_;
public:
type_index(const type_info& __y) : __t_(&__y) {}
bool operator==(const type_index& __y) const {return *__t_ == *__y.__t_;}
bool operator!=(const type_index& __y) const {return *__t_ != *__y.__t_;}
bool operator< (const type_index& __y) const {return __t_->before(*__y.__t_);}
bool operator<=(const type_index& __y) const {return !__y.__t_->before(*__t_);}
bool operator> (const type_index& __y) const {return __y.__t_->before(*__t_);}
bool operator>=(const type_index& __y) const {return !__t_->before(*__y.__t_);}
size_t hash_code() const {return __t_->hash_code();}
const char* name() const {return __t_->name();}
};
template <class _Tp> struct hash;
template <>
struct hash<type_index>
: public unary_function<type_index, size_t>
{
size_t operator()(type_index __index) const {return __index.hash_code();}
};
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_TYPEINDEX