123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #pragma once
- #include <library/cpp/clickhouse/client/base/coded.h>
- #include <library/cpp/clickhouse/client/types/types.h>
- #include <util/generic/ptr.h>
- namespace NClickHouse {
- using TColumnRef = TIntrusivePtr<class TColumn>;
- /**
- * An abstract base of all columns classes.
- */
- class TColumn: public TAtomicRefCount<TColumn> {
- public:
- virtual ~TColumn() {
- }
- /// Downcast pointer to the specific culumn's subtype.
- template <typename T>
- inline TIntrusivePtr<T> As() {
- return TIntrusivePtr<T>(dynamic_cast<T*>(this));
- }
- /// Downcast pointer to the specific culumn's subtype.
- template <typename T>
- inline TIntrusivePtr<const T> As() const {
- return TIntrusivePtr<const T>(dynamic_cast<const T*>(this));
- }
- /// Get type object of the column.
- inline TTypeRef Type() const {
- return Type_;
- }
- /// Appends content of given column to the end of current one.
- virtual void Append(TColumnRef column) = 0;
- /// Loads column data from input stream.
- virtual bool Load(TCodedInputStream* input, size_t rows) = 0;
- /// Saves column data to output stream.
- virtual void Save(TCodedOutputStream* output) = 0;
- /// Returns count of rows in the column.
- virtual size_t Size() const = 0;
- /// Makes slice of the current column.
- virtual TColumnRef Slice(size_t begin, size_t len) = 0;
- protected:
- explicit inline TColumn(TTypeRef type)
- : Type_(type)
- {
- }
- TTypeRef Type_;
- };
- }
|