// 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) #include #include "test_class.hpp" #include #include #include #include #include #include using namespace boost::python; typedef test_class<> X; struct Y : X { Y(int n) : X(n) {}; }; int look(std::auto_ptr const& x) { return (x.get()) ? x->value() : -1; } int steal(std::auto_ptr x) { return x->value(); } int maybe_steal(std::auto_ptr& x, bool doit) { int n = x->value(); if (doit) x.release(); return n; } std::auto_ptr make() { return std::auto_ptr(new X(77)); } std::auto_ptr callback(object f) { std::auto_ptr x(new X(77)); return call >(f.ptr(), x); } std::auto_ptr extract_(object o) { return extract&>(o) #if BOOST_MSVC <= 1300 () #endif ; } BOOST_PYTHON_MODULE(auto_ptr_ext) { class_, boost::noncopyable>("X", init()) .def("value", &X::value) ; class_, bases, boost::noncopyable>("Y", init()) ; // VC6 auto_ptrs do not have converting constructors #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 306) scope().attr("broken_auto_ptr") = 1; #else scope().attr("broken_auto_ptr") = 0; implicitly_convertible, std::auto_ptr >(); #endif def("look", look); def("steal", steal); def("maybe_steal", maybe_steal); def("make", make); def("callback", callback); def("extract", extract_); } #include "module_tail.cpp"