77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								// Copyright David Abrahams 2002.
							 | 
						||
| 
								 | 
							
								// Distributed under the Boost Software License, Version 1.0. (See
							 | 
						||
| 
								 | 
							
								// accompanying file LICENSE_1_0.txt or copy at
							 | 
						||
| 
								 | 
							
								// http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								#ifndef DECORATED_TYPE_ID_DWA2002517_HPP
							 | 
						||
| 
								 | 
							
								# define DECORATED_TYPE_ID_DWA2002517_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# include <boost/python/type_id.hpp>
							 | 
						||
| 
								 | 
							
								# include <boost/python/detail/indirect_traits.hpp>
							 | 
						||
| 
								 | 
							
								# include <boost/type_traits/cv_traits.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost { namespace python { namespace detail { 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct decorated_type_info : totally_ordered<decorated_type_info>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    enum decoration { const_ = 0x1, volatile_ = 0x2, reference = 0x4 };
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    decorated_type_info(type_info, decoration = decoration());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    inline bool operator<(decorated_type_info const& rhs) const;
							 | 
						||
| 
								 | 
							
								    inline bool operator==(decorated_type_info const& rhs) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    friend BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    operator type_info const&() const;
							 | 
						||
| 
								 | 
							
								 private: // type
							 | 
						||
| 
								 | 
							
								    typedef type_info base_id_t;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								 private: // data members
							 | 
						||
| 
								 | 
							
								    decoration m_decoration;
							 | 
						||
| 
								 | 
							
								    base_id_t m_base_type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T>
							 | 
						||
| 
								 | 
							
								inline decorated_type_info decorated_type_id(boost::type<T>* = 0)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return decorated_type_info(
							 | 
						||
| 
								 | 
							
								        type_id<T>()
							 | 
						||
| 
								 | 
							
								        , decorated_type_info::decoration(
							 | 
						||
| 
								 | 
							
								            (is_const<T>::value || indirect_traits::is_reference_to_const<T>::value
							 | 
						||
| 
								 | 
							
								             ? decorated_type_info::const_ : 0)
							 | 
						||
| 
								 | 
							
								            | (is_volatile<T>::value || indirect_traits::is_reference_to_volatile<T>::value
							 | 
						||
| 
								 | 
							
								               ? decorated_type_info::volatile_ : 0)
							 | 
						||
| 
								 | 
							
								            | (is_reference<T>::value ? decorated_type_info::reference : 0)
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline decorated_type_info::decorated_type_info(type_info base_t, decoration decoration)
							 | 
						||
| 
								 | 
							
								    : m_decoration(decoration)
							 | 
						||
| 
								 | 
							
								    , m_base_type(base_t)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline bool decorated_type_info::operator<(decorated_type_info const& rhs) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return m_decoration < rhs.m_decoration
							 | 
						||
| 
								 | 
							
								      || (m_decoration == rhs.m_decoration
							 | 
						||
| 
								 | 
							
								          && m_base_type < rhs.m_base_type);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline bool decorated_type_info::operator==(decorated_type_info const& rhs) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return m_decoration == rhs.m_decoration && m_base_type == rhs.m_base_type;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline decorated_type_info::operator type_info const&() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return m_base_type;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}}} // namespace boost::python::detail
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // DECORATED_TYPE_ID_DWA2002517_HPP
							 |