2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-30 08:02:38 +00:00

merged from trunk

[SVN r45985]
This commit is contained in:
Eric Niebler
2008-05-31 19:31:01 +00:00
parent c008e883ca
commit bc71b32036
6 changed files with 312 additions and 6 deletions

View File

@@ -17,6 +17,7 @@ struct const_attribute_policies
{
typedef char const* key_type;
static object get(object const& target, char const* key);
static object get(object const& target, object const& key);
};
struct attribute_policies : const_attribute_policies
@@ -25,6 +26,18 @@ struct attribute_policies : const_attribute_policies
static void del(object const&target, char const* key);
};
struct const_objattribute_policies
{
typedef object const key_type;
static object get(object const& target, object const& key);
};
struct objattribute_policies : const_objattribute_policies
{
static object const& set(object const& target, object const& key, object const& value);
static void del(object const&target, object const& key);
};
//
// implementation
//
@@ -42,11 +55,30 @@ inline const_object_attribute object_operators<U>::attr(char const* name) const
return const_object_attribute(x, name);
}
template <class U>
inline object_objattribute object_operators<U>::attr(object const& name)
{
object_cref2 x = *static_cast<U*>(this);
return object_objattribute(x, name);
}
template <class U>
inline const_object_objattribute object_operators<U>::attr(object const& name) const
{
object_cref2 x = *static_cast<U const*>(this);
return const_object_objattribute(x, name);
}
inline object const_attribute_policies::get(object const& target, char const* key)
{
return python::getattr(target, key);
}
inline object const_objattribute_policies::get(object const& target, object const& key)
{
return python::getattr(target, key);
}
inline object const& attribute_policies::set(
object const& target
, char const* key
@@ -56,6 +88,15 @@ inline object const& attribute_policies::set(
return value;
}
inline object const& objattribute_policies::set(
object const& target
, object const& key
, object const& value)
{
python::setattr(target, key, value);
return value;
}
inline void attribute_policies::del(
object const& target
, char const* key)
@@ -63,6 +104,13 @@ inline void attribute_policies::del(
python::delattr(target, key);
}
inline void objattribute_policies::del(
object const& target
, object const& key)
{
python::delattr(target, key);
}
}}} // namespace boost::python::api
#endif // OBJECT_ATTRIBUTES_DWA2002615_HPP

View File

@@ -59,6 +59,8 @@ namespace api
struct const_attribute_policies;
struct attribute_policies;
struct const_objattribute_policies;
struct objattribute_policies;
struct const_item_policies;
struct item_policies;
struct const_slice_policies;
@@ -67,6 +69,8 @@ namespace api
typedef proxy<const_attribute_policies> const_object_attribute;
typedef proxy<attribute_policies> object_attribute;
typedef proxy<const_objattribute_policies> const_object_objattribute;
typedef proxy<objattribute_policies> object_objattribute;
typedef proxy<const_item_policies> const_object_item;
typedef proxy<item_policies> object_item;
typedef proxy<const_slice_policies> const_object_slice;
@@ -108,6 +112,8 @@ namespace api
//
const_object_attribute attr(char const*) const;
object_attribute attr(char const*);
const_object_objattribute attr(object const&) const;
object_objattribute attr(object const&);
// item access
//