annotate DEPENDENCIES/generic/include/boost/python/def_visitor.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 2003.
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 DEF_VISITOR_DWA2003810_HPP
Chris@16 6 # define DEF_VISITOR_DWA2003810_HPP
Chris@16 7
Chris@16 8 # include <boost/python/detail/prefix.hpp>
Chris@16 9 # include <boost/detail/workaround.hpp>
Chris@16 10
Chris@16 11 namespace boost { namespace python {
Chris@16 12
Chris@16 13 template <class DerivedVisitor> class def_visitor;
Chris@16 14 template <class T, class X1, class X2, class X3> class class_;
Chris@16 15
Chris@16 16 class def_visitor_access
Chris@16 17 {
Chris@16 18 # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
Chris@16 19 || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
Chris@16 20 // Tasteless as this may seem, making all members public allows member templates
Chris@16 21 // to work in the absence of member template friends.
Chris@16 22 public:
Chris@16 23 # else
Chris@16 24 template <class Derived> friend class def_visitor;
Chris@16 25 # endif
Chris@16 26
Chris@16 27 // unnamed visit, c.f. init<...>, container suites
Chris@16 28 template <class V, class classT>
Chris@16 29 static void visit(V const& v, classT& c)
Chris@16 30 {
Chris@16 31 v.derived_visitor().visit(c);
Chris@16 32 }
Chris@16 33
Chris@16 34 // named visit, c.f. object, pure_virtual
Chris@16 35 template <class V, class classT, class OptionalArgs>
Chris@16 36 static void visit(
Chris@16 37 V const& v
Chris@16 38 , classT& c
Chris@16 39 , char const* name
Chris@16 40 , OptionalArgs const& options
Chris@16 41 )
Chris@16 42 {
Chris@16 43 v.derived_visitor().visit(c, name, options);
Chris@16 44 }
Chris@16 45
Chris@16 46 };
Chris@16 47
Chris@16 48
Chris@16 49 template <class DerivedVisitor>
Chris@16 50 class def_visitor
Chris@16 51 {
Chris@16 52 friend class def_visitor_access;
Chris@16 53
Chris@16 54 # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
Chris@16 55 || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
Chris@16 56 // Tasteless as this may seem, making all members public allows member templates
Chris@16 57 // to work in the absence of member template friends.
Chris@16 58 public:
Chris@16 59 # else
Chris@16 60 template <class T, class X1, class X2, class X3> friend class class_;
Chris@16 61 # endif
Chris@16 62
Chris@16 63 // unnamed visit, c.f. init<...>, container suites
Chris@16 64 template <class classT>
Chris@16 65 void visit(classT& c) const
Chris@16 66 {
Chris@16 67 def_visitor_access::visit(*this, c);
Chris@16 68 }
Chris@16 69
Chris@16 70 // named visit, c.f. object, pure_virtual
Chris@16 71 template <class classT, class OptionalArgs>
Chris@16 72 void visit(classT& c, char const* name, OptionalArgs const& options) const
Chris@16 73 {
Chris@16 74 def_visitor_access::visit(*this, c, name, options);
Chris@16 75 }
Chris@16 76
Chris@16 77 protected:
Chris@16 78 DerivedVisitor const& derived_visitor() const
Chris@16 79 {
Chris@16 80 return static_cast<DerivedVisitor const&>(*this);
Chris@16 81 }
Chris@16 82 };
Chris@16 83
Chris@16 84 }} // namespace boost::python
Chris@16 85
Chris@16 86 #endif // DEF_VISITOR_DWA2003810_HPP