#pragma once #include "fwd.h" #include namespace NYql::NPureCalc::NPrivate { template class TMappingStream final: public IStream { private: THolder> Old_; TFunctor Functor_; public: TMappingStream(THolder> old, TFunctor functor) : Old_(std::move(old)) , Functor_(std::move(functor)) { } public: TNew Fetch() override { return Functor_(Old_->Fetch()); } }; template class TMappingConsumer final: public IConsumer { private: THolder> Old_; TFunctor Functor_; public: TMappingConsumer(THolder> old, TFunctor functor) : Old_(std::move(old)) , Functor_(std::move(functor)) { } public: void OnObject(TNew object) override { Old_->OnObject(Functor_(object)); } void OnFinish() override { Old_->OnFinish(); } }; template class TNonOwningConsumer final: public IConsumer { private: C Consumer; public: explicit TNonOwningConsumer(const C& consumer) : Consumer(consumer) { } public: void OnObject(T t) override { Consumer->OnObject(t); } void OnFinish() override { Consumer->OnFinish(); } }; }