#pragma once #include #include #include namespace clickhouse { template std::vector SliceVector(const std::vector& vec, size_t begin, size_t len) { std::vector result; if (begin < vec.size()) { len = std::min(len, vec.size() - begin); result.assign(vec.begin() + begin, vec.begin() + (begin + len)); } return result; } template struct HasWrapMethod { private: static int detect(...); template static decltype(U::Wrap(std::move(std::declval()))) detect(const U&); public: static constexpr bool value = !std::is_same()))>::value; }; template inline std::shared_ptr WrapColumn(ColumnRef&& column) { if constexpr (HasWrapMethod::value) { return T::Wrap(std::move(column)); } else { return column->template AsStrict(); } } }