/usr/include/boost/python
Edit: /usr/include/boost/python/cast.hpp (2954B)
// 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 CAST_DWA200269_HPP
# define CAST_DWA200269_HPP
# include
# include
# include
# include
# include
namespace boost { namespace python {
namespace detail
{
template inline Target* upcast_impl(Source*, Target*);
template
inline Target* upcast(Source* p, yes_convertible, no_convertible, Target*)
{
return p;
}
template
inline Target* upcast(Source* p, no_convertible, no_convertible, Target*)
{
typedef typename base_type_traits::type base;
return detail::upcast_impl((base*)p, (Target*)0);
}
template
struct upcaster
{
template
static inline T* execute(T* x, T*) { return x; }
};
template <>
struct upcaster
{
template
static inline Target* execute(Source* x, Target*)
{
return detail::upcast(
x, detail::convertible::check(x)
, detail::convertible::check((Target*)0)
, (Target*)0);
}
};
template
inline Target* downcast(Source* p, yes_convertible)
{
return static_cast(p);
}
template
inline Target* downcast(Source* p, no_convertible, boost::type* = 0)
{
typedef typename base_type_traits::type base;
return (Target*)detail::downcast(p, convertible::check((base*)0));
}
template
inline void assert_castable(boost::type* = 0)
{
typedef char must_be_a_complete_type[sizeof(T)] BOOST_ATTRIBUTE_UNUSED;
}
template
inline Target* upcast_impl(Source* x, Target*)
{
typedef typename detail::add_cv::type src_t;
typedef typename detail::add_cv::type target_t;
bool const same = detail::is_same::value;
return detail::upcaster::execute(x, (Target*)0);
}
}
template
inline Target* upcast(Source* x, Target* = 0)
{
detail::assert_castable();
detail::assert_castable();
return detail::upcast_impl(x, (Target*)0);
}
template
inline Target* downcast(Source* x, Target* = 0)
{
detail::assert_castable();
detail::assert_castable();
return detail::downcast(x, detail::convertible::check((Target*)0));
}
}} // namespace boost::python
#endif // CAST_DWA200269_HPP