Force compressed buffer to be 4 bytes aligned. (#5441)

This commit is contained in:
Jiaming Yuan 2020-03-27 06:43:52 +08:00 committed by GitHub
parent dcf439932a
commit 7146b91d5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -75,11 +75,16 @@ class CompressedBufferWriter {
* \return The calculated buffer size. * \return The calculated buffer size.
*/ */
static size_t CalculateBufferSize(size_t num_elements, size_t num_symbols) { static size_t CalculateBufferSize(size_t num_elements, size_t num_symbols) {
const int bits_per_byte = 8; constexpr int kBitsPerByte = 8;
size_t compressed_size = static_cast<size_t>(std::ceil( size_t compressed_size = static_cast<size_t>(std::ceil(
static_cast<double>(detail::SymbolBits(num_symbols) * num_elements) / static_cast<double>(detail::SymbolBits(num_symbols) * num_elements) /
bits_per_byte)); kBitsPerByte));
return compressed_size + detail::kPadding; // Handle atomicOr where input must be unsigned int, hence 4 bytes aligned.
size_t ret =
std::ceil(static_cast<double>(compressed_size + detail::kPadding) /
static_cast<double>(sizeof(unsigned int))) *
sizeof(unsigned int);
return ret;
} }
template <typename T> template <typename T>