23 #ifndef BOOST_PYTHON_INDEXING_ITERATOR_RANGE_HPP 24 #define BOOST_PYTHON_INDEXING_ITERATOR_RANGE_HPP 29 #include <boost/type_traits.hpp> 30 #include <boost/type_traits/ice.hpp> 31 #include <boost/detail/workaround.hpp> 32 #include <boost/iterator/iterator_traits.hpp> 33 #include <indexing_suite/container_traits.hpp> 34 #include <indexing_suite/container_suite.hpp> 35 #include <indexing_suite/algorithms.hpp> 36 #include <indexing_suite/iterator_traits.hpp> 38 namespace boost {
namespace python {
namespace indexing {
39 template<
typename Iterator>
43 typedef typename BOOST_PYTHON_INDEXING_CALL_TRAITS <Iterator>::param_type
46 typedef ::boost::detail::iterator_traits<Iterator> std_traits;
49 typedef typename std_traits::reference reference;
50 typedef Iterator iterator;
51 typedef typename std_traits::difference_type size_type;
52 typedef typename std_traits::difference_type difference_type;
53 typedef typename std_traits::value_type value_type;
54 typedef typename std_traits::pointer pointer;
56 typedef iterator const_iterator;
70 iterator begin()
const;
75 size_type size ()
const;
76 reference operator[] (size_type)
const;
77 reference at (size_type)
const;
87 #if !BOOST_WORKAROUND (BOOST_MSVC, <= 1200) 91 template<
typename T, std::
size_t N> T *begin (T (&array)[N]);
92 template<
typename T, std::
size_t N> T *end (T (&array)[N]);
94 # define BOOST_MAKE_ITERATOR_RANGE ::boost::python::indexing::make_iterator_range 98 # define BOOST_MAKE_ITERATOR_RANGE(array) ::boost::python::indexing::make_iterator_range ( (array), ((array) + sizeof(array) / sizeof((array)[0]))) 101 template<
typename Iterator>
103 iterator_param begin, iterator_param end)
109 template<
typename Iterator>
112 : m_begin (pair.first),
117 template<
typename Iterator>
118 typename iterator_range<Iterator>::iterator
124 template<
typename Iterator>
125 typename iterator_range<Iterator>::iterator
131 template<
typename Iterator>
132 typename iterator_range<Iterator>::size_type
135 return std::distance (begin(), end());
138 template<
typename Iterator>
139 typename iterator_range<Iterator>::reference
142 iterator temp (begin());
143 std::advance (temp, index);
147 template<
typename Iterator>
148 typename iterator_range<Iterator>::reference
153 throw std::out_of_range
154 (std::string (
"iterator_range: index out of range"));
159 return (*
this)[index];
168 #if !BOOST_WORKAROUND (BOOST_MSVC, <= 1200) 169 template<
typename T, std::
size_t N>
170 T *begin (T (&array)[N]) {
174 template<
typename T, std::
size_t N>
175 T *end (T (&array)[N]) {
179 template<
typename T, std::
size_t N>
185 template<
typename Container,
typename ValueTraits = detail::no_overr
ide>
191 typedef ::boost::python::indexing::iterator_traits<
192 typename Container::iterator
196 typedef typename base_class::value_traits_type value_traits_type;
200 BOOST_STATIC_CONSTANT(
204 type_traits::ice_not<
205 value_traits_type::equality_comparable
213 type_traits::ice_not<
214 value_traits_type::less_than_comparable
221 BOOST_STATIC_CONSTANT(
224 iterator_traits_type::supported_methods & ~disabled_methods);
227 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) 233 template <
typename Iterator>
250 method_set_type MethodMask = all_methods,
260 #endif // BOOST_PYTHON_INDEXING_ITERATOR_RANGE_HPP Definition: methods.hpp:90
Definition: algorithms.hpp:42
Definition: python_CEGUI.h:9
Definition: container_traits.hpp:59
Definition: iterator_range.hpp:40
Definition: container_suite.hpp:42
Definition: iterator_range.hpp:253
Definition: iterator_range.hpp:186
Definition: algorithms.hpp:532
Definition: iterator_traits.hpp:208