13#ifndef JOAQUINTIDES_TRANSRANGER_VIEW_HPP
14#define JOAQUINTIDES_TRANSRANGER_VIEW_HPP
20#include <range/v3/range_fwd.hpp>
21#include <range/v3/utility/semiregular_box.hpp>
29 namespace detail::view {
36 std::remove_reference_t<decltype(*std::declval<typename Ranger::cursor>())>>;
54 decltype(
auto)
operator*()
const {
return *
p; }
69 ranges::semiregular_box<Ranger>
rgr;
71 typename Ranger::cursor
p;
74 Iterator&
final() {
return static_cast<Iterator&
>(*this); }
88 this->
end = this->
rgr([&](
auto q) {
113 this->
end = this->
rgr([&](
auto q) {
123 template <
typename Ranger,
typename Iterator>
class view :
public ranges::view_base {
126 view(Ranger rgr) : rgr{std::move(rgr)} {}
128 auto begin() {
return ++Iterator{rgr}; }
132 ranges::semiregular_box<Ranger> rgr;
147 using namespace detail::view;
148 return view<Ranger, input_iterator<Ranger>>{std::move(rgr)};
162 using namespace detail::view;
163 return view<Ranger, forward_iterator<Ranger>>{std::move(rgr)};
Definition transranger_view.hpp:96
friend bool operator==(const forward_iterator &x, const forward_iterator &y)
Definition transranger_view.hpp:102
friend bool operator!=(const forward_iterator &x, const forward_iterator &y)
Definition transranger_view.hpp:105
Definition transranger_view.hpp:33
std::remove_cv_t< std::remove_reference_t< decltype(*std::declval< typename Ranger::cursor >())> > value_type
Definition transranger_view.hpp:36
std::ptrdiff_t difference_type
Definition transranger_view.hpp:37
friend bool operator==(const iterator_base &x, const sentinel &)
Definition transranger_view.hpp:65
friend bool operator!=(const iterator_base &x, const sentinel &y)
Definition transranger_view.hpp:66
Iterator & operator++()
Definition transranger_view.hpp:55
Ranger::cursor p
Definition transranger_view.hpp:71
iterator_base & operator=(const iterator_base &x)
Definition transranger_view.hpp:43
ranges::semiregular_box< Ranger > rgr
Definition transranger_view.hpp:69
iterator_base(const Ranger &rgr)
Definition transranger_view.hpp:40
bool end
Definition transranger_view.hpp:70
iterator_base(const iterator_base &)=default
Iterator operator++(int)
Definition transranger_view.hpp:59
Definition transranger_view.hpp:123
auto end()
Definition transranger_view.hpp:129
view(Ranger rgr)
Definition transranger_view.hpp:126
auto begin()
Definition transranger_view.hpp:128
Definition transranger_view.hpp:25
auto forward_view(Ranger rgr)
Create a forward view from a ranger.
Definition transranger_view.hpp:161
auto input_view(Ranger rgr)
Create an input view from a ranger.
Definition transranger_view.hpp:146
Definition transranger_view.hpp:31