#include "numeric.h" #include "utils.h" #include "../base/wire_format.h" namespace clickhouse { template ColumnVector::ColumnVector() : Column(Type::CreateSimple()) { } template ColumnVector::ColumnVector(const std::vector & data) : Column(Type::CreateSimple()) , data_(data) { } template ColumnVector::ColumnVector(std::vector && data) : Column(Type::CreateSimple()) , data_(std::move(data)) { } template void ColumnVector::Append(const T& value) { data_.push_back(value); } template void ColumnVector::Erase(size_t pos, size_t count) { const auto begin = std::min(pos, data_.size()); const auto last = begin + std::min(data_.size() - begin, count); data_.erase(data_.begin() + begin, data_.begin() + last); } template std::vector& ColumnVector::GetWritableData() { return data_; } template void ColumnVector::Reserve(size_t new_cap) { data_.reserve(new_cap); } template size_t ColumnVector::Capacity() const { return data_.capacity(); } template void ColumnVector::Clear() { data_.clear(); } template const T& ColumnVector::At(size_t n) const { return data_.at(n); } template void ColumnVector::Append(ColumnRef column) { if (auto col = column->As>()) { data_.insert(data_.end(), col->data_.begin(), col->data_.end()); } } template bool ColumnVector::LoadBody(InputStream* input, size_t rows) { data_.resize(rows); return WireFormat::ReadBytes(*input, data_.data(), data_.size() * sizeof(T)); } template void ColumnVector::SaveBody(OutputStream* output) { WireFormat::WriteBytes(*output, data_.data(), data_.size() * sizeof(T)); } template size_t ColumnVector::Size() const { return data_.size(); } template ColumnRef ColumnVector::Slice(size_t begin, size_t len) const { return std::make_shared>(SliceVector(data_, begin, len)); } template ColumnRef ColumnVector::CloneEmpty() const { return std::make_shared>(); } template void ColumnVector::Swap(Column& other) { auto & col = dynamic_cast &>(other); data_.swap(col.data_); } template ItemView ColumnVector::GetItem(size_t index) const { return ItemView{type_->GetCode(), data_[index]}; } template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; template class ColumnVector; }