From 2f1b828967f50177bd3fa81bd3241e3f9fba7025 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Wed, 21 May 2003 21:52:26 +0000 Subject: [PATCH] Getter setter bugfixes for attribute access [SVN r18486] --- include/boost/python/class.hpp | 92 +++++++++------------------ include/boost/python/data_members.hpp | 31 ++++++++- 2 files changed, 59 insertions(+), 64 deletions(-) diff --git a/include/boost/python/class.hpp b/include/boost/python/class.hpp index 08ec7cb7..ca92fc6e 100644 --- a/include/boost/python/class.hpp +++ b/include/boost/python/class.hpp @@ -46,7 +46,11 @@ # include # include -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) +# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) || BOOST_WORKAROUND(__GNUC__, < 3) +# define BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING 1 +# endif + +# ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING # include # include # endif @@ -102,7 +106,7 @@ namespace detail SelectHolder::register_(); } -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) +# ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING template struct is_data_member_pointer : mpl::and_< @@ -110,6 +114,17 @@ namespace detail , mpl::not_ > > {}; +# define BOOST_PYTHON_DATA_MEMBER_HELPER , detail::is_data_member_pointer() +# define BOOST_PYTHON_YES_DATA_MEMBER , mpl::true_ +# define BOOST_PYTHON_NO_DATA_MEMBER , mpl::false_ +# elif defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) +# define BOOST_PYTHON_DATA_MEMBER_HELPER , 0 +# define BOOST_PYTHON_YES_DATA_MEMBER , int +# define BOOST_PYTHON_NO_DATA_MEMBER , ... +# else +# define BOOST_PYTHON_DATA_MEMBER_HELPER +# define BOOST_PYTHON_YES_DATA_MEMBER +# define BOOST_PYTHON_NO_DATA_MEMBER # endif namespace error @@ -308,53 +323,25 @@ class class_ : public objects::class_base template self& def_readonly(char const* name, D const& d) { - return this->def_readonly_impl( - name, d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , detail::is_data_member_pointer() -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , 0 -# endif - ); + return this->def_readonly_impl(name, d BOOST_PYTHON_DATA_MEMBER_HELPER); } template self& def_readwrite(char const* name, D const& d) { - return this->def_readwrite_impl( - name, d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , detail::is_data_member_pointer() -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , 0 -# endif - ); + return this->def_readwrite_impl(name, d BOOST_PYTHON_DATA_MEMBER_HELPER); } template self& def_readonly(char const* name, D& d) { - return this->def_readonly_impl( - name, d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , detail::is_data_member_pointer() -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , 0 -# endif - ); + return this->def_readonly_impl(name, d BOOST_PYTHON_DATA_MEMBER_HELPER); } template self& def_readwrite(char const* name, D& d) { - return this->def_readwrite_impl( - name, d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , detail::is_data_member_pointer() -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , 0 -# endif - ); + return this->def_readwrite_impl(name, d BOOST_PYTHON_DATA_MEMBER_HELPER); } // Property creation @@ -444,13 +431,7 @@ class class_ : public objects::class_base template self& def_readonly_impl( - char const* name, D B::*pm_ -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , mpl::true_ -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , int -# endif - ) + char const* name, D B::*pm_ BOOST_PYTHON_YES_DATA_MEMBER) { D T::*pm = pm_; return this->add_property(name, make_getter(pm)); @@ -458,13 +439,7 @@ class class_ : public objects::class_base template self& def_readwrite_impl( - char const* name, D B::*pm_ -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , mpl::true_ -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , int -# endif - ) + char const* name, D B::*pm_ BOOST_PYTHON_YES_DATA_MEMBER) { D T::*pm = pm_; return this->add_property(name, make_getter(pm), make_setter(pm)); @@ -472,26 +447,14 @@ class class_ : public objects::class_base template self& def_readonly_impl( - char const* name, D& d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , mpl::false_ -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , ... -# endif - ) + char const* name, D& d BOOST_PYTHON_NO_DATA_MEMBER) { return this->add_static_property(name, make_getter(d)); } template self& def_readwrite_impl( - char const* name, D& d -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) - , mpl::false_ -# elif BOOST_NO_FUNCTION_TEMPLATE_ORDERING - , ... -# endif - ) + char const* name, D& d BOOST_PYTHON_NO_DATA_MEMBER) { return this->add_static_property(name, make_getter(d), make_setter(d)); } @@ -677,4 +640,9 @@ namespace detail }} // namespace boost::python +# undef BOOST_PYTHON_DATA_MEMBER_HELPER +# undef BOOST_PYTHON_YES_DATA_MEMBER +# undef BOOST_PYTHON_NO_DATA_MEMBER +# undef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING + #endif // CLASS_DWA200216_HPP diff --git a/include/boost/python/data_members.hpp b/include/boost/python/data_members.hpp index a12a8b75..66c3601a 100644 --- a/include/boost/python/data_members.hpp +++ b/include/boost/python/data_members.hpp @@ -27,7 +27,6 @@ # include # include -# include # include @@ -220,24 +219,52 @@ inline object make_getter(D& d, Policies const& policies) return detail::make_getter(d, policies, 0L); } +template +inline object make_getter(D const& d, Policies const& policies) +{ + return detail::make_getter(d, policies, 0L); +} + template inline object make_getter(D& x) { return detail::make_getter(x, detail::not_specified(), 0L); } - + +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +template +inline object make_getter(D const& x) +{ + return detail::make_getter(x, detail::not_specified(), 0L); +} +# endif + template inline object make_setter(D& x, Policies const& policies) { return detail::make_setter(x, policies, 0L); } +template +inline object make_setter(D const& x, Policies const& policies) +{ + return detail::make_setter(x, policies, 0L); +} + template inline object make_setter(D& x) { return detail::make_setter(x, default_call_policies(), 0L); } +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +template +inline object make_setter(D const& x) +{ + return detail::make_setter(x, default_call_policies(), 0L); +} +# endif + }} // namespace boost::python #endif // DATA_MEMBERS_DWA2002328_HPP