123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // 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 <boost/python/class.hpp>
- #include <boost/python/module.hpp>
- #include <boost/python/return_value_policy.hpp>
- #include <boost/python/return_by_value.hpp>
- #include "test_class.hpp"
- #if defined(_AIX) && defined(__EDG_VERSION__) && __EDG_VERSION__ < 245
- # include <iostream> // works around a KCC intermediate code generation bug
- #endif
- using namespace boost::python;
- typedef test_class<> X;
- struct Y : test_class<1>
- {
- Y(int v) : test_class<1>(v) {}
- Y& operator=(Y const& rhs) { x = rhs.x; return *this; }
- bool q;
- };
- double get_fair_value(X const& x) { return x.value(); }
- struct VarBase
- {
- VarBase(std::string name_) : name(name_) {}
-
- std::string const name;
- std::string get_name1() const { return name; }
-
- };
- struct Var : VarBase
- {
- Var(std::string name_) : VarBase(name_), value(), name2(name.c_str()), y(6) {}
- std::string const& get_name2() const { return name; }
- float value;
- char const* name2;
- Y y;
- static int static1;
- static Y static2;
- };
- int Var::static1 = 0;
- Y Var::static2(0);
- // Compilability regression tests
- namespace boost_python_test
- {
- struct trivial
- {
- trivial() : value(123) {}
- double value;
- };
- struct Color3
- {
- static const Color3 black;
- };
- const Color3 Color3::black
- #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- = {}
- #endif
- ;
- void compilability_test()
- {
- class_<trivial>("trivial")
- .add_property("property", make_getter(&trivial::value, return_value_policy<return_by_value>()))
- .def_readonly("readonly", &trivial::value)
- ;
- class_< Color3 >("Color3", init< const Color3 & >())
- .def_readonly("BLACK", &Color3::black) // line 17
- ;
- }
- }
- BOOST_PYTHON_MODULE(data_members_ext)
- {
- using namespace boost_python_test;
- class_<X>("X", init<int>())
- .def("value", &X::value)
- .def("set", &X::set)
- .def_readonly("x", &X::x)
- .add_property("fair_value", get_fair_value)
- ;
- class_<Y>("Y", init<int>())
- .def("value", &Y::value)
- .def("set", &Y::set)
- .def_readwrite("x", &Y::x)
- .def_readwrite("q", &Y::q)
- ;
- class_<Var>("Var", init<std::string>())
- .def_readonly("name", &Var::name)
- .def_readonly("name2", &Var::name2)
- .def_readwrite("value", &Var::value)
- .def_readonly("y", &Var::y)
-
- // Test return_by_value for plain values and for
- // pointers... return_by_value was implemented as a
- // side-effect of implementing data member support, so it made
- // sense to add the test here.
- .def("get_name1", &Var::get_name1, return_value_policy<return_by_value>())
- .def("get_name2", &Var::get_name2, return_value_policy<return_by_value>())
-
- .add_property("name3", &Var::get_name1)
- // Test static data members
- .def_readonly("ro1a", &Var::static1)
- .def_readonly("ro1b", Var::static1)
- .def_readwrite("rw1a", &Var::static1)
- .def_readwrite("rw1b", Var::static1)
- .def_readonly("ro2a", &Var::static2)
- .def_readonly("ro2b", Var::static2)
- .def_readwrite("rw2a", &Var::static2)
- .def_readwrite("rw2b", Var::static2)
- ;
- }
- #include "module_tail.cpp"
|