wrappers.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include "fwd.h"
  3. #include <util/generic/ptr.h>
  4. namespace NYql::NPureCalc::NPrivate {
  5. template <typename TNew, typename TOld, typename TFunctor>
  6. class TMappingStream final: public IStream<TNew> {
  7. private:
  8. THolder<IStream<TOld>> Old_;
  9. TFunctor Functor_;
  10. public:
  11. TMappingStream(THolder<IStream<TOld>> old, TFunctor functor)
  12. : Old_(std::move(old))
  13. , Functor_(std::move(functor))
  14. {
  15. }
  16. public:
  17. TNew Fetch() override {
  18. return Functor_(Old_->Fetch());
  19. }
  20. };
  21. template <typename TNew, typename TOld, typename TFunctor>
  22. class TMappingConsumer final: public IConsumer<TNew> {
  23. private:
  24. THolder<IConsumer<TOld>> Old_;
  25. TFunctor Functor_;
  26. public:
  27. TMappingConsumer(THolder<IConsumer<TOld>> old, TFunctor functor)
  28. : Old_(std::move(old))
  29. , Functor_(std::move(functor))
  30. {
  31. }
  32. public:
  33. void OnObject(TNew object) override {
  34. Old_->OnObject(Functor_(object));
  35. }
  36. void OnFinish() override {
  37. Old_->OnFinish();
  38. }
  39. };
  40. template <typename T, typename C>
  41. class TNonOwningConsumer final: public IConsumer<T> {
  42. private:
  43. C Consumer;
  44. public:
  45. explicit TNonOwningConsumer(const C& consumer)
  46. : Consumer(consumer)
  47. {
  48. }
  49. public:
  50. void OnObject(T t) override {
  51. Consumer->OnObject(t);
  52. }
  53. void OnFinish() override {
  54. Consumer->OnFinish();
  55. }
  56. };
  57. }