diff options
Diffstat (limited to 'contrib/libc++/include/typeindex')
-rw-r--r-- | contrib/libc++/include/typeindex | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/contrib/libc++/include/typeindex b/contrib/libc++/include/typeindex new file mode 100644 index 0000000..398b528 --- /dev/null +++ b/contrib/libc++/include/typeindex @@ -0,0 +1,103 @@ +// -*- C++ -*- +//===-------------------------- typeindex ---------------------------------===// +// +// 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_TYPEINDEX +#define _LIBCPP_TYPEINDEX + +/* + + typeindex synopsis + +namespace std +{ + +class type_index +{ +public: + type_index(const type_info& rhs) noexcept; + + bool operator==(const type_index& rhs) const noexcept; + bool operator!=(const type_index& rhs) const noexcept; + bool operator< (const type_index& rhs) const noexcept; + bool operator<=(const type_index& rhs) const noexcept; + bool operator> (const type_index& rhs) const noexcept; + bool operator>=(const type_index& rhs) const noexcept; + + size_t hash_code() const noexcept; + const char* name() const noexcept; +}; + +template <> +struct hash<type_index> + : public unary_function<type_index, size_t> +{ + size_t operator()(type_index index) const noexcept; +}; + +} // std + +*/ + +#include <__config> +#include <typeinfo> +#include <__functional_base> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +#pragma GCC system_header +#endif + +_LIBCPP_BEGIN_NAMESPACE_STD + +class _LIBCPP_VISIBLE type_index +{ + const type_info* __t_; +public: + _LIBCPP_INLINE_VISIBILITY + type_index(const type_info& __y) _NOEXCEPT : __t_(&__y) {} + + _LIBCPP_INLINE_VISIBILITY + bool operator==(const type_index& __y) const _NOEXCEPT + {return *__t_ == *__y.__t_;} + _LIBCPP_INLINE_VISIBILITY + bool operator!=(const type_index& __y) const _NOEXCEPT + {return *__t_ != *__y.__t_;} + _LIBCPP_INLINE_VISIBILITY + bool operator< (const type_index& __y) const _NOEXCEPT + {return __t_->before(*__y.__t_);} + _LIBCPP_INLINE_VISIBILITY + bool operator<=(const type_index& __y) const _NOEXCEPT + {return !__y.__t_->before(*__t_);} + _LIBCPP_INLINE_VISIBILITY + bool operator> (const type_index& __y) const _NOEXCEPT + {return __y.__t_->before(*__t_);} + _LIBCPP_INLINE_VISIBILITY + bool operator>=(const type_index& __y) const _NOEXCEPT + {return !__t_->before(*__y.__t_);} + + _LIBCPP_INLINE_VISIBILITY + size_t hash_code() const _NOEXCEPT {return __t_->hash_code();} + _LIBCPP_INLINE_VISIBILITY + const char* name() const _NOEXCEPT {return __t_->name();} +}; + +template <class _Tp> struct _LIBCPP_VISIBLE hash; + +template <> +struct _LIBCPP_VISIBLE hash<type_index> + : public unary_function<type_index, size_t> +{ + _LIBCPP_INLINE_VISIBILITY + size_t operator()(type_index __index) const _NOEXCEPT + {return __index.hash_code();} +}; + +_LIBCPP_END_NAMESPACE_STD + +#endif // _LIBCPP_TYPEINDEX |