/usr/include/boost/python/converter
Edit: /usr/include/boost/python/converter/registered.hpp (2964B)
// Copyright David Abrahams 2002.
// Copyright Stefan Seefeld 2016.
// 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 boost_python_converter_registered_hpp_
#define boost_python_converter_registered_hpp_
#include
#include
#include
#include
#include
#include
#include
#if defined(BOOST_PYTHON_TRACE_REGISTRY) \
|| defined(BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND)
# include
#endif
namespace boost {
// You'll see shared_ptr mentioned in this header because we need to
// note which types are shared_ptrs in their registrations, to
// implement special shared_ptr handling for rvalue conversions.
template class shared_ptr;
namespace python { namespace converter {
struct registration;
namespace detail
{
template
struct registered_base
{
static registration const& converters;
};
}
template
struct registered
: detail::registered_base<
typename boost::python::detail::add_lvalue_reference<
typename boost::python::detail::add_cv::type
>::type
>
{
};
# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
// collapses a few more types to the same static instance. MSVC7.1
// fails to strip cv-qualification from array types in typeid. For
// some reason we can't use this collapse there or array converters
// will not be found.
template
struct registered
: registered {};
# endif
//
// implementations
//
namespace detail
{
inline void
register_shared_ptr0(...)
{
}
template
inline void
register_shared_ptr0(shared_ptr*)
{
registry::lookup_shared_ptr(type_id >());
}
#if !defined(BOOST_NO_CXX11_SMART_PTR)
template
inline void
register_shared_ptr0(std::shared_ptr*)
{
registry::lookup_shared_ptr(type_id >());
}
#endif
template
inline void
register_shared_ptr1(T const volatile*)
{
detail::register_shared_ptr0((T*)0);
}
template
inline registration const&
registry_lookup2(T&(*)())
{
detail::register_shared_ptr1((T*)0);
return registry::lookup(type_id());
}
template
inline registration const&
registry_lookup1(type)
{
return registry_lookup2((T(*)())0);
}
inline registration const&
registry_lookup1(type)
{
detail::register_shared_ptr1((void*)0);
return registry::lookup(type_id());
}
template
registration const& registered_base::converters = detail::registry_lookup1(type());
}
}}} // namespace boost::python::converter
#endif