#pragma once #include "counting_raw_reader.h" #include #include #include #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// class TSkiffRowTableReader : public ISkiffRowReaderImpl { public: explicit TSkiffRowTableReader( ::TIntrusivePtr input, const NSkiff::TSkiffSchemaPtr& schema, TVector&& skippers, NDetail::TCreateSkiffSchemaOptions&& options); ~TSkiffRowTableReader() override; void ReadRow(const ISkiffRowParserPtr& parser) override; bool IsValid() const override; void Next() override; ui32 GetTableIndex() const override; ui32 GetRangeIndex() const override; ui64 GetRowIndex() const override; void NextKey() override; TMaybe GetReadByteCount() const override; bool IsEndOfStream() const override; bool IsRawReaderExhausted() const override; private: bool Retry(const std::exception_ptr& error); void SkipRow(); void CheckValidity() const; bool PrepareRetry(const std::exception_ptr& error); private: NDetail::TCountingRawTableReader Input_; TBufferedInput BufferedInput_; std::optional Parser_; TVector Skippers_; NDetail::TCreateSkiffSchemaOptions Options_; bool RowTaken_ = true; bool Valid_ = true; bool Finished_ = false; bool AfterKeySwitch_ = false; bool IsEndOfStream_ = false; TMaybe RowIndex_; TMaybe RangeIndex_; ui32 RangeIndexShift_ = 0; ui32 TableIndex_ = 0; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT