numeric.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "numeric.h"
  2. #include "utils.h"
  3. namespace NClickHouse {
  4. template <typename T>
  5. TColumnVector<T>::TColumnVector()
  6. : TColumn(TType::CreateSimple<T>())
  7. {
  8. }
  9. template <typename T>
  10. TColumnVector<T>::TColumnVector(const TVector<T>& data)
  11. : TColumn(TType::CreateSimple<T>())
  12. , Data_(data)
  13. {
  14. }
  15. template <typename T>
  16. TColumnVector<T>::TColumnVector(TVector<T>&& data)
  17. : TColumn(TType::CreateSimple<T>())
  18. , Data_(std::move(data))
  19. {
  20. }
  21. template <typename T>
  22. TIntrusivePtr<TColumnVector<T>> TColumnVector<T>::Create() {
  23. return new TColumnVector<T>();
  24. }
  25. template <typename T>
  26. TIntrusivePtr<TColumnVector<T>> TColumnVector<T>::Create(const TVector<T>& data) {
  27. return new TColumnVector<T>(data);
  28. }
  29. template <typename T>
  30. TIntrusivePtr<TColumnVector<T>> TColumnVector<T>::Create(TVector<T>&& data) {
  31. return new TColumnVector<T>(std::move(data));
  32. }
  33. template <typename T>
  34. void TColumnVector<T>::Append(const T& value) {
  35. Data_.push_back(value);
  36. }
  37. template <typename T>
  38. const T& TColumnVector<T>::At(size_t n) const {
  39. return Data_.at(n);
  40. }
  41. template <typename T>
  42. const T& TColumnVector<T>::operator[](size_t n) const {
  43. return Data_[n];
  44. }
  45. template <typename T>
  46. void TColumnVector<T>::SetAt(size_t n, const T& value) {
  47. Data_.at(n) = value;
  48. }
  49. template <typename T>
  50. void TColumnVector<T>::Append(TColumnRef column) {
  51. if (auto col = column->As<TColumnVector<T>>()) {
  52. Data_.insert(Data_.end(), col->Data_.begin(), col->Data_.end());
  53. }
  54. }
  55. template <typename T>
  56. bool TColumnVector<T>::Load(TCodedInputStream* input, size_t rows) {
  57. Data_.resize(rows);
  58. return input->ReadRaw(Data_.data(), Data_.size() * sizeof(T));
  59. }
  60. template <typename T>
  61. void TColumnVector<T>::Save(TCodedOutputStream* output) {
  62. output->WriteRaw(Data_.data(), Data_.size() * sizeof(T));
  63. }
  64. template <typename T>
  65. size_t TColumnVector<T>::Size() const {
  66. return Data_.size();
  67. }
  68. template <typename T>
  69. TColumnRef TColumnVector<T>::Slice(size_t begin, size_t len) {
  70. return new TColumnVector<T>(SliceVector(Data_, begin, len));
  71. }
  72. template class TColumnVector<i8>;
  73. template class TColumnVector<i16>;
  74. template class TColumnVector<i32>;
  75. template class TColumnVector<i64>;
  76. template class TColumnVector<ui8>;
  77. template class TColumnVector<ui16>;
  78. template class TColumnVector<ui32>;
  79. template class TColumnVector<ui64>;
  80. template class TColumnVector<float>;
  81. template class TColumnVector<double>;
  82. }