annotate DEPENDENCIES/generic/include/boost/python/object_attributes.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +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 OBJECT_ATTRIBUTES_DWA2002615_HPP
Chris@16 6 # define OBJECT_ATTRIBUTES_DWA2002615_HPP
Chris@16 7
Chris@16 8 # include <boost/python/detail/prefix.hpp>
Chris@16 9
Chris@16 10 # include <boost/python/proxy.hpp>
Chris@16 11 # include <boost/python/object_core.hpp>
Chris@16 12 # include <boost/python/object_protocol.hpp>
Chris@16 13
Chris@16 14 namespace boost { namespace python { namespace api {
Chris@16 15
Chris@16 16 struct const_attribute_policies
Chris@16 17 {
Chris@16 18 typedef char const* key_type;
Chris@16 19 static object get(object const& target, char const* key);
Chris@16 20 static object get(object const& target, object const& key);
Chris@16 21 };
Chris@16 22
Chris@16 23 struct attribute_policies : const_attribute_policies
Chris@16 24 {
Chris@16 25 static object const& set(object const& target, char const* key, object const& value);
Chris@16 26 static void del(object const&target, char const* key);
Chris@16 27 };
Chris@16 28
Chris@16 29 struct const_objattribute_policies
Chris@16 30 {
Chris@16 31 typedef object const key_type;
Chris@16 32 static object get(object const& target, object const& key);
Chris@16 33 };
Chris@16 34
Chris@16 35 struct objattribute_policies : const_objattribute_policies
Chris@16 36 {
Chris@16 37 static object const& set(object const& target, object const& key, object const& value);
Chris@16 38 static void del(object const&target, object const& key);
Chris@16 39 };
Chris@16 40
Chris@16 41 //
Chris@16 42 // implementation
Chris@16 43 //
Chris@16 44 template <class U>
Chris@16 45 inline object_attribute object_operators<U>::attr(char const* name)
Chris@16 46 {
Chris@16 47 object_cref2 x = *static_cast<U*>(this);
Chris@16 48 return object_attribute(x, name);
Chris@16 49 }
Chris@16 50
Chris@16 51 template <class U>
Chris@16 52 inline const_object_attribute object_operators<U>::attr(char const* name) const
Chris@16 53 {
Chris@16 54 object_cref2 x = *static_cast<U const*>(this);
Chris@16 55 return const_object_attribute(x, name);
Chris@16 56 }
Chris@16 57
Chris@16 58 template <class U>
Chris@16 59 inline object_objattribute object_operators<U>::attr(object const& name)
Chris@16 60 {
Chris@16 61 object_cref2 x = *static_cast<U*>(this);
Chris@16 62 return object_objattribute(x, name);
Chris@16 63 }
Chris@16 64
Chris@16 65 template <class U>
Chris@16 66 inline const_object_objattribute object_operators<U>::attr(object const& name) const
Chris@16 67 {
Chris@16 68 object_cref2 x = *static_cast<U const*>(this);
Chris@16 69 return const_object_objattribute(x, name);
Chris@16 70 }
Chris@16 71
Chris@16 72 inline object const_attribute_policies::get(object const& target, char const* key)
Chris@16 73 {
Chris@16 74 return python::getattr(target, key);
Chris@16 75 }
Chris@16 76
Chris@16 77 inline object const_objattribute_policies::get(object const& target, object const& key)
Chris@16 78 {
Chris@16 79 return python::getattr(target, key);
Chris@16 80 }
Chris@16 81
Chris@16 82 inline object const& attribute_policies::set(
Chris@16 83 object const& target
Chris@16 84 , char const* key
Chris@16 85 , object const& value)
Chris@16 86 {
Chris@16 87 python::setattr(target, key, value);
Chris@16 88 return value;
Chris@16 89 }
Chris@16 90
Chris@16 91 inline object const& objattribute_policies::set(
Chris@16 92 object const& target
Chris@16 93 , object const& key
Chris@16 94 , object const& value)
Chris@16 95 {
Chris@16 96 python::setattr(target, key, value);
Chris@16 97 return value;
Chris@16 98 }
Chris@16 99
Chris@16 100 inline void attribute_policies::del(
Chris@16 101 object const& target
Chris@16 102 , char const* key)
Chris@16 103 {
Chris@16 104 python::delattr(target, key);
Chris@16 105 }
Chris@16 106
Chris@16 107 inline void objattribute_policies::del(
Chris@16 108 object const& target
Chris@16 109 , object const& key)
Chris@16 110 {
Chris@16 111 python::delattr(target, key);
Chris@16 112 }
Chris@16 113
Chris@16 114 }}} // namespace boost::python::api
Chris@16 115
Chris@16 116 #endif // OBJECT_ATTRIBUTES_DWA2002615_HPP