// // transform_iterator.h // stream // // Created by Sam Jaffe on 4/2/23. // #pragma once #include #include namespace stream::ranges { template class transform_iterator : public proxy> { private: using super_t = proxy>; private: Proj projection_; public: transform_iterator() = default; transform_iterator(It iter, Proj projection) : super_t(std::move(iter)), projection_(projection) {} decltype(auto) dereference() const { return projection_(super_t::dereference()); } bool at_end() const { return super_t::impl().at_end(); } }; } MAKE_ITERATOR_FACADE_TYPEDEFS_T(stream::ranges::transform_iterator);