#pragma once #include "column.h" #include "absl/numeric/int128.h" namespace clickhouse { /** * Represents various numeric columns. */ template class ColumnVector : public Column { public: using DataType = T; using ValueType = T; ColumnVector(); explicit ColumnVector(const std::vector& data); explicit ColumnVector(std::vector && data); /// Increase the capacity of the column for large block insertion. void Reserve(size_t new_cap) override; /// 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. inline const T& operator [] (size_t n) const { return At(n); } void Erase(size_t pos, size_t count = 1); /// Get Raw Vector Contents std::vector& GetWritableData(); /// Returns the capacity of the column size_t Capacity() const; public: /// Appends content of given column to the end of current one. void Append(ColumnRef column) override; /// Loads column data from input stream. bool LoadBody(InputStream* input, size_t rows) override; /// Saves column data to output stream. void SaveBody(OutputStream* output) override; /// Clear column data . void Clear() override; /// Returns count of rows in the column. size_t Size() const override; /// Makes slice of the current column. ColumnRef Slice(size_t begin, size_t len) const override; ColumnRef CloneEmpty() const override; void Swap(Column& other) override; ItemView GetItem(size_t index) const override; private: std::vector data_; }; using Int128 = absl::int128; using UInt128 = absl::uint128; using Int64 = int64_t; using ColumnUInt8 = ColumnVector; using ColumnUInt16 = ColumnVector; using ColumnUInt32 = ColumnVector; using ColumnUInt64 = ColumnVector; using ColumnUInt128 = ColumnVector; using ColumnInt8 = ColumnVector; using ColumnInt16 = ColumnVector; using ColumnInt32 = ColumnVector; using ColumnInt64 = ColumnVector; using ColumnInt128 = ColumnVector; using ColumnFloat32 = ColumnVector; using ColumnFloat64 = ColumnVector; }