iterator_support

#include <compatibility/hpx/util/transform_iterator.hpp>

#include <compatibility/hpx/util/range.hpp>

#include <compatibility/hpx/util/iterator_facade.hpp>

#include <compatibility/hpx/util/iterator_adaptor.hpp>

#include <compatibility/hpx/util/iterator_range.hpp>

#include <compatibility/hpx/traits/is_range.hpp>

#include <compatibility/hpx/traits/is_iterator.hpp>

#include <hpx/iterator_support/transform_iterator.hpp>

namespace hpx
namespace util

Functions

template <typename Transformer, typename Iterator>
transform_iterator<Iterator, Transformer> make_transform_iterator(Iterator const &it, Transformer const &f)
template <typename Transformer, typename Iterator>
transform_iterator<Iterator, Transformer> make_transform_iterator(Iterator const &it)
template <typename Iterator, typename Transformer, typename Reference, typename Value, typename Category, typename Difference>
class transform_iterator : public hpx::util::iterator_adaptor<transform_iterator<Iterator, Transformer, Reference, Value, Category, Difference>, Iterator, value_type, iterator_category, reference_type, difference_type>

Public Functions

transform_iterator()
transform_iterator(Iterator const &it)
transform_iterator(Iterator const &it, Transformer const &f)
template <typename OtherIterator, typename OtherTransformer, typename OtherReference, typename OtherValue, typename OtherCategory, typename OtherDifference>
transform_iterator(transform_iterator<OtherIterator, OtherTransformer, OtherReference, OtherValue, OtherCategory, OtherDifference> const &t, typename std::enable_if<std::is_convertible<OtherIterator, Iterator>::value && std::is_convertible<OtherTransformer, Transformer>::value && std::is_convertible<OtherCategory, Category>::value && std::is_convertible<OtherDifference, Difference>::value>::type * = nullptr)
Transformer const &transformer() const

Private Types

typedef detail::transform_iterator_base<Iterator, Transformer, Reference, Value, Category, Difference>::type base_type

Private Functions

base_type::reference dereference() const

Private Members

Transformer transformer_

Friends

friend hpx::util::hpx::util::iterator_core_access

#include <hpx/iterator_support/range.hpp>

namespace hpx
namespace util
namespace range_adl

Functions

template <typename C, typename Iterator = typename detail::iterator<C>::type>
HPX_HOST_DEVICE Iterator hpx::util::range_adl::begin(C & c)
template <typename C, typename Iterator = typename detail::iterator<C const>::type>
HPX_HOST_DEVICE Iterator hpx::util::range_adl::begin(C const & c)
template <typename C, typename Sentinel = typename detail::sentinel<C>::type>
HPX_HOST_DEVICE Sentinel hpx::util::range_adl::end(C & c)
template <typename C, typename Sentinel = typename detail::sentinel<C const>::type>
HPX_HOST_DEVICE Sentinel hpx::util::range_adl::end(C const & c)
template <typename C, typename Iterator = typename detail::iterator<C const>::type, typename Sentinel = typename detail::sentinel<C const>::type>
HPX_HOST_DEVICE std::size_t hpx::util::range_adl::size(C const & c)
template <typename C, typename Iterator = typename detail::iterator<C const>::type, typename Sentinel = typename detail::sentinel<C const>::type>
HPX_HOST_DEVICE bool hpx::util::range_adl::empty(C const & c)

#include <hpx/iterator_support/iterator_facade.hpp>

Defines

HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type)
namespace hpx
namespace util

Functions

template <typename Derived, typename T, typename Category, typename Reference, typename Distance, typename Pointer>
HPX_HOST_DEVICE util::detail::postfix_increment_result<Derived, typename Derived::value_type, typename Derived::reference>::type hpx::util::operator++(iterator_facade < Derived, T, Category, Reference, Distance, Pointer > & i, int)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline, bool)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline, !, bool)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline, <=, bool)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline, >=, bool)
hpx::util::HPX_UTIL_ITERATOR_FACADE_INTEROP_HEAD(inline, -, typename std::iterator_traits< Derived2 >::difference_type)
template <typename Derived, typename T, typename Category, typename Reference, typename Distance, typename Pointer>
HPX_HOST_DEVICE Derived hpx::util::operator+(iterator_facade < Derived, T, Category, Reference, Distance, Pointer > const & it, typename Derived::difference_type n)
template <typename Derived, typename T, typename Category, typename Reference, typename Distance, typename Pointer>
HPX_HOST_DEVICE Derived hpx::util::operator+(typename Derived::difference_type n, iterator_facade < Derived, T, Category, Reference, Distance, Pointer > const & it)
class iterator_core_access

Public Static Functions

