// 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<:auto_ptr> >(f.ptr(), x);
}
std::auto_ptr extract_(object o)
{
return extract<:auto_ptr>&>(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<:auto_ptr>, 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"