retdec
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
retdec::utils::FilterIterator< Iterator > Class Template Reference

An adapter of an iterator range in which some elements of the range are skipped. More...

#include <filter_iterator.h>

Public Types

using value_type = typename std::iterator_traits< Iterator >::value_type
 
using reference = typename std::iterator_traits< Iterator >::reference
 
using pointer = typename std::iterator_traits< Iterator >::pointer
 
using difference_type = typename std::iterator_traits< Iterator >::difference_type
 
using iterator_category = std::forward_iterator_tag
 

Public Member Functions

template<typename Predicate >
 FilterIterator (Iterator begin, Iterator end, Predicate &&predicate)
 Creates an iterator over the given range. More...
 
template<typename Container , typename Predicate >
 FilterIterator (Container &container, Predicate &&predicate)
 Creates an iterator over the given container. More...
 
 FilterIterator (Iterator end)
 Creates an end iterator. More...
 
 FilterIterator (const FilterIterator &other)=default
 
 FilterIterator (FilterIterator &&other)=default
 
 ~FilterIterator ()=default
 
FilterIteratoroperator= (const FilterIterator &other)=default
 
reference operator* () const
 
pointer operator-> () const
 
bool operator== (const FilterIterator &other) const
 
bool operator!= (const FilterIterator &other) const
 
FilterIteratoroperator++ ()
 

Private Member Functions

void skipElementsWhilePredicateIsFalse ()
 

Private Attributes

Iterator current
 
Iterator end
 
std::function< bool(reference)> predicate
 

Detailed Description

template<typename Iterator>
class retdec::utils::FilterIterator< Iterator >

An adapter of an iterator range in which some elements of the range are skipped.

The filter iterator adapter creates a view of an iterator range in which some elements of the range are skipped. A predicate function object controls which elements are skipped. When the predicate is applied to an element, if it returns true, then the element is retained, and if it returns false, then the element is skipped over. When skipping over elements, it is necessary for the filter adapter to know when to stop so as to avoid going past the end of the underlying range. A filter iterator is, therefore, constructed with pair of iterators indicating the range of elements in the unfiltered sequence to be traversed and a predicate.

Based on filter_iterator from Boost (http://www.boost.org/doc/libs/master/libs/iterator/doc/filter_iterator.html). See it for more information. Note, however, that our interface differs from the one provided by Boost.

Template Parameters
IteratorType of the iterators in the range.

Member Typedef Documentation

◆ difference_type

template<typename Iterator >
using retdec::utils::FilterIterator< Iterator >::difference_type = typename std::iterator_traits<Iterator>::difference_type

◆ iterator_category

template<typename Iterator >
using retdec::utils::FilterIterator< Iterator >::iterator_category = std::forward_iterator_tag

◆ pointer

template<typename Iterator >
using retdec::utils::FilterIterator< Iterator >::pointer = typename std::iterator_traits<Iterator>::pointer

◆ reference

template<typename Iterator >
using retdec::utils::FilterIterator< Iterator >::reference = typename std::iterator_traits<Iterator>::reference

◆ value_type

template<typename Iterator >
using retdec::utils::FilterIterator< Iterator >::value_type = typename std::iterator_traits<Iterator>::value_type

Constructor & Destructor Documentation

◆ FilterIterator() [1/5]

template<typename Iterator >
template<typename Predicate >
retdec::utils::FilterIterator< Iterator >::FilterIterator ( Iterator  begin,
Iterator  end,
Predicate &&  predicate 
)
inline

Creates an iterator over the given range.

Parameters
[in]beginStart of the range.
[in]endEnd of the range.
[in]predicatePredicate for determining which elements should be retained.

◆ FilterIterator() [2/5]

template<typename Iterator >
template<typename Container , typename Predicate >
retdec::utils::FilterIterator< Iterator >::FilterIterator ( Container &  container,
Predicate &&  predicate 
)
inline

Creates an iterator over the given container.

Parameters
[in]containerContainer to be iterated.
[in]predicatePredicate for determining which elements should be retained.

This constructor is a handy alias for the following code:

FilterIterator(container.begin(), container.end(), predicate)
FilterIterator(Iterator begin, Iterator end, Predicate &&predicate)
Creates an iterator over the given range.
Definition: filter_iterator.h:59
std::function< bool(reference)> predicate
Definition: filter_iterator.h:128

◆ FilterIterator() [3/5]

template<typename Iterator >
retdec::utils::FilterIterator< Iterator >::FilterIterator ( Iterator  end)
inline

Creates an end iterator.

◆ FilterIterator() [4/5]

template<typename Iterator >
retdec::utils::FilterIterator< Iterator >::FilterIterator ( const FilterIterator< Iterator > &  other)
default

◆ FilterIterator() [5/5]

template<typename Iterator >
retdec::utils::FilterIterator< Iterator >::FilterIterator ( FilterIterator< Iterator > &&  other)
default

◆ ~FilterIterator()

template<typename Iterator >
retdec::utils::FilterIterator< Iterator >::~FilterIterator ( )
default

Member Function Documentation

◆ operator!=()

template<typename Iterator >
bool retdec::utils::FilterIterator< Iterator >::operator!= ( const FilterIterator< Iterator > &  other) const
inline

◆ operator*()

template<typename Iterator >
reference retdec::utils::FilterIterator< Iterator >::operator* ( ) const
inline

◆ operator++()

template<typename Iterator >
FilterIterator& retdec::utils::FilterIterator< Iterator >::operator++ ( )
inline

◆ operator->()

template<typename Iterator >
pointer retdec::utils::FilterIterator< Iterator >::operator-> ( ) const
inline

◆ operator=()

template<typename Iterator >
FilterIterator& retdec::utils::FilterIterator< Iterator >::operator= ( const FilterIterator< Iterator > &  other)
default

◆ operator==()

template<typename Iterator >
bool retdec::utils::FilterIterator< Iterator >::operator== ( const FilterIterator< Iterator > &  other) const
inline

◆ skipElementsWhilePredicateIsFalse()

template<typename Iterator >
void retdec::utils::FilterIterator< Iterator >::skipElementsWhilePredicateIsFalse ( )
inlineprivate

Member Data Documentation

◆ current

template<typename Iterator >
Iterator retdec::utils::FilterIterator< Iterator >::current
private

◆ end

template<typename Iterator >
Iterator retdec::utils::FilterIterator< Iterator >::end
private

◆ predicate

template<typename Iterator >
std::function<bool (reference)> retdec::utils::FilterIterator< Iterator >::predicate
private

The documentation for this class was generated from the following file: