diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/python/converter/registered.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/python/converter/registered.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,111 @@ +// 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 REGISTERED_DWA2002710_HPP +# define REGISTERED_DWA2002710_HPP +# include +# include +# include +# include +# include +# include +# include +# include +# include + +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 add_reference< + typename add_cv::type + >::type + > +{ +}; + +# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !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 >()); + } + + 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 // REGISTERED_DWA2002710_HPP