33 #include <boost/range.hpp> 42 template<
template<
typename,
43 template<
typename,
typename>
class>
class This,
44 typename Iter, template<typename, typename> class PairType>
48 PairType<decltype (Iter {}.key ()), decltype (Iter {}.value ())>,
50 PairType<decltype (Iter {}.key ()), decltype (Iter {}.value ())>
53 template<
typename Iter,
template<
typename,
typename>
class PairType>
67 typename Super_t::reference dereference ()
const 69 return { this->base ().key (), this->base ().value () };
73 template<
typename Iter,
typename Assoc,
template<
typename K,
typename V>
class PairType>
75 ,
public boost::iterator_range<StlAssocIteratorAdaptor<Iter, PairType>>
79 :
std::tuple<Assoc> { std::move (assoc) }
80 , boost::iterator_range<StlAssocIteratorAdaptor<Iter, PairType>> { std::get<0> (*this).begin (), std::get<0> (*this).end () }
85 template<
typename Iter,
typename Assoc,
template<
typename K,
typename V>
class PairType>
86 struct StlAssocRange<Iter, Assoc&, PairType> :
public boost::iterator_range<StlAssocIteratorAdaptor<Iter, PairType>>
125 template<
template<
typename K,
typename V>
class PairType = std::pair,
typename Assoc>
128 return { std::forward<Assoc> (assoc) };
StlAssocIteratorAdaptor(Iter it)
QString Escape(const QString &str)
friend class boost::iterator_core_access
auto Stlize(Assoc &&assoc) -> detail::StlAssocRange< decltype(assoc.begin()), Assoc, PairType >
Converts an Qt's associative sequence assoc to an STL-like iteratable range.
boost::iterator_adaptor< This< Iter, PairType >, Iter, PairType< decltype(Iter{}.key()), decltype(Iter{}.value())>, boost::use_default, PairType< decltype(Iter{}.key()), decltype(Iter{}.value())> > IteratorAdaptorBase
StlAssocRange(Assoc &assoc)
StlAssocRange(Assoc &&assoc)
StlAssocIteratorAdaptor()=default