17 #ifndef DATE_DAYS_ENCODER_H
18 #define DATE_DAYS_ENCODER_H
29 template <
typename T,
typename V>
36 std::shared_ptr<ChunkMetadata>
appendData(int8_t*& src_data,
37 const size_t num_elems_to_append,
39 const bool replicating =
false,
40 const int64_t offset = -1)
override {
42 if (offset == 0 && num_elems_to_append >=
num_elems_) {
45 T* unencoded_data =
reinterpret_cast<T*
>(src_data);
46 auto encoded_data = std::make_unique<V[]>(num_elems_to_append);
47 for (
size_t i = 0;
i < num_elems_to_append; ++
i) {
48 size_t ri = replicating ? 0 :
i;
54 buffer_->
append(reinterpret_cast<int8_t*>(encoded_data.get()),
55 num_elems_to_append *
sizeof(V));
57 src_data += num_elems_to_append *
sizeof(
T);
63 buffer_->
write(reinterpret_cast<int8_t*>(encoded_data.get()),
64 num_elems_to_append *
sizeof(V),
65 static_cast<size_t>(offset));
68 auto chunk_metadata = std::make_shared<ChunkMetadata>();
70 return chunk_metadata;
73 void getMetadata(
const std::shared_ptr<ChunkMetadata>& chunkMetadata)
override {
80 auto chunk_metadata = std::make_shared<ChunkMetadata>(ti, 0, 0,
ChunkStats{});
82 return chunk_metadata;
90 const auto data =
static_cast<T>(val);
101 const auto data =
static_cast<T>(val);
107 void updateStats(
const int8_t*
const src_data,
const size_t num_elements)
override {
108 const T* unencoded_data =
reinterpret_cast<const T*
>(src_data);
109 for (
size_t i = 0;
i < num_elements; ++
i) {
115 const size_t start_idx,
116 const size_t num_elements)
override {
121 const size_t start_idx,
122 const size_t num_elements)
override {
129 if (that_typed.has_nulls) {
139 dataMin = castedEncoder->dataMin;
140 dataMax = castedEncoder->dataMax;
146 fwrite((int8_t*)&
num_elems_,
sizeof(
size_t), 1, f);
147 fwrite((int8_t*)&
dataMin,
sizeof(
T), 1, f);
148 fwrite((int8_t*)&
dataMax,
sizeof(
T), 1, f);
149 fwrite((int8_t*)&
has_nulls,
sizeof(
bool), 1, f);
154 fread((int8_t*)&
num_elems_,
sizeof(
size_t), 1, f);
155 fread((int8_t*)&
dataMin, 1,
sizeof(
T), f);
156 fread((int8_t*)&
dataMax, 1,
sizeof(
T), f);
157 fread((int8_t*)&
has_nulls, 1,
sizeof(
bool), f);
161 const auto new_min = DatumFetcher::getDatumVal<T>(stats.
min);
162 const auto new_max = DatumFetcher::getDatumVal<T>(stats.
max);
175 dataMin = std::numeric_limits<T>::max();
176 dataMax = std::numeric_limits<T>::lowest();
187 if (unencoded_data == std::numeric_limits<V>::min()) {
189 encoded_data =
static_cast<V
>(unencoded_data);
201 #endif // DATE_DAYS_ENCODER_H
void updateStats(const int8_t *const src_data, const size_t num_elements) override
void updateStats(const std::vector< ArrayDatum > *const src_data, const size_t start_idx, const size_t num_elements) override
std::shared_ptr< ChunkMetadata > appendData(int8_t *&src_data, const size_t num_elems_to_append, const SQLTypeInfo &ti, const bool replicating=false, const int64_t offset=-1) override
void updateStats(const int64_t val, const bool is_null) override
void resetChunkStats() override
virtual void getMetadata(const std::shared_ptr< ChunkMetadata > &chunkMetadata)
void updateStats(const std::vector< std::string > *const src_data, const size_t start_idx, const size_t num_elements) override
void readMetadata(FILE *f) override
int64_t get_epoch_seconds_from_days(const int64_t days)
CONSTEXPR DEVICE bool is_null(const T &value)
Data_Namespace::AbstractBuffer * buffer_
V encodeDataAndUpdateStats(const T &unencoded_data)
void writeMetadata(FILE *f) override
size_t getNumElems() const
void updateStats(const double val, const bool is_null) override
An AbstractBuffer is a unit of data management for a data manager.
virtual void write(int8_t *src, const size_t num_bytes, const size_t offset=0, const MemoryLevel src_buffer_type=CPU_LEVEL, const int src_device_id=-1)=0
DateDaysOverflowValidator date_days_overflow_validator_
std::shared_ptr< ChunkMetadata > getMetadata(const SQLTypeInfo &ti) override
void getMetadata(const std::shared_ptr< ChunkMetadata > &chunkMetadata) override
bool is_date_in_days() const
virtual void append(int8_t *src, const size_t num_bytes, const MemoryLevel src_buffer_type=CPU_LEVEL, const int device_id=-1)=0
void reduceStats(const Encoder &that) override
void copyMetadata(const Encoder *copyFromEncoder) override
bool resetChunkStats(const ChunkStats &stats) override
: Reset chunk level stats (min, max, nulls) using new values from the argument.
int64_t get_epoch_days_from_seconds(const int64_t seconds)
DateDaysEncoder(Data_Namespace::AbstractBuffer *buffer)