1 // Copyright David Abrahams and Gottfried Ganssauge 2003.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 # include <boost/python/return_opaque_pointer.hpp>
6 # include <boost/python/def.hpp>
7 # include <boost/python/module.hpp>
8 # include <boost/python/return_value_policy.hpp>
9
10 typedef struct opaque_ *opaque;
11 typedef struct opaque2_ *opaque2;
12
13 opaque the_op = ((opaque) 0x47110815);
14 opaque2 the_op2 = ((opaque2) 0x08154711);
15
get()16 opaque get() { return the_op; }
17
use(opaque op)18 void use(opaque op)
19 {
20 if (op != the_op)
21 throw std::runtime_error (std::string ("failed"));
22 }
23
useany(opaque op)24 int useany(opaque op)
25 {
26 return op ? 1 : 0;
27 }
28
getnull()29 opaque getnull()
30 {
31 return 0;
32 }
33
failuse(opaque op)34 void failuse (opaque op)
35 {
36 if (op == the_op)
37 throw std::runtime_error (std::string ("success"));
38 }
39
get2()40 opaque2 get2 () { return the_op2; }
41
use2(opaque2 op)42 void use2 (opaque2 op)
43 {
44 if (op != the_op2)
45 throw std::runtime_error (std::string ("failed"));
46 }
47
failuse2(opaque2 op)48 void failuse2 (opaque2 op)
49 {
50 if (op == the_op2)
51 throw std::runtime_error (std::string ("success"));
52 }
53
54 BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(opaque_)
55 BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(opaque2_)
56
57 namespace bpl = boost::python;
58
BOOST_PYTHON_MODULE(opaque_ext)59 BOOST_PYTHON_MODULE(opaque_ext)
60 {
61 bpl::def (
62 "get", &::get, bpl::return_value_policy<bpl::return_opaque_pointer>());
63 bpl::def ("use", &::use);
64 bpl::def ("useany", &::useany);
65 bpl::def ("getnull", &::getnull, bpl::return_value_policy<bpl::return_opaque_pointer>());
66 bpl::def ("failuse", &::failuse);
67
68 bpl::def (
69 "get2",
70 &::get2,
71 bpl::return_value_policy<bpl::return_opaque_pointer>());
72 bpl::def ("use2", &::use2);
73 bpl::def ("failuse2", &::failuse2);
74 }
75
76 # include "module_tail.cpp"
77