#include "numeric.h" #include "utils.h" namespace NClickHouse { template TColumnVector::TColumnVector() : TColumn(TType::CreateSimple()) { } template TColumnVector::TColumnVector(const TVector& data) : TColumn(TType::CreateSimple()) , Data_(data) { } template TColumnVector::TColumnVector(TVector&& data) : TColumn(TType::CreateSimple()) , Data_(std::move(data)) { } template TIntrusivePtr> TColumnVector::Create() { return new TColumnVector(); } template TIntrusivePtr> TColumnVector::Create(const TVector& data) { return new TColumnVector(data); } template TIntrusivePtr> TColumnVector::Create(TVector&& data) { return new TColumnVector(std::move(data)); } template void TColumnVector::Append(const T& value) { Data_.push_back(value); } template const T& TColumnVector::At(size_t n) const { return Data_.at(n); } template const T& TColumnVector::operator[](size_t n) const { return Data_[n]; } template void TColumnVector::SetAt(size_t n, const T& value) { Data_.at(n) = value; } template void TColumnVector::Append(TColumnRef column) { if (auto col = column->As>()) { Data_.insert(Data_.end(), col->Data_.begin(), col->Data_.end()); } } template bool TColumnVector::Load(TCodedInputStream* input, size_t rows) { Data_.resize(rows); return input->ReadRaw(Data_.data(), Data_.size() * sizeof(T)); } template void TColumnVector::Save(TCodedOutputStream* output) { output->WriteRaw(Data_.data(), Data_.size() * sizeof(T)); } template size_t TColumnVector::Size() const { return Data_.size(); } template TColumnRef TColumnVector::Slice(size_t begin, size_t len) { return new TColumnVector(SliceVector(Data_, begin, len)); } template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; template class TColumnVector; }