template <typename Iterator1, typename Iterator2>
static HPX_HOST_DEVICE bool hpx::util::iterator_core_access::equal(Iterator1 const & lhs, Iterator2 const & rhs)
template <typename Iterator>
static HPX_HOST_DEVICE void hpx::util::iterator_core_access::increment(Iterator & it)
template <typename Iterator>
static HPX_HOST_DEVICE void hpx::util::iterator_core_access::decrement(Iterator & it)
template <typename Reference, typename Iterator>
static HPX_HOST_DEVICE Reference hpx::util::iterator_core_access::dereference(Iterator const & it)
template <typename Iterator, typename Distance>
static HPX_HOST_DEVICE void hpx::util::iterator_core_access::advance(Iterator & it, Distance n)
template <typename Iterator1, typename Iterator2>
static HPX_HOST_DEVICE std::iterator_traits<Iterator1>::difference_type hpx::util::iterator_core_access::distance_to(Iterator1 const & lhs, Iterator2 const & rhs)
template <typename Derived, typename T, typename Category, typename Reference = T&, typename Distance = std::ptrdiff_t, typename Pointer = void>
struct iterator_facade : public hpx::util::detail::iterator_facade_base<Derived, T, Category, Reference, Distance, Pointer>

Subclassed by hpx::util::iterator_adaptor< Derived, Base, Value, Category, Reference, Difference, Pointer >

Public Functions

HPX_HOST_DEVICE iterator_facade()

Protected Types

typedef iterator_facade<Derived, T, Category, Reference, Distance, Pointer> iterator_adaptor_

Private Types

typedef detail::iterator_facade_base<Derived, T, Category, Reference, Distance, Pointer> base_type

#include <hpx/iterator_support/iterator_adaptor.hpp>

namespace hpx
namespace util
template <typename Derived, typename Base, typename Value = void, typename Category = void, typename Reference = void, typename Difference = void, typename Pointer = void>
class iterator_adaptor : public hpx::util::iterator_facade<Derived, value_type, iterator_category, reference_type, difference_type, Pointer>

Subclassed by hpx::util::transform_iterator< Iterator, Transformer, Reference, Value, Category, Difference >

Public Types

typedef Base base_type

Public Functions

HPX_HOST_DEVICE iterator_adaptor()
HPX_HOST_DEVICE iterator_adaptor(Base const &iter)
HPX_HOST_DEVICE Base const& hpx::util::iterator_adaptor::base() const

Protected Types

typedef hpx::util::detail::iterator_adaptor_base<Derived, Base, Value, Category, Reference, Difference, Pointer>::type base_adaptor_type
typedef iterator_adaptor<Derived, Base, Value, Category, Reference, Difference, Pointer> iterator_adaptor_

Protected Functions

HPX_HOST_DEVICE Base const& hpx::util::iterator_adaptor::base_reference() const
HPX_HOST_DEVICE Base& hpx::util::iterator_adaptor::base_reference()

Private Functions

HPX_HOST_DEVICE base_adaptor_type::reference hpx::util::iterator_adaptor::dereference() const
template <typename OtherDerived, typename OtherIterator, typename V, typename C, typename R, typename D, typename P>
HPX_HOST_DEVICE bool hpx::util::iterator_adaptor::equal(iterator_adaptor < OtherDerived, OtherIterator, V, C, R, D, P > const & x) const
template <typename DifferenceType>
HPX_HOST_DEVICE void hpx::util::iterator_adaptor::advance(DifferenceType n)
HPX_HOST_DEVICE void hpx::util::iterator_adaptor::increment()
template <typename Iterator = Base, typename Enable = typename std::enable_if< traits::is_bidirectional_iterator<Iterator>::value>::type>
HPX_HOST_DEVICE void hpx::util::iterator_adaptor::decrement()
template <typename OtherDerived, typename OtherIterator, typename V, typename C, typename R, typename D, typename P>
HPX_HOST_DEVICE base_adaptor_type::difference_type hpx::util::iterator_adaptor::distance_to(iterator_adaptor < OtherDerived, OtherIterator, V, C, R, D, P > const & y) const

Private Members

Base iterator_

Friends

friend hpx::util::hpx::util::iterator_core_access

#include <hpx/iterator_support/iterator_range.hpp>

namespace hpx
namespace util

Functions

template <typename Range, typename Iterator = typename traits::range_iterator<Range>::type, typename Sentinel = typename traits::range_iterator<Range>::type>
std::enable_if<traits::is_range<Range>::value, iterator_range<Iterator, Sentinel>>::type make_iterator_range(Range &r)
template <typename Range, typename Iterator = typename traits::range_iterator<Range const>::type, typename Sentinel = typename traits::range_iterator<Range const>::type>
std::enable_if<traits::is_range<Range>::value, iterator_range<Iterator, Sentinel>>::type make_iterator_range(Range const &r)
template <typename Iterator, typename Sentinel = Iterator>
std::enable_if<traits::is_iterator<Iterator>::value, iterator_range<Iterator, Sentinel>>::type make_iterator_range(Iterator iterator, Sentinel sentinel)
template <typename Iterator, typename Sentinel = Iterator>
class iterator_range

Public Functions

iterator_range()
iterator_range(Iterator iterator, Sentinel sentinel)
Iterator begin() const
Iterator end() const
std::ptrdiff_t size() const
bool empty() const

Private Members

Iterator _iterator
Sentinel _sentinel

#include <hpx/iterator_support/zip_iterator.hpp>

