18 #ifndef BOOST_PYTHON_INDEXING_MULTIMAP_HPP 19 #define BOOST_PYTHON_INDEXING_MULTIMAP_HPP 21 #include <indexing_suite/container_traits.hpp> 22 #include <indexing_suite/container_suite.hpp> 23 #include <indexing_suite/algorithms.hpp> 24 #include <boost/detail/workaround.hpp> 27 #include <indexing_suite/pair.hpp> 29 namespace boost {
namespace python {
namespace indexing {
34 template<
typename Container>
40 # if BOOST_WORKAROUND (BOOST_MSVC, <= 1200) 42 typedef typename Container::referent_type value_type;
44 typedef typename Container::mapped_type value_type;
46 typedef value_type & reference;
47 typedef typename Container::key_type index_type;
48 typedef typename Container::key_type key_type;
50 typedef typename BOOST_PYTHON_INDEXING_CALL_TRAITS <value_type>::param_type
52 typedef typename BOOST_PYTHON_INDEXING_CALL_TRAITS <key_type>::param_type
54 typedef typename BOOST_PYTHON_INDEXING_CALL_TRAITS <index_type>::param_type
57 BOOST_STATIC_CONSTANT(
69 base_class::is_mutable,
81 template<
typename ContainerTraits,
typename Ovr = detail::no_overr
ide>
85 typename detail::maybe_override
86 <multimap_algorithms<ContainerTraits, Ovr>, Ovr>
90 typedef typename detail::maybe_override<self_type, Ovr>::type most_derived;
94 typedef typename Parent::container container;
95 typedef typename Parent::reference reference;
96 typedef typename Parent::index_param index_param;
97 typedef typename Parent::value_param value_param;
99 static boost::python::list
get (container &, index_param);
102 static boost::python::list keys( container & );
104 static void assign (container &, index_param, value_param);
105 static void insert (container &, index_param, value_param);
107 template<
typename PythonClass,
typename Policy>
108 static void visit_container_class( PythonClass &pyClass, Policy
const &policy)
110 ContainerTraits::visit_container_class (pyClass, policy);
111 pyClass.def(
"keys", &self_type::keys );
113 typedef BOOST_DEDUCED_TYPENAME most_derived::container::value_type value_type;
114 mapping::register_value_type< PythonClass, value_type, Policy >( pyClass );
116 pyClass.def(
"__iter__", python::iterator< BOOST_DEDUCED_TYPENAME most_derived::container >() );
124 method_set_type MethodMask = all_methods,
136 template<
typename ContainerTraits,
typename Ovr>
140 boost::python::list l;
141 typedef BOOST_DEDUCED_TYPENAME container::iterator iter_type;
142 for( iter_type index = c.lower_bound( ix ); index != c.upper_bound( ix ); ++index ){
143 boost::python::object v( index->second );
149 template<
typename ContainerTraits,
typename Ovr>
153 boost::python::list _keys;
156 typedef BOOST_DEDUCED_TYPENAME container::iterator iter_type;
157 for( iter_type index = most_derived::begin(c); index != most_derived::end(c); ++index ){
160 if( !_keys.count( index->first ) ){
161 _keys.append( index->first );
174 template<
typename ContainerTraits,
typename Ovr>
177 container &c, index_param ix, value_param val)
180 BOOST_DEDUCED_TYPENAME self_type::container_traits::index_type
181 , BOOST_DEDUCED_TYPENAME self_type::container_traits::value_type>
185 c.insert (pair_type (ix, val));
193 template<
typename ContainerTraits,
typename Ovr>
196 container &c, index_param ix, value_param val)
199 <BOOST_DEDUCED_TYPENAME self_type::container_traits::index_type,
200 BOOST_DEDUCED_TYPENAME self_type::container_traits::value_type>
204 c.insert (pair_type (ix, val) );
208 #endif // BOOST_PYTHON_INDEXING_MULTIMAP_HPP Definition: methods.hpp:90
Definition: algorithms.hpp:128
Definition: multimap.hpp:127
Definition: python_CEGUI.h:11
Definition: container_traits.hpp:59
Definition: container_suite.hpp:42
Definition: multimap.hpp:35
Definition: multimap.hpp:82