#pragma once #include "column.h" namespace NClickHouse { /** * Represents various numeric columns. */ template class TColumnVector: public TColumn { public: static TIntrusivePtr> Create(); static TIntrusivePtr> Create(const TVector& data); static TIntrusivePtr> Create(TVector&& data); /// Appends one element to the end of column. void Append(const T& value); /// Returns element at given row number. const T& At(size_t n) const; /// Returns element at given row number. const T& operator[](size_t n) const; /// Set element at given row number. void SetAt(size_t n, const T& value); public: /// Appends content of given column to the end of current one. void Append(TColumnRef column) override; /// Loads column data from input stream. bool Load(TCodedInputStream* input, size_t rows) override; /// Saves column data to output stream. void Save(TCodedOutputStream* output) override; /// Returns count of rows in the column. size_t Size() const override; /// Makes slice of the current column. TColumnRef Slice(size_t begin, size_t len) override; private: TColumnVector(); TColumnVector(const TVector& data); TColumnVector(TVector&& data); TVector Data_; }; using TColumnUInt8 = TColumnVector; using TColumnUInt16 = TColumnVector; using TColumnUInt32 = TColumnVector; using TColumnUInt64 = TColumnVector; using TColumnInt8 = TColumnVector; using TColumnInt16 = TColumnVector; using TColumnInt32 = TColumnVector; using TColumnInt64 = TColumnVector; using TColumnFloat32 = TColumnVector; using TColumnFloat64 = TColumnVector; }