#pragma once
#include "common/data_chunk/sel_vector.h"
namespace lbug {
namespace common {
enum class FStateType : uint8_t {
FLAT = 0,
UNFLAT = 1,
};
class LBUG_API DataChunkState {
public:
DataChunkState();
explicit DataChunkState(sel_t capacity) : fStateType{FStateType::UNFLAT} {
selVector = std::make_shared<SelectionVector>(capacity);
}
static std::shared_ptr<DataChunkState> getSingleValueDataChunkState();
void initOriginalAndSelectedSize(uint64_t size) { selVector->setSelSize(size); }
bool isFlat() const { return fStateType == FStateType::FLAT; }
void setToFlat() { fStateType = FStateType::FLAT; }
void setToUnflat() { fStateType = FStateType::UNFLAT; }
const SelectionVector& getSelVector() const { return *selVector; }
sel_t getSelSize() const { return selVector->getSelSize(); }
SelectionVector& getSelVectorUnsafe() { return *selVector; }
std::shared_ptr<SelectionVector> getSelVectorShared() { return selVector; }
void setSelVector(std::shared_ptr<SelectionVector> selVector_) {
this->selVector = std::move(selVector_);
}
private:
std::shared_ptr<SelectionVector> selVector;
FStateType fStateType;
};
} }