1 #include <boost/shared_ptr.hpp>
2 #include <boost/weak_ptr.hpp>
8 T
* get_pointer(boost::shared_ptr
<T
>& p
) { return p
.get(); }
11 T
* get_pointer(const std::auto_ptr
<T
>& p
) { return p
.get(); }
19 LUABIND_ANONYMOUS_FIX
int feedback
= 0;
23 base(): n(4) { feedback
= 3; }
24 virtual ~base() { feedback
= 1; }
34 // this is here to make sure the pointer offsetting works
41 struct derived
: first_base
, base
43 derived(): n2(7) { feedback
= 7; }
44 void f() { feedback
= 5; }
50 if (t
->n
== 4) feedback
= 2;
53 void tester_(derived
* t
)
55 if (t
->n2
== 7) feedback
= 8;
58 void tester2(boost::shared_ptr
<base
> t
)
60 if (t
->n
== 4) feedback
= 9;
63 void tester3(boost::shared_ptr
<const base
> t
)
65 if (t
->n
== 4) feedback
= 10;
68 void tester4(const boost::shared_ptr
<const base
>& t
)
70 if (t
->n
== 4) feedback
= 11;
73 void tester5(const boost::shared_ptr
<const base
>* t
)
75 if ((*t
)->n
== 4) feedback
= 12;
78 void tester6(const boost::shared_ptr
<base
>* t
)
80 if ((*t
)->n
== 4) feedback
= 13;
83 void tester7(boost::shared_ptr
<base
>* t
)
85 if ((*t
)->n
== 4) feedback
= 14;
88 void tester8(boost::weak_ptr
<base
> t
)
90 if (!t
.expired()) feedback
= 19;
93 boost::shared_ptr
<base
> tester9()
96 return boost::shared_ptr
<base
>(new base());
101 tester10() : m_member(new base()) {}
102 const boost::shared_ptr
<base
>& test() { return m_member
; }
103 boost::shared_ptr
<base
> m_member
;
108 void test_auto_ptr(std::auto_ptr
<ownership
>) {}
110 } // anonymous namespace
116 type
<boost::shared_ptr
<const A
> > get_const_holder(type
<boost::shared_ptr
<A
> >)
118 return type
<boost::shared_ptr
<const A
> >();
122 bool test_held_type()
124 // This feature is not finished yet
126 using namespace luabind
;
128 boost::shared_ptr
<base
> ptr(new base());
131 lua_State
* L
= lua_open();
134 int top
= lua_gettop(L
);
142 class_
<ownership
, std::auto_ptr
<ownership
> >("ownership")
143 .def(constructor
<>()),
145 def("test_auto_ptr", &test_auto_ptr
),
147 def("tester", &tester
),
148 def("tester", &tester_
),
149 def("tester2", &tester2
),
150 def("tester3", &tester3
),
151 def("tester4", &tester4
),
152 def("tester5", &tester5
),
153 def("tester6", &tester6
),
154 def("tester7", &tester7
),
155 // def("tester8", &tester8),
156 def("tester9", &tester9
),
158 class_
<base
, boost::shared_ptr
<base
> >("base")
159 .def(constructor
<>())
162 class_
<derived
, base
, boost::shared_ptr
<base
> >("derived")
163 .def(constructor
<>())
164 .def("f", &derived::f
),
166 class_
<tester10
>("tester10")
167 .def(constructor
<>())
168 .def("test", &tester10::test
)
173 object g
= get_globals(L
);
175 g
["foobar"] = boost::shared_ptr
<const base
>(new base());
177 if (dostring(L
, "tester(test)")) return false;
178 if (feedback
!= 2) return false;
179 if (dostring(L
, "a = base()")) return false;
180 if (feedback
!= 3) return false;
181 if (dostring(L
, "b = derived()")) return false;
182 if (feedback
!= 7) return false;
183 if (dostring(L
, "tester(a)")) return false;
184 if (feedback
!= 2) return false;
185 if (dostring(L
, "tester(b)")) return false;
186 if (feedback
!= 8) return false;
187 if (dostring(L
, "tester2(b)")) return false;
188 if (feedback
!= 9) return false;
189 if (dostring(L
, "tester3(b)")) return false;
190 if (feedback
!= 10) return false;
191 if (dostring(L
, "tester4(b)")) return false;
192 if (feedback
!= 11) return false;
193 if (dostring(L
, "tester5(b)")) return false;
194 if (feedback
!= 12) return false;
195 if (dostring(L
, "tester6(b)")) return false;
196 if (feedback
!= 13) return false;
197 if (dostring(L
, "tester7(b)")) return false;
198 if (feedback
!= 14) return false;
199 // if (dostring(L, "tester8(b)")) return false;
200 // if (feedback != 19) return false;
201 if (dostring(L
, "c = tester9()")) return false;
202 if (feedback
!= 3) return false;
205 if (dostring(L
, "d = tester10()")) return false;
206 if (dostring(L
, "e = d:test()")) return false;
207 if (feedback
!= 3) return false;
210 if (top
!= lua_gettop(L
)) return false;
216 if (feedback
!= 1) return false;