This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new 9838eac6 fix ZigZagCodec (#124)
9838eac6 is described below
commit 9838eac62b266dae2daa104fd12adc51272e2849
Author: Hongzhi Gao <[email protected]>
AuthorDate: Thu Jun 27 11:36:28 2024 +0800
fix ZigZagCodec (#124)
* fix ZigZagCodec
* fix ZigZagCodec
---
cpp/src/encoding/zigzag_decoder.h | 22 ++++++++--------------
cpp/src/encoding/zigzag_encoder.h | 28 ++++++++++++----------------
2 files changed, 20 insertions(+), 30 deletions(-)
diff --git a/cpp/src/encoding/zigzag_decoder.h
b/cpp/src/encoding/zigzag_decoder.h
index 54be5ee4..176c0ccd 100644
--- a/cpp/src/encoding/zigzag_decoder.h
+++ b/cpp/src/encoding/zigzag_decoder.h
@@ -61,14 +61,8 @@ class ZigzagDecoder {
}
void read_header(common::ByteStream &in) {
- flush_byte_if_empty(in);
- zigzag_length_ = buffer_;
- buffer_ = 0;
- bits_left_ = 0;
- flush_byte_if_empty(in);
- int_length_ = buffer_;
- buffer_ = 0;
- bits_left_ = 0;
+ common::SerializationUtil::read_var_uint(zigzag_length_, in);
+ common::SerializationUtil::read_var_uint(int_length_, in);
}
void flush_byte_if_empty(common::ByteStream &in) {
@@ -112,7 +106,7 @@ class ZigzagDecoder {
}
int64_t zigzag_decoder(int64_t stored_value_) {
- stored_value_ = (stored_value_ >> 1) ^ -(stored_value_ & 1);
+ stored_value_ = ((uint64_t)stored_value_ >> 1) ^ -(stored_value_ & 1);
return stored_value_;
}
@@ -127,8 +121,8 @@ class ZigzagDecoder {
int first_bit_of_byte_;
int num_of_sorts_of_zigzag_;
bool first_read_;
- uint8_t zigzag_length_;
- uint8_t int_length_;
+ uint32_t zigzag_length_;
+ uint32_t int_length_;
std::vector<uint8_t> list_transit_in_zd_;
};
@@ -141,7 +135,7 @@ int32_t ZigzagDecoder<int32_t>::decode(common::ByteStream
&in) {
buffer_ = 0;
first_read_ = false;
list_transit_in_zd_.clear();
- for (uint8_t i = 0; i < zigzag_length_; i++) {
+ for (uint32_t i = 0; i < zigzag_length_; i++) {
flush_byte_if_empty(in);
list_transit_in_zd_.push_back(buffer_);
buffer_ = 0;
@@ -174,7 +168,7 @@ int64_t ZigzagDecoder<int64_t>::decode(common::ByteStream
&in) {
buffer_ = 0;
first_read_ = false;
list_transit_in_zd_.clear();
- for (uint8_t i = 0; i < zigzag_length_; i++) {
+ for (uint32_t i = 0; i < zigzag_length_; i++) {
flush_byte_if_empty(in);
list_transit_in_zd_.push_back(buffer_);
buffer_ = 0;
@@ -202,4 +196,4 @@ typedef ZigzagDecoder<int32_t> IntZigzagDecoder;
typedef ZigzagDecoder<int64_t> LongZigzagDecoder;
} // end namespace storage
-#endif // ENCODING_zigzag_DECODER_H
+#endif // ENCODING_zigzag_DECODER_H
\ No newline at end of file
diff --git a/cpp/src/encoding/zigzag_encoder.h
b/cpp/src/encoding/zigzag_encoder.h
index bcb3aa4f..887ba07d 100644
--- a/cpp/src/encoding/zigzag_encoder.h
+++ b/cpp/src/encoding/zigzag_encoder.h
@@ -97,15 +97,15 @@ int ZigzagEncoder<int32_t>::encode(int32_t value) {
int32_t value_zigzag = (value << 1) ^ (value >> 31);
if ((value_zigzag & ~0x7F) != 0) {
write_byte_with_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint32_t)value_zigzag >> 7;
while ((value_zigzag & ~0x7F) != 0) {
write_byte_with_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint32_t)value_zigzag >> 7;
}
}
write_byte_without_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint32_t)value_zigzag >> 7;
return common::E_OK;
}
@@ -120,26 +120,24 @@ int ZigzagEncoder<int64_t>::encode(int64_t value) {
int64_t value_zigzag = (value << 1) ^ (value >> 63);
if ((value_zigzag & ~0x7F) != 0) {
write_byte_with_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint64_t)value_zigzag >> 7;
while ((value_zigzag & ~0x7F) != 0) {
write_byte_with_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint64_t)value_zigzag >> 7;
}
}
write_byte_without_subsequence(value_zigzag);
- value_zigzag = value_zigzag >> 7;
+ value_zigzag = (uint64_t)value_zigzag >> 7;
return common::E_OK;
}
template <>
int ZigzagEncoder<int32_t>::flush(common::ByteStream &out) {
- buffer_ = (uint8_t)(length_of_encode_bytestream_);
- flush_byte(out);
-
- buffer_ = (uint8_t)(length_of_input_bytestream_);
- flush_byte(out);
+ common::SerializationUtil::write_var_uint(length_of_encode_bytestream_,
+ out);
+ common::SerializationUtil::write_var_uint(length_of_input_bytestream_,
out);
for (int i = 0; i < length_of_encode_bytestream_; i++) {
buffer_ = (uint8_t)(list_transit_in_ze_[i]);
@@ -151,11 +149,9 @@ int ZigzagEncoder<int32_t>::flush(common::ByteStream &out)
{
template <>
int ZigzagEncoder<int64_t>::flush(common::ByteStream &out) {
- buffer_ = (uint8_t)(length_of_encode_bytestream_);
- flush_byte(out);
-
- buffer_ = (uint8_t)(length_of_input_bytestream_);
- flush_byte(out);
+ common::SerializationUtil::write_var_uint(length_of_encode_bytestream_,
+ out);
+ common::SerializationUtil::write_var_uint(length_of_input_bytestream_,
out);
for (int i = 0; i < length_of_encode_bytestream_; i++) {
buffer_ = (uint8_t)(list_transit_in_ze_[i]);