blob: 20a765967f30a869aed3606d1d38bd4c9ee78947 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef COMMON_TSBLOCK_VECTOR_VECTOR_H
#define COMMON_TSBLOCK_VECTOR_VECTOR_H
#include "common/allocator/page_arena.h"
#include "common/container/bit_map.h"
#include "common/container/byte_buffer.h"
#include "utils/db_utils.h"
#include "utils/util_define.h"
namespace common {
class TsBlock;
class Vector {
public:
Vector(common::TSDataType type, uint32_t max_row_num,
common::TsBlock* tsblock)
: has_null_(false),
type_(type),
max_row_num_(max_row_num),
row_num_(0),
offset_(0),
tsblock_(tsblock) {
nulls_.init(max_row_num, true);
}
virtual ~Vector() {}
// len == 0 is '' or ""
virtual void append(const char* value, uint32_t len) = 0;
virtual char* read(uint32_t* __restrict len, bool* __restrict null,
uint32_t rowid) = 0;
// For ColIterator, it is known that no null value exists in this column
virtual char* read(uint32_t* len) = 0;
virtual void reset() = 0;
virtual void update_offset() = 0;
FORCE_INLINE void reset_offset() { offset_ = 0; }
FORCE_INLINE bool is_null(uint32_t row_id) { return nulls_.test(row_id); }
FORCE_INLINE void set_null(uint32_t row_id) {
nulls_.set(row_id);
has_null_ = true;
}
FORCE_INLINE void set_vector_type(common::TSDataType type) { type_ = type; }
FORCE_INLINE common::TSDataType get_vector_type() { return type_; }
FORCE_INLINE uint32_t get_row_num() { return row_num_; }
FORCE_INLINE void add_row_num() { row_num_++; }
FORCE_INLINE common::TsBlock* get_tsblock() { return tsblock_; }
FORCE_INLINE bool has_null() { return has_null_; }
// We want derived class to have access to base class members, so it is
// defined as protected
protected:
bool has_null_; // mark whether there is a null value
common::TSDataType type_;
uint32_t max_row_num_; // max row num
uint32_t row_num_; // real row num
uint32_t offset_;
common::TsBlock* tsblock_; // parent tsblock
common::BitMap nulls_; // null bit value
common::ByteBuffer values_; // real user data
};
} // namespace common
#endif // COMMON_TSBLOCK_VECTOR_VECTOR_H