annotate DEPENDENCIES/generic/include/boost/python/proxy.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Copyright David Abrahams 2002.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 3 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5 #ifndef PROXY_DWA2002615_HPP
Chris@16 6 # define PROXY_DWA2002615_HPP
Chris@16 7 # include <boost/python/detail/prefix.hpp>
Chris@16 8 # include <boost/python/object_core.hpp>
Chris@16 9 # include <boost/python/object_operators.hpp>
Chris@16 10
Chris@16 11 namespace boost { namespace python { namespace api {
Chris@16 12
Chris@16 13 template <class Policies>
Chris@16 14 class proxy : public object_operators<proxy<Policies> >
Chris@16 15 {
Chris@16 16 typedef typename Policies::key_type key_type;
Chris@16 17
Chris@16 18 # if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
Chris@16 19 typedef proxy const& assignment_self;
Chris@16 20 # else
Chris@16 21 typedef proxy assignment_self;
Chris@16 22 # endif
Chris@16 23 public:
Chris@16 24 proxy(object const& target, key_type const& key);
Chris@16 25 operator object() const;
Chris@16 26
Chris@16 27 // to support a[b] = c[d]
Chris@16 28 proxy const& operator=(assignment_self) const;
Chris@16 29
Chris@16 30 template <class T>
Chris@16 31 inline proxy const& operator=(T const& rhs) const
Chris@16 32 {
Chris@16 33 Policies::set(m_target, m_key, object(rhs));
Chris@16 34 return *this;
Chris@16 35 }
Chris@16 36
Chris@16 37 public: // implementation detail
Chris@16 38 void del() const;
Chris@16 39
Chris@16 40 private:
Chris@16 41 object m_target;
Chris@16 42 key_type m_key;
Chris@16 43 };
Chris@16 44
Chris@16 45
Chris@16 46 template <class T>
Chris@16 47 inline void del(proxy<T> const& x)
Chris@16 48 {
Chris@16 49 x.del();
Chris@16 50 }
Chris@16 51
Chris@16 52 //
Chris@16 53 // implementation
Chris@16 54 //
Chris@16 55
Chris@16 56 template <class Policies>
Chris@16 57 inline proxy<Policies>::proxy(object const& target, key_type const& key)
Chris@16 58 : m_target(target), m_key(key)
Chris@16 59 {}
Chris@16 60
Chris@16 61 template <class Policies>
Chris@16 62 inline proxy<Policies>::operator object() const
Chris@16 63 {
Chris@16 64 return Policies::get(m_target, m_key);
Chris@16 65 }
Chris@16 66
Chris@16 67 // to support a[b] = c[d]
Chris@16 68 template <class Policies>
Chris@16 69 inline proxy<Policies> const& proxy<Policies>::operator=(typename proxy::assignment_self rhs) const
Chris@16 70 {
Chris@16 71 return *this = python::object(rhs);
Chris@16 72 }
Chris@16 73
Chris@16 74 # define BOOST_PYTHON_PROXY_INPLACE(op) \
Chris@16 75 template <class Policies, class R> \
Chris@16 76 proxy<Policies> const& operator op(proxy<Policies> const& lhs, R const& rhs) \
Chris@16 77 { \
Chris@16 78 object old(lhs); \
Chris@16 79 return lhs = (old op rhs); \
Chris@16 80 }
Chris@16 81 BOOST_PYTHON_PROXY_INPLACE(+=)
Chris@16 82 BOOST_PYTHON_PROXY_INPLACE(-=)
Chris@16 83 BOOST_PYTHON_PROXY_INPLACE(*=)
Chris@16 84 BOOST_PYTHON_PROXY_INPLACE(/=)
Chris@16 85 BOOST_PYTHON_PROXY_INPLACE(%=)
Chris@16 86 BOOST_PYTHON_PROXY_INPLACE(<<=)
Chris@16 87 BOOST_PYTHON_PROXY_INPLACE(>>=)
Chris@16 88 BOOST_PYTHON_PROXY_INPLACE(&=)
Chris@16 89 BOOST_PYTHON_PROXY_INPLACE(^=)
Chris@16 90 BOOST_PYTHON_PROXY_INPLACE(|=)
Chris@16 91 # undef BOOST_PYTHON_PROXY_INPLACE
Chris@16 92
Chris@16 93 template <class Policies>
Chris@16 94 inline void proxy<Policies>::del() const
Chris@16 95 {
Chris@16 96 Policies::del(m_target, m_key);
Chris@16 97 }
Chris@16 98
Chris@16 99 }}} // namespace boost::python::api
Chris@16 100
Chris@16 101 #endif // PROXY_DWA2002615_HPP