1 #ifndef _theplu_yat_utility_iterator_traits_
2 #define _theplu_yat_utility_iterator_traits_
27 #include "DataWeight.h"
29 #include <boost/mpl/logical.hpp>
30 #include <boost/type_traits/is_const.hpp>
31 #include <boost/type_traits/is_convertible.hpp>
32 #include <boost/type_traits/is_same.hpp>
33 #include <boost/type_traits/remove_reference.hpp>
34 #include <boost/utility/enable_if.hpp>
63 template <
typename T,
typename Enable =
void>
94 template <
class Iterator>
98 typedef typename std::iterator_traits<Iterator>::value_type value;
116 template <
class T1,
class T2>
144 template <
class T1,
class T2>
157 template <
class T1,
class T2,
class T3>
182 template <
class Iter>
207 typedef char (&no)[2];
216 yes has_mutable(
double&);
225 no has_mutable(
const T&);
234 template <
class Iter>
241 sizeof(has_mutable((*iter).data())) ==
sizeof(yes);
252 template <
class Iter>
259 sizeof(has_mutable((*iter).weight())) ==
sizeof(yes);
274 template<
typename Iter>
276 :
public boost::is_same<weighted_iterator_tag
277 , typename weighted_iterator_traits<Iter>::type>
285 template<
typename Iter>
287 :
public boost::is_same<unweighted_iterator_tag
288 , typename weighted_iterator_traits<Iter>::type>
299 template <
typename Iter,
typename Enable =
void>
349 template <
typename Iter>
351 typename boost::enable_if<is_weighted<Iter> >::type >
390 template <
typename Iter>