enum.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include "column.h"
  3. namespace NClickHouse {
  4. template <typename T>
  5. class TColumnEnum: public TColumn {
  6. public:
  7. static TIntrusivePtr<TColumnEnum<T>> Create(const TVector<TEnumItem>& enumItems);
  8. static TIntrusivePtr<TColumnEnum<T>> Create(
  9. const TVector<TEnumItem>& enumItems,
  10. const TVector<T>& values,
  11. bool checkValues = false);
  12. static TIntrusivePtr<TColumnEnum<T>> Create(const TVector<TEnumItem>& enumItems, const TVector<TString>& names);
  13. /// Appends one element to the end of column.
  14. void Append(const T& value, bool checkValue = false);
  15. void Append(const TString& name);
  16. /// Returns element at given row number.
  17. const T& At(size_t n) const;
  18. const TString& NameAt(size_t n) const;
  19. /// Returns element at given row number.
  20. const T& operator[](size_t n) const;
  21. /// Set element at given row number.
  22. void SetAt(size_t n, const T& value, bool checkValue = false);
  23. void SetNameAt(size_t n, const TString& name);
  24. public:
  25. /// Appends content of given column to the end of current one.
  26. void Append(TColumnRef column) override;
  27. /// Loads column data from input stream.
  28. bool Load(TCodedInputStream* input, size_t rows) override;
  29. /// Saves column data to output stream.
  30. void Save(TCodedOutputStream* output) override;
  31. /// Returns count of rows in the column.
  32. size_t Size() const override;
  33. /// Makes slice of the current column.
  34. TColumnRef Slice(size_t begin, size_t len) override;
  35. private:
  36. TColumnEnum(TTypeRef type);
  37. TColumnEnum(TTypeRef type, const TVector<T>& data);
  38. TVector<T> Data_;
  39. };
  40. using TColumnEnum8 = TColumnEnum<i8>;
  41. using TColumnEnum16 = TColumnEnum<i16>;
  42. }