33 #include <boost/range.hpp>
42 template<
template<
typename>
class F,
typename V>
43 using MF =
typename F<V>::type;
52 template<
template<
typename>
class,
template<
typename>
class,
typename,
template<
typename,
typename>
class>
class This,
53 template<typename> class KeyMF,
54 template<typename> class ValueMF,
56 template<typename, typename> class PairType,
57 typename KeyType =
MF<KeyMF, decltype (Iter {}.key ())>,
58 typename ValueType =
MF<ValueMF, decltype (Iter {}.value ())>
61 This<KeyMF, ValueMF, Iter, PairType>,
63 PairType<KeyType, ValueType>,
65 PairType<KeyType, ValueType>
69 template<
typename>
class KeyMF,
70 template<
typename>
class ValueMF,
72 template<
typename,
typename>
class PairType
87 typename Super_t::reference dereference ()
const
89 return { this->base ().key (), this->base ().value () };
94 template<
typename>
class KeyMF,
95 template<
typename>
class ValueMF,
98 template<
typename K,
typename V>
class PairType
101 ,
public boost::iterator_range<StlAssocIteratorAdaptor<KeyMF, ValueMF, Iter, PairType>>
105 : std::tuple<Assoc> { std::move (assoc) }
106 , boost::iterator_range<StlAssocIteratorAdaptor<KeyMF, ValueMF, Iter, PairType>> { std::get<0> (*this).begin (), std::get<0> (*this).end () }
112 template<
typename>
class KeyMF,
113 template<
typename>
class ValueMF,
116 template<
typename K,
typename V>
class PairType
118 struct StlAssocRange<KeyMF, ValueMF, Iter, Assoc&, PairType> :
public boost::iterator_range<StlAssocIteratorAdaptor<KeyMF, ValueMF, Iter, PairType>>
122 : boost::iterator_range<
StlAssocIteratorAdaptor<KeyMF, ValueMF, Iter, PairType>> { assoc.begin (), assoc.end () }
157 template<
template<
typename K,
typename V>
class PairType = std::pair,
typename Assoc>
160 return { std::forward<Assoc> (assoc) };
163 template<
template<
typename K,
typename V>
class PairType = std::pair,
typename Assoc>
166 return { std::forward<Assoc> (assoc) };
auto Stlize(Assoc &&assoc) -> detail::StlAssocRange< detail::Identity, detail::Identity, decltype(assoc.begin()), Assoc, PairType >
Converts an Qt's associative sequence assoc to an STL-like iteratable range.
StlAssocRange(Assoc &&assoc)
QString Escape(const QString &str)
boost::iterator_adaptor< This< KeyMF, ValueMF, Iter, PairType >, Iter, PairType< KeyType, ValueType >, boost::use_default, PairType< KeyType, ValueType > > IteratorAdaptorBase
friend class boost::iterator_core_access
auto StlizeCopy(Assoc &&assoc) -> detail::StlAssocRange< std::decay, std::decay, decltype(assoc.begin()), Assoc, PairType >
StlAssocIteratorAdaptor(Iter it)
StlAssocRange(Assoc &assoc)
StlAssocIteratorAdaptor()=default