stream_from_vector.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include <yql/essentials/public/purecalc/common/interface.h>
  3. namespace NYql {
  4. namespace NPureCalc {
  5. namespace NPrivate {
  6. template <typename T>
  7. class TVectorStream final: public IStream<T*> {
  8. private:
  9. size_t I_;
  10. TVector<T> Data_;
  11. public:
  12. explicit TVectorStream(TVector<T> data)
  13. : I_(0)
  14. , Data_(std::move(data))
  15. {
  16. }
  17. public:
  18. T* Fetch() override {
  19. if (I_ >= Data_.size()) {
  20. return nullptr;
  21. } else {
  22. return &Data_[I_++];
  23. }
  24. }
  25. };
  26. }
  27. /**
  28. * Convert vector into a purecalc stream.
  29. */
  30. template <typename T>
  31. THolder<IStream<T*>> StreamFromVector(TVector<T> data) {
  32. return MakeHolder<NPrivate::TVectorStream<T>>(std::move(data));
  33. }
  34. }
  35. }