12#ifndef ZYPP_BASE_ITERATOR_H
13#define ZYPP_BASE_ITERATOR_H
18#include <boost/functional.hpp>
19#include <boost/iterator/filter_iterator.hpp>
20#include <boost/iterator/transform_iterator.hpp>
21#include <boost/iterator/function_output_iterator.hpp>
23#include <zypp-core/base/Iterable.h>
95 using boost::filter_iterator;
96 using boost::make_filter_iterator;
99 template<
class TFilter,
class TContainer>
103 return make_filter_iterator( f, c.begin(), c.end() );
107 template<
class TFilter,
class TContainer>
111 return make_filter_iterator( TFilter(), c.begin(), c.end() );
115 template<
class TFilter,
class TContainer>
119 return make_filter_iterator( f, c.end(), c.end() );
123 template<
class TFilter,
class TContainer>
127 return make_filter_iterator( TFilter(), c.end(), c.end() );
148 using boost::transform_iterator;
149 using boost::make_transform_iterator;
154 template<
class TPair>
157 const typename TPair::first_type &
operator()(
const TPair & pair_r )
const
158 {
return pair_r.first; }
164 template<
class TPair>
167 const typename TPair::second_type &
operator()(
const TPair & pair_r )
const
168 {
return pair_r.second; }
210 struct MapKVIteratorTraits
215 typedef typename TMap::key_type
KeyType;
220 typedef typename TMap::mapped_type
ValueType;
229 {
return make_transform_iterator( map_r.begin(), GetPairFirst<typename TMap::value_type>() ); }
234 {
return make_transform_iterator( map_r.end(), GetPairFirst<typename TMap::value_type>() ); }
239 {
return make_transform_iterator( map_r.begin(), GetPairSecond<typename TMap::value_type>() ); }
244 {
return make_transform_iterator( map_r.end(), GetPairSecond<typename TMap::value_type>() ); }
249 {
return make_transform_iterator( map_r.lower_bound( key_r ), GetPairFirst<typename TMap::value_type>() ); }
254 {
return make_transform_iterator( map_r.upper_bound( key_r ), GetPairFirst<typename TMap::value_type>() ); }
259 {
return make_transform_iterator( map_r.lower_bound( key_r ), GetPairSecond<typename TMap::value_type>() ); }
264 {
return make_transform_iterator( map_r.upper_bound( key_r ), GetPairSecond<typename TMap::value_type>() ); }
269 inline Iterable<typename MapKVIteratorTraits<TMap>::Key_const_iterator>
make_map_key_Iterable(
const TMap & map_r )
274 inline Iterable<typename MapKVIteratorTraits<TMap>::Value_const_iterator>
make_map_value_Iterable(
const TMap & map_r )
292 using boost::function_output_iterator;
293 using boost::make_function_output_iterator;
An iterator over the subset of elements of some sequence which satisfy a given predicate.
Easy-to use interface to the ZYPP dependency resolver.
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_begin(const TMap &map_r)
Convenience to create the key iterator from container::begin()
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_upper_bound(const TMap &map_r, const typename TMap::key_type &key_r)
Convenience to create the key iterator from container::upper_bound()
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_lower_bound(const TMap &map_r, const typename TMap::key_type &key_r)
Convenience to create the value iterator from container::lower_bound()
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_begin(const TMap &map_r)
Convenience to create the value iterator from container::begin()
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_begin(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::begin().
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_end(const TMap &map_r)
Convenience to create the key iterator from container::end()
Iterable< typename MapKVIteratorTraits< TMap >::Key_const_iterator > make_map_key_Iterable(const TMap &map_r)
Convenience to create an Iterable over the container keys.
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_end(const TMap &map_r)
Convenience to create the value iterator from container::end()
Iterable< typename MapKVIteratorTraits< TMap >::Value_const_iterator > make_map_value_Iterable(const TMap &map_r)
Convenience to create an Iterable over the container values.
MapKVIteratorTraits< TMap >::Value_const_iterator make_map_value_upper_bound(const TMap &map_r, const typename TMap::key_type &key_r)
Convenience to create the value iterator from container::upper_bound()
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_end(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::end().
MapKVIteratorTraits< TMap >::Key_const_iterator make_map_key_lower_bound(const TMap &map_r, const typename TMap::key_type &key_r)
Convenience to create the key iterator from container::lower_bound()
const TPair::first_type & operator()(const TPair &pair_r) const
const TPair::second_type & operator()(const TPair &pair_r) const
TMap::mapped_type ValueType
The maps value (mapped) type.
transform_iterator< GetPairFirst< typename MapType::value_type >, typename MapType::const_iterator > Key_const_iterator
The key iterator type.
TMap MapType
The map type.
TMap::key_type KeyType
The maps key type.
transform_iterator< GetPairSecond< typename MapType::value_type >, typename MapType::const_iterator > Value_const_iterator
The value iterator type.