19 #ifndef BOOST_PYTHON_STD_PAIR_KEY_VALUE_11_02_2007_HPP 20 #define BOOST_PYTHON_STD_PAIR_KEY_VALUE_11_02_2007_HPP 22 #include <boost/config.hpp> 23 #include <indexing_suite/container_traits.hpp> 24 #include <indexing_suite/container_suite.hpp> 25 #include <indexing_suite/registry_utils.hpp> 26 #include <indexing_suite/algorithms.hpp> 27 #include <boost/detail/workaround.hpp> 29 namespace boost {
namespace python {
namespace indexing {
namespace mapping{
33 template<
typename TValueType,
typename TValueCallPolicies >
36 typedef TValueType pair_type;
37 typedef BOOST_DEDUCED_TYPENAME pair_type::first_type key_type;
38 typedef BOOST_DEDUCED_TYPENAME pair_type::second_type mapped_type;
42 if( boost::python::registry::utils::is_registered< pair_type >() ){
43 boost::python::registry::utils::register_alias<pair_type>( name.c_str() );
46 class_< pair_type >( name.c_str() )
47 .def(
"__len__", &exposer_type::len )
48 .def(
"__getitem__", &exposer_type::get_item )
49 .add_property(
"key", &exposer_type::get_key )
50 .add_property(
"value", &exposer_type::get_mapped );
56 static size_t len(
const pair_type& ){
60 static object get_item( pair_type& p,
size_t index ){
66 return get_mapped( p );
69 objects::stop_iteration_error();
73 PyErr_SetString( PyExc_IndexError,
"the only valid index numbers are: 0 and 1");
74 throw_error_already_set();
80 static object get_key(
const pair_type& p ){
81 return object( p.first );
84 static object get_mapped( pair_type& p ){
85 typedef BOOST_DEDUCED_TYPENAME TValueCallPolicies::result_converter rc_type;
86 typedef BOOST_DEDUCED_TYPENAME rc_type:: template apply< mapped_type >::type converter_type;
87 converter_type converter;
88 return object( handle<>( converter( p.second ) ) );
94 template<
typename TPythonClass,
typename TValueType,
typename TValueCallPolicies >
95 inline void register_value_type(TPythonClass &pyClass){
98 object class_name(pyClass.attr(
"__name__"));
99 extract<std::string> class_name_extractor(class_name);
100 std::string pair_name = class_name_extractor() +
"_entry";
102 exposer_type expose( pair_name );
107 #endif // BOOST_PYTHON_STD_PAIR_KEY_VALUE_11_02_2007_HPP Definition: python_CEGUI.h:11