// 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 # include # include namespace boost { namespace python { namespace detail { struct decorated_type_info : totally_ordered { 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 inline decorated_type_info decorated_type_id(boost::type* = 0) { return decorated_type_info( type_id() , decorated_type_info::decoration( (is_const::value || indirect_traits::is_reference_to_const::value ? decorated_type_info::const_ : 0) | (is_volatile::value || indirect_traits::is_reference_to_volatile::value ? decorated_type_info::volatile_ : 0) | (is_reference::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