template <typename F, typename... Ts>
template<>
struct lift_zipped_iterators<F, util::zip_iterator<Ts...>>

Public Types

typedef util::zip_iterator<Ts...>::iterator_tuple_type tuple_type
typedef util::tuple<typename element_result_of<typename F::template apply<Ts>, Ts>::type...> result_type

Public Static Functions

template <std::size_t... Is, typename... Ts_>
static result_type call(util::detail::pack_c<std::size_t, Is...>, util::tuple<Ts_...> const &t)
template <typename... Ts_>
static result_type call(util::zip_iterator<Ts_...> const &iter)
namespace hpx
namespace traits
namespace functional
template <typename F, typename... Ts>
template<>
struct lift_zipped_iterators<F, util::zip_iterator<Ts...>>

Public Types

typedef util::zip_iterator<Ts...>::iterator_tuple_type tuple_type
typedef util::tuple<typename element_result_of<typename F::template apply<Ts>, Ts>::type...> result_type

Public Static Functions

template <std::size_t... Is, typename... Ts_>
static result_type call(util::detail::pack_c<std::size_t, Is...>, util::tuple<Ts_...> const &t)
template <typename... Ts_>
static result_type call(util::zip_iterator<Ts_...> const &iter)
namespace util

Functions

template <typename… Ts>
HPX_HOST_DEVICE zip_iterator<typename decay<Ts>::type...> hpx::util::make_zip_iterator(Ts &&... vs)
template <typename... Ts>
class zip_iterator : public hpx::util::detail::zip_iterator_base<tuple<Ts...>, zip_iterator<Ts...>>

Public Functions

HPX_HOST_DEVICE zip_iterator()
HPX_HOST_DEVICE zip_iterator(Ts const&... vs)
HPX_HOST_DEVICE zip_iterator(tuple<Ts...> &&t)
HPX_HOST_DEVICE zip_iterator(zip_iterator const &other)
HPX_HOST_DEVICE zip_iterator(zip_iterator &&other)
HPX_HOST_DEVICE zip_iterator& hpx::util::zip_iterator::operator=(zip_iterator const & other)
HPX_HOST_DEVICE zip_iterator& hpx::util::zip_iterator::operator=(zip_iterator && other)
template <typename… Ts_>
HPX_HOST_DEVICE std::enable_if< detail::are_tuples_compatible_not_same< typename zip_iterator::iterator_tuple_type, typename zip_iterator<Ts_...>::iterator_tuple_type&&>::value, zip_iterator&>::type hpx::util::zip_iterator::operator=(zip_iterator < Ts_... > const & other)
template <typename… Ts_>
HPX_HOST_DEVICE std::enable_if< detail::are_tuples_compatible_not_same< typename zip_iterator::iterator_tuple_type, typename zip_iterator<Ts_...>::iterator_tuple_type&&>::value, zip_iterator&>::type hpx::util::zip_iterator::operator=(zip_iterator < Ts_... > && other)

Private Types

typedef detail::zip_iterator_base<tuple<Ts...>, zip_iterator<Ts...>> base_type
template <typename... Ts>
template<>
class zip_iterator<tuple<Ts...>> : public hpx::util::detail::zip_iterator_base<tuple<Ts...>, zip_iterator<tuple<Ts...>>>

Public Functions

HPX_HOST_DEVICE zip_iterator()
HPX_HOST_DEVICE zip_iterator(Ts const&... vs)
HPX_HOST_DEVICE zip_iterator(tuple<Ts...> &&t)
HPX_HOST_DEVICE zip_iterator(zip_iterator const &other)
HPX_HOST_DEVICE zip_iterator(zip_iterator &&other)
HPX_HOST_DEVICE zip_iterator& hpx::util::zip_iterator::operator=(zip_iterator const & other)
HPX_HOST_DEVICE zip_iterator& hpx::util::zip_iterator::operator=(zip_iterator && other)
template <typename… Ts_>
HPX_HOST_DEVICE std::enable_if< detail::are_tuples_compatible_not_same< typename zip_iterator::iterator_tuple_type, typename zip_iterator<Ts_...>::iterator_tuple_type&&>::value, zip_iterator&>::type hpx::util::zip_iterator::operator=(zip_iterator < Ts_... > const & other)
template <typename… Ts_>
HPX_HOST_DEVICE std::enable_if< detail::are_tuples_compatible_not_same< typename zip_iterator::iterator_tuple_type, typename zip_iterator<Ts_...>::iterator_tuple_type&&>::value, zip_iterator&>::type hpx::util::zip_iterator::operator=(zip_iterator < Ts_... > && other)

Private Types

typedef detail::zip_iterator_base<tuple<Ts...>, zip_iterator<tuple<Ts...>>> base_type

#include <hpx/iterator_support/traits/is_range.hpp>

namespace hpx
namespace traits
template <typename R>
template<>
struct range_traits<R, true> : public std::iterator_traits<util::detail::iterator<R>::type>

Public Types

typedef util::detail::iterator<R>::type iterator_type
typedef util::detail::sentinel<R>::type sentinel_type

#include <hpx/iterator_support/traits/is_iterator.hpp>