Another attempt at new Boost compatibility

Instead of weird hacks with const_cast that aren't compatible with
Boost's get_pointer implementation for shared_ptr, use non-const
pointers as the representation and register conversions, like most of
the classes did already.
This commit is contained in:
David Leverton 2013-08-27 21:56:44 +01:00
parent 2d3a4c3ba2
commit 64f0d9760e
3 changed files with 8 additions and 18 deletions

@ -30,7 +30,8 @@ namespace bp = boost::python;
void expose_choices()
{
bp::class_<Choices, std::shared_ptr<const Choices>, boost::noncopyable> choices(
register_shared_ptrs_to_python<Choices>(rsp_const);
bp::class_<Choices, std::shared_ptr<Choices>, boost::noncopyable> choices(
"Choices",
"A collection of configurable values for a PackageID",
bp::init<>("__init__()")
@ -50,7 +51,8 @@ void expose_choices()
)
;
bp::class_<Choice, std::shared_ptr<const Choice>, boost::noncopyable> choice(
register_shared_ptrs_to_python<Choice>(rsp_const);
bp::class_<Choice, std::shared_ptr<Choice>, boost::noncopyable> choice(
"Choice",
"An individual choice in a Choices collection.",
bp::no_init
@ -90,7 +92,8 @@ void expose_choices()
)
;
bp::class_<ChoiceValue, std::shared_ptr<const ChoiceValue>, boost::noncopyable> choice_value(
register_shared_ptrs_to_python<ChoiceValue>(rsp_const);
bp::class_<ChoiceValue, std::shared_ptr<ChoiceValue>, boost::noncopyable> choice_value(
"ChoiceValue",
"An individual value in a ChoiceValue",
bp::no_init

@ -1219,12 +1219,13 @@ void expose_dep_spec()
"Create a PackageDepSpec from user input."
);
register_shared_ptrs_to_python<PythonPackageDepSpec>(rsp_const);
bp::implicitly_convertible<PythonPackageDepSpec, PackageDepSpec>();
bp::implicitly_convertible<PythonPackageDepSpec, std::shared_ptr<PackageDepSpec> >();
bp::implicitly_convertible<std::shared_ptr<PackageDepSpec>, std::shared_ptr<const PackageDepSpec> >();
RegisterDepSpecToPython<PackageDepSpec, PythonPackageDepSpec>();
bp::class_<PythonPackageDepSpec, std::shared_ptr<const PythonPackageDepSpec>, bp::bases<PythonStringDepSpec> >
bp::class_<PythonPackageDepSpec, std::shared_ptr<PythonPackageDepSpec>, bp::bases<PythonStringDepSpec> >
(
"PackageDepSpec",
"A PackageDepSpec represents a package name (for example, 'app-editors/vim'),"

@ -38,13 +38,6 @@ namespace paludis
{
return p.get();
}
// Make Boost.Python work with std::shared_ptr<const>
template <typename T_>
inline T_ * get_pointer(std::shared_ptr<const T_> const & p)
{
return const_cast<T_*>(p.get());
}
}
#endif
@ -58,13 +51,6 @@ namespace boost
{
typedef T_ type;
};
// Make Boost.Python work with std::shared_ptr<const>
template <typename T_>
struct pointee<std::shared_ptr<const T_> >
{
typedef T_ type;
};
}
}