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>
110 iterator_range<Iterator>
111 ::iterator_range (std::pair<iterator, iterator>
const &pair)
112 : m_begin (pair.first),
117 template<
typename Iterator>
118 typename iterator_range<Iterator>::iterator
119 iterator_range<Iterator>::begin()
const
124 template<
typename Iterator>
125 typename iterator_range<Iterator>::iterator
126 iterator_range<Iterator>::end()
const
131 template<
typename Iterator>
132 typename iterator_range<Iterator>::size_type
133 iterator_range<Iterator>::size()
const
135 return std::distance (begin(), end());
138 template<
typename Iterator>
139 typename iterator_range<Iterator>::reference
140 iterator_range<Iterator>::operator[](size_type index)
const
142 iterator temp (begin());
143 std::advance (temp, index);
147 template<
typename Iterator>
148 typename iterator_range<Iterator>::reference
149 iterator_range<Iterator>::at (size_type index)
const
153 throw std::out_of_range
154 (std::string (
"iterator_range: index out of range"));
159 return (*
this)[index];
163 template<
typename T> iterator_range<T *> make_iterator_range (T *p1, T* p2)
165 return iterator_range<T *> (p1, p2);
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>
180 iterator_range<T *> make_iterator_range (T (&array)[N]) {
181 return iterator_range<T *>(begin (array), end (array));
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