blob: 85157889cdd31086ee2b0d01bbcce3a498f96d5d [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 BIT_PACKING_HPP_
#define BIT_PACKING_HPP_
#include <memory>
namespace datasketches {
static inline uint8_t pack_bits(uint64_t value, uint8_t bits, uint8_t*& ptr, uint8_t offset) {
if (offset > 0) {
const uint8_t chunk_bits = 8 - offset;
const uint8_t mask = (1 << chunk_bits) - 1;
if (bits < chunk_bits) {
*ptr |= (value << (chunk_bits - bits)) & mask;
return offset + bits;
}
*ptr++ |= (value >> (bits - chunk_bits)) & mask;
bits -= chunk_bits;
}
while (bits >= 8) {
*ptr++ = static_cast<uint8_t>(value >> (bits - 8));
bits -= 8;
}
if (bits > 0) {
*ptr = static_cast<uint8_t>(value << (8 - bits));
return bits;
}
return 0;
}
static inline uint8_t unpack_bits(uint64_t& value, uint8_t bits, const uint8_t*& ptr, uint8_t offset) {
const uint8_t avail_bits = 8 - offset;
const uint8_t chunk_bits = std::min(avail_bits, bits);
const uint8_t mask = (1 << chunk_bits) - 1;
value = (*ptr >> (avail_bits - chunk_bits)) & mask;
ptr += avail_bits == chunk_bits;
offset = (offset + chunk_bits) & 7;
bits -= chunk_bits;
while (bits >= 8) {
value <<= 8;
value |= *ptr++;
bits -= 8;
}
if (bits > 0) {
value <<= bits;
value |= *ptr >> (8 - bits);
return bits;
}
return offset;
}
// pack given number of bits from a block of 8 64-bit values into bytes
// we don't need 0 and 64 bits
// we assume that higher bits (which we are not packing) are zeros
// this assumption allows to avoid masking operations
static inline void pack_bits_1(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr |= static_cast<uint8_t>(values[1] << 6);
*ptr |= static_cast<uint8_t>(values[2] << 5);
*ptr |= static_cast<uint8_t>(values[3] << 4);
*ptr |= static_cast<uint8_t>(values[4] << 3);
*ptr |= static_cast<uint8_t>(values[5] << 2);
*ptr |= static_cast<uint8_t>(values[6] << 1);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_2(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr |= static_cast<uint8_t>(values[1] << 4);
*ptr |= static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3]);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr |= static_cast<uint8_t>(values[5] << 4);
*ptr |= static_cast<uint8_t>(values[6] << 2);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_3(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr |= static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr |= static_cast<uint8_t>(values[3] << 4);
*ptr |= static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr |= static_cast<uint8_t>(values[6] << 3);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_4(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1]);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3]);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5]);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_5(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr |= static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr |= static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_6(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3]);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_7(const uint64_t* values, uint8_t* ptr) {
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_8(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_9(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_10(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_11(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_12(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_13(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] >> 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_14(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_15(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_16(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_17(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_18(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_19(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 15);
*ptr++ |= static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_20(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_21(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_22(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_23(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_24(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 16);
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 16);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 16);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 16);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_25(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 17);
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 19);
*ptr++ = static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 21);
*ptr++ = static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 23);
*ptr++ = static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_26(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 18);
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 22);
*ptr++ = static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 18);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 22);
*ptr++ = static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_27(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 19);
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 25);
*ptr++ = static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 23);
*ptr++ = static_cast<uint8_t>(values[4] >> 15);
*ptr++ = static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 21);
*ptr++ = static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_28(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 20);
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 20);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 20);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 20);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_29(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 21);
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 23);
*ptr++ = static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 25);
*ptr++ = static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 27);
*ptr++ = static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_30(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 22);
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 26);
*ptr++ = static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 22);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 26);
*ptr++ = static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_31(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 23);
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 29);
*ptr++ = static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 27);
*ptr++ = static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 25);
*ptr++ = static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_32(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 24);
*ptr++ = static_cast<uint8_t>(values[0] >> 16);
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 24);
*ptr++ = static_cast<uint8_t>(values[2] >> 16);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 24);
*ptr++ = static_cast<uint8_t>(values[4] >> 16);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 24);
*ptr++ = static_cast<uint8_t>(values[6] >> 16);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_33(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 25);
*ptr++ = static_cast<uint8_t>(values[0] >> 17);
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 27);
*ptr++ = static_cast<uint8_t>(values[2] >> 19);
*ptr++ = static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 29);
*ptr++ = static_cast<uint8_t>(values[4] >> 21);
*ptr++ = static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 31);
*ptr++ = static_cast<uint8_t>(values[6] >> 23);
*ptr++ = static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_34(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 26);
*ptr++ = static_cast<uint8_t>(values[0] >> 18);
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 30);
*ptr++ = static_cast<uint8_t>(values[2] >> 22);
*ptr++ = static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 26);
*ptr++ = static_cast<uint8_t>(values[4] >> 18);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 30);
*ptr++ = static_cast<uint8_t>(values[6] >> 22);
*ptr++ = static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_35(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 27);
*ptr++ = static_cast<uint8_t>(values[0] >> 19);
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 33);
*ptr++ = static_cast<uint8_t>(values[2] >> 25);
*ptr++ = static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 31);
*ptr++ = static_cast<uint8_t>(values[4] >> 23);
*ptr++ = static_cast<uint8_t>(values[4] >> 15);
*ptr++ = static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 29);
*ptr++ = static_cast<uint8_t>(values[6] >> 21);
*ptr++ = static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_36(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 28);
*ptr++ = static_cast<uint8_t>(values[0] >> 20);
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 28);
*ptr++ = static_cast<uint8_t>(values[2] >> 20);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 28);
*ptr++ = static_cast<uint8_t>(values[4] >> 20);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 28);
*ptr++ = static_cast<uint8_t>(values[6] >> 20);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_37(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 29);
*ptr++ = static_cast<uint8_t>(values[0] >> 21);
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 31);
*ptr++ = static_cast<uint8_t>(values[2] >> 23);
*ptr++ = static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 33);
*ptr++ = static_cast<uint8_t>(values[4] >> 25);
*ptr++ = static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 35);
*ptr++ = static_cast<uint8_t>(values[6] >> 27);
*ptr++ = static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_38(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 30);
*ptr++ = static_cast<uint8_t>(values[0] >> 22);
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 34);
*ptr++ = static_cast<uint8_t>(values[2] >> 26);
*ptr++ = static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 30);
*ptr++ = static_cast<uint8_t>(values[4] >> 22);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 34);
*ptr++ = static_cast<uint8_t>(values[6] >> 26);
*ptr++ = static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_39(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 31);
*ptr++ = static_cast<uint8_t>(values[0] >> 23);
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 37);
*ptr++ = static_cast<uint8_t>(values[2] >> 29);
*ptr++ = static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 35);
*ptr++ = static_cast<uint8_t>(values[4] >> 27);
*ptr++ = static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 33);
*ptr++ = static_cast<uint8_t>(values[6] >> 25);
*ptr++ = static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_40(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 32);
*ptr++ = static_cast<uint8_t>(values[0] >> 24);
*ptr++ = static_cast<uint8_t>(values[0] >> 16);
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 32);
*ptr++ = static_cast<uint8_t>(values[2] >> 24);
*ptr++ = static_cast<uint8_t>(values[2] >> 16);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 32);
*ptr++ = static_cast<uint8_t>(values[4] >> 24);
*ptr++ = static_cast<uint8_t>(values[4] >> 16);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 32);
*ptr++ = static_cast<uint8_t>(values[6] >> 24);
*ptr++ = static_cast<uint8_t>(values[6] >> 16);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_41(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 33);
*ptr++ = static_cast<uint8_t>(values[0] >> 25);
*ptr++ = static_cast<uint8_t>(values[0] >> 17);
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 35);
*ptr++ = static_cast<uint8_t>(values[2] >> 27);
*ptr++ = static_cast<uint8_t>(values[2] >> 19);
*ptr++ = static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 37);
*ptr++ = static_cast<uint8_t>(values[4] >> 29);
*ptr++ = static_cast<uint8_t>(values[4] >> 21);
*ptr++ = static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 39);
*ptr++ = static_cast<uint8_t>(values[6] >> 31);
*ptr++ = static_cast<uint8_t>(values[6] >> 23);
*ptr++ = static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_42(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 34);
*ptr++ = static_cast<uint8_t>(values[0] >> 26);
*ptr++ = static_cast<uint8_t>(values[0] >> 18);
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 38);
*ptr++ = static_cast<uint8_t>(values[2] >> 30);
*ptr++ = static_cast<uint8_t>(values[2] >> 22);
*ptr++ = static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 34);
*ptr++ = static_cast<uint8_t>(values[4] >> 26);
*ptr++ = static_cast<uint8_t>(values[4] >> 18);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 38);
*ptr++ = static_cast<uint8_t>(values[6] >> 30);
*ptr++ = static_cast<uint8_t>(values[6] >> 22);
*ptr++ = static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_43(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 35);
*ptr++ = static_cast<uint8_t>(values[0] >> 27);
*ptr++ = static_cast<uint8_t>(values[0] >> 19);
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 41);
*ptr++ = static_cast<uint8_t>(values[2] >> 33);
*ptr++ = static_cast<uint8_t>(values[2] >> 25);
*ptr++ = static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 39);
*ptr++ = static_cast<uint8_t>(values[4] >> 31);
*ptr++ = static_cast<uint8_t>(values[4] >> 23);
*ptr++ = static_cast<uint8_t>(values[4] >> 15);
*ptr++ = static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 37);
*ptr++ = static_cast<uint8_t>(values[6] >> 29);
*ptr++ = static_cast<uint8_t>(values[6] >> 21);
*ptr++ = static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_44(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 36);
*ptr++ = static_cast<uint8_t>(values[0] >> 28);
*ptr++ = static_cast<uint8_t>(values[0] >> 20);
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 40);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 36);
*ptr++ = static_cast<uint8_t>(values[2] >> 28);
*ptr++ = static_cast<uint8_t>(values[2] >> 20);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 36);
*ptr++ = static_cast<uint8_t>(values[4] >> 28);
*ptr++ = static_cast<uint8_t>(values[4] >> 20);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 40);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 36);
*ptr++ = static_cast<uint8_t>(values[6] >> 28);
*ptr++ = static_cast<uint8_t>(values[6] >> 20);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_45(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 37);
*ptr++ = static_cast<uint8_t>(values[0] >> 29);
*ptr++ = static_cast<uint8_t>(values[0] >> 21);
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 42);
*ptr++ = static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 39);
*ptr++ = static_cast<uint8_t>(values[2] >> 31);
*ptr++ = static_cast<uint8_t>(values[2] >> 23);
*ptr++ = static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 41);
*ptr++ = static_cast<uint8_t>(values[4] >> 33);
*ptr++ = static_cast<uint8_t>(values[4] >> 25);
*ptr++ = static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 43);
*ptr++ = static_cast<uint8_t>(values[6] >> 35);
*ptr++ = static_cast<uint8_t>(values[6] >> 27);
*ptr++ = static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_46(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 38);
*ptr++ = static_cast<uint8_t>(values[0] >> 30);
*ptr++ = static_cast<uint8_t>(values[0] >> 22);
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 44);
*ptr++ = static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 42);
*ptr++ = static_cast<uint8_t>(values[2] >> 34);
*ptr++ = static_cast<uint8_t>(values[2] >> 26);
*ptr++ = static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 38);
*ptr++ = static_cast<uint8_t>(values[4] >> 30);
*ptr++ = static_cast<uint8_t>(values[4] >> 22);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 44);
*ptr++ = static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 42);
*ptr++ = static_cast<uint8_t>(values[6] >> 34);
*ptr++ = static_cast<uint8_t>(values[6] >> 26);
*ptr++ = static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_47(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 39);
*ptr++ = static_cast<uint8_t>(values[0] >> 31);
*ptr++ = static_cast<uint8_t>(values[0] >> 23);
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 46);
*ptr++ = static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 45);
*ptr++ = static_cast<uint8_t>(values[2] >> 37);
*ptr++ = static_cast<uint8_t>(values[2] >> 29);
*ptr++ = static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 43);
*ptr++ = static_cast<uint8_t>(values[4] >> 35);
*ptr++ = static_cast<uint8_t>(values[4] >> 27);
*ptr++ = static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 41);
*ptr++ = static_cast<uint8_t>(values[6] >> 33);
*ptr++ = static_cast<uint8_t>(values[6] >> 25);
*ptr++ = static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_48(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 40);
*ptr++ = static_cast<uint8_t>(values[0] >> 32);
*ptr++ = static_cast<uint8_t>(values[0] >> 24);
*ptr++ = static_cast<uint8_t>(values[0] >> 16);
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 40);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 40);
*ptr++ = static_cast<uint8_t>(values[2] >> 32);
*ptr++ = static_cast<uint8_t>(values[2] >> 24);
*ptr++ = static_cast<uint8_t>(values[2] >> 16);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 40);
*ptr++ = static_cast<uint8_t>(values[4] >> 32);
*ptr++ = static_cast<uint8_t>(values[4] >> 24);
*ptr++ = static_cast<uint8_t>(values[4] >> 16);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 40);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 40);
*ptr++ = static_cast<uint8_t>(values[6] >> 32);
*ptr++ = static_cast<uint8_t>(values[6] >> 24);
*ptr++ = static_cast<uint8_t>(values[6] >> 16);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_49(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 41);
*ptr++ = static_cast<uint8_t>(values[0] >> 33);
*ptr++ = static_cast<uint8_t>(values[0] >> 25);
*ptr++ = static_cast<uint8_t>(values[0] >> 17);
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 42);
*ptr++ = static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 43);
*ptr++ = static_cast<uint8_t>(values[2] >> 35);
*ptr++ = static_cast<uint8_t>(values[2] >> 27);
*ptr++ = static_cast<uint8_t>(values[2] >> 19);
*ptr++ = static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 45);
*ptr++ = static_cast<uint8_t>(values[4] >> 37);
*ptr++ = static_cast<uint8_t>(values[4] >> 29);
*ptr++ = static_cast<uint8_t>(values[4] >> 21);
*ptr++ = static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 46);
*ptr++ = static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 47);
*ptr++ = static_cast<uint8_t>(values[6] >> 39);
*ptr++ = static_cast<uint8_t>(values[6] >> 31);
*ptr++ = static_cast<uint8_t>(values[6] >> 23);
*ptr++ = static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_50(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 42);
*ptr++ = static_cast<uint8_t>(values[0] >> 34);
*ptr++ = static_cast<uint8_t>(values[0] >> 26);
*ptr++ = static_cast<uint8_t>(values[0] >> 18);
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 44);
*ptr++ = static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 46);
*ptr++ = static_cast<uint8_t>(values[2] >> 38);
*ptr++ = static_cast<uint8_t>(values[2] >> 30);
*ptr++ = static_cast<uint8_t>(values[2] >> 22);
*ptr++ = static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 42);
*ptr++ = static_cast<uint8_t>(values[4] >> 34);
*ptr++ = static_cast<uint8_t>(values[4] >> 26);
*ptr++ = static_cast<uint8_t>(values[4] >> 18);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 44);
*ptr++ = static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 46);
*ptr++ = static_cast<uint8_t>(values[6] >> 38);
*ptr++ = static_cast<uint8_t>(values[6] >> 30);
*ptr++ = static_cast<uint8_t>(values[6] >> 22);
*ptr++ = static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_51(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 43);
*ptr++ = static_cast<uint8_t>(values[0] >> 35);
*ptr++ = static_cast<uint8_t>(values[0] >> 27);
*ptr++ = static_cast<uint8_t>(values[0] >> 19);
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 46);
*ptr++ = static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 49);
*ptr++ = static_cast<uint8_t>(values[2] >> 41);
*ptr++ = static_cast<uint8_t>(values[2] >> 33);
*ptr++ = static_cast<uint8_t>(values[2] >> 25);
*ptr++ = static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 47);
*ptr++ = static_cast<uint8_t>(values[4] >> 39);
*ptr++ = static_cast<uint8_t>(values[4] >> 31);
*ptr++ = static_cast<uint8_t>(values[4] >> 23);
*ptr++ = static_cast<uint8_t>(values[4] >> 15);
*ptr++ = static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 50);
*ptr++ = static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 45);
*ptr++ = static_cast<uint8_t>(values[6] >> 37);
*ptr++ = static_cast<uint8_t>(values[6] >> 29);
*ptr++ = static_cast<uint8_t>(values[6] >> 21);
*ptr++ = static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_52(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 44);
*ptr++ = static_cast<uint8_t>(values[0] >> 36);
*ptr++ = static_cast<uint8_t>(values[0] >> 28);
*ptr++ = static_cast<uint8_t>(values[0] >> 20);
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 48);
*ptr++ = static_cast<uint8_t>(values[1] >> 40);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 44);
*ptr++ = static_cast<uint8_t>(values[2] >> 36);
*ptr++ = static_cast<uint8_t>(values[2] >> 28);
*ptr++ = static_cast<uint8_t>(values[2] >> 20);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 44);
*ptr++ = static_cast<uint8_t>(values[4] >> 36);
*ptr++ = static_cast<uint8_t>(values[4] >> 28);
*ptr++ = static_cast<uint8_t>(values[4] >> 20);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 48);
*ptr++ = static_cast<uint8_t>(values[5] >> 40);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 44);
*ptr++ = static_cast<uint8_t>(values[6] >> 36);
*ptr++ = static_cast<uint8_t>(values[6] >> 28);
*ptr++ = static_cast<uint8_t>(values[6] >> 20);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_53(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 45);
*ptr++ = static_cast<uint8_t>(values[0] >> 37);
*ptr++ = static_cast<uint8_t>(values[0] >> 29);
*ptr++ = static_cast<uint8_t>(values[0] >> 21);
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 50);
*ptr++ = static_cast<uint8_t>(values[1] >> 42);
*ptr++ = static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 47);
*ptr++ = static_cast<uint8_t>(values[2] >> 39);
*ptr++ = static_cast<uint8_t>(values[2] >> 31);
*ptr++ = static_cast<uint8_t>(values[2] >> 23);
*ptr++ = static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 49);
*ptr++ = static_cast<uint8_t>(values[4] >> 41);
*ptr++ = static_cast<uint8_t>(values[4] >> 33);
*ptr++ = static_cast<uint8_t>(values[4] >> 25);
*ptr++ = static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 46);
*ptr++ = static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 51);
*ptr++ = static_cast<uint8_t>(values[6] >> 43);
*ptr++ = static_cast<uint8_t>(values[6] >> 35);
*ptr++ = static_cast<uint8_t>(values[6] >> 27);
*ptr++ = static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_54(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 46);
*ptr++ = static_cast<uint8_t>(values[0] >> 38);
*ptr++ = static_cast<uint8_t>(values[0] >> 30);
*ptr++ = static_cast<uint8_t>(values[0] >> 22);
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 52);
*ptr++ = static_cast<uint8_t>(values[1] >> 44);
*ptr++ = static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 50);
*ptr++ = static_cast<uint8_t>(values[2] >> 42);
*ptr++ = static_cast<uint8_t>(values[2] >> 34);
*ptr++ = static_cast<uint8_t>(values[2] >> 26);
*ptr++ = static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 46);
*ptr++ = static_cast<uint8_t>(values[4] >> 38);
*ptr++ = static_cast<uint8_t>(values[4] >> 30);
*ptr++ = static_cast<uint8_t>(values[4] >> 22);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 52);
*ptr++ = static_cast<uint8_t>(values[5] >> 44);
*ptr++ = static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 50);
*ptr++ = static_cast<uint8_t>(values[6] >> 42);
*ptr++ = static_cast<uint8_t>(values[6] >> 34);
*ptr++ = static_cast<uint8_t>(values[6] >> 26);
*ptr++ = static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_55(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 47);
*ptr++ = static_cast<uint8_t>(values[0] >> 39);
*ptr++ = static_cast<uint8_t>(values[0] >> 31);
*ptr++ = static_cast<uint8_t>(values[0] >> 23);
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 54);
*ptr++ = static_cast<uint8_t>(values[1] >> 46);
*ptr++ = static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 53);
*ptr++ = static_cast<uint8_t>(values[2] >> 45);
*ptr++ = static_cast<uint8_t>(values[2] >> 37);
*ptr++ = static_cast<uint8_t>(values[2] >> 29);
*ptr++ = static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 51);
*ptr++ = static_cast<uint8_t>(values[4] >> 43);
*ptr++ = static_cast<uint8_t>(values[4] >> 35);
*ptr++ = static_cast<uint8_t>(values[4] >> 27);
*ptr++ = static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 50);
*ptr++ = static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 49);
*ptr++ = static_cast<uint8_t>(values[6] >> 41);
*ptr++ = static_cast<uint8_t>(values[6] >> 33);
*ptr++ = static_cast<uint8_t>(values[6] >> 25);
*ptr++ = static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_56(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 48);
*ptr++ = static_cast<uint8_t>(values[0] >> 40);
*ptr++ = static_cast<uint8_t>(values[0] >> 32);
*ptr++ = static_cast<uint8_t>(values[0] >> 24);
*ptr++ = static_cast<uint8_t>(values[0] >> 16);
*ptr++ = static_cast<uint8_t>(values[0] >> 8);
*ptr++ = static_cast<uint8_t>(values[0]);
*ptr++ = static_cast<uint8_t>(values[1] >> 48);
*ptr++ = static_cast<uint8_t>(values[1] >> 40);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 48);
*ptr++ = static_cast<uint8_t>(values[2] >> 40);
*ptr++ = static_cast<uint8_t>(values[2] >> 32);
*ptr++ = static_cast<uint8_t>(values[2] >> 24);
*ptr++ = static_cast<uint8_t>(values[2] >> 16);
*ptr++ = static_cast<uint8_t>(values[2] >> 8);
*ptr++ = static_cast<uint8_t>(values[2]);
*ptr++ = static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 48);
*ptr++ = static_cast<uint8_t>(values[4] >> 40);
*ptr++ = static_cast<uint8_t>(values[4] >> 32);
*ptr++ = static_cast<uint8_t>(values[4] >> 24);
*ptr++ = static_cast<uint8_t>(values[4] >> 16);
*ptr++ = static_cast<uint8_t>(values[4] >> 8);
*ptr++ = static_cast<uint8_t>(values[4]);
*ptr++ = static_cast<uint8_t>(values[5] >> 48);
*ptr++ = static_cast<uint8_t>(values[5] >> 40);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 48);
*ptr++ = static_cast<uint8_t>(values[6] >> 40);
*ptr++ = static_cast<uint8_t>(values[6] >> 32);
*ptr++ = static_cast<uint8_t>(values[6] >> 24);
*ptr++ = static_cast<uint8_t>(values[6] >> 16);
*ptr++ = static_cast<uint8_t>(values[6] >> 8);
*ptr++ = static_cast<uint8_t>(values[6]);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_57(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 49);
*ptr++ = static_cast<uint8_t>(values[0] >> 41);
*ptr++ = static_cast<uint8_t>(values[0] >> 33);
*ptr++ = static_cast<uint8_t>(values[0] >> 25);
*ptr++ = static_cast<uint8_t>(values[0] >> 17);
*ptr++ = static_cast<uint8_t>(values[0] >> 9);
*ptr++ = static_cast<uint8_t>(values[0] >> 1);
*ptr = static_cast<uint8_t>(values[0] << 7);
*ptr++ |= static_cast<uint8_t>(values[1] >> 50);
*ptr++ = static_cast<uint8_t>(values[1] >> 42);
*ptr++ = static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 51);
*ptr++ = static_cast<uint8_t>(values[2] >> 43);
*ptr++ = static_cast<uint8_t>(values[2] >> 35);
*ptr++ = static_cast<uint8_t>(values[2] >> 27);
*ptr++ = static_cast<uint8_t>(values[2] >> 19);
*ptr++ = static_cast<uint8_t>(values[2] >> 11);
*ptr++ = static_cast<uint8_t>(values[2] >> 3);
*ptr = static_cast<uint8_t>(values[2] << 5);
*ptr++ |= static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 53);
*ptr++ = static_cast<uint8_t>(values[4] >> 45);
*ptr++ = static_cast<uint8_t>(values[4] >> 37);
*ptr++ = static_cast<uint8_t>(values[4] >> 29);
*ptr++ = static_cast<uint8_t>(values[4] >> 21);
*ptr++ = static_cast<uint8_t>(values[4] >> 13);
*ptr++ = static_cast<uint8_t>(values[4] >> 5);
*ptr = static_cast<uint8_t>(values[4] << 3);
*ptr++ |= static_cast<uint8_t>(values[5] >> 54);
*ptr++ = static_cast<uint8_t>(values[5] >> 46);
*ptr++ = static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 55);
*ptr++ = static_cast<uint8_t>(values[6] >> 47);
*ptr++ = static_cast<uint8_t>(values[6] >> 39);
*ptr++ = static_cast<uint8_t>(values[6] >> 31);
*ptr++ = static_cast<uint8_t>(values[6] >> 23);
*ptr++ = static_cast<uint8_t>(values[6] >> 15);
*ptr++ = static_cast<uint8_t>(values[6] >> 7);
*ptr = static_cast<uint8_t>(values[6] << 1);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_58(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 50);
*ptr++ = static_cast<uint8_t>(values[0] >> 42);
*ptr++ = static_cast<uint8_t>(values[0] >> 34);
*ptr++ = static_cast<uint8_t>(values[0] >> 26);
*ptr++ = static_cast<uint8_t>(values[0] >> 18);
*ptr++ = static_cast<uint8_t>(values[0] >> 10);
*ptr++ = static_cast<uint8_t>(values[0] >> 2);
*ptr = static_cast<uint8_t>(values[0] << 6);
*ptr++ |= static_cast<uint8_t>(values[1] >> 52);
*ptr++ = static_cast<uint8_t>(values[1] >> 44);
*ptr++ = static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 54);
*ptr++ = static_cast<uint8_t>(values[2] >> 46);
*ptr++ = static_cast<uint8_t>(values[2] >> 38);
*ptr++ = static_cast<uint8_t>(values[2] >> 30);
*ptr++ = static_cast<uint8_t>(values[2] >> 22);
*ptr++ = static_cast<uint8_t>(values[2] >> 14);
*ptr++ = static_cast<uint8_t>(values[2] >> 6);
*ptr = static_cast<uint8_t>(values[2] << 2);
*ptr++ |= static_cast<uint8_t>(values[3] >> 56);
*ptr++ = static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 50);
*ptr++ = static_cast<uint8_t>(values[4] >> 42);
*ptr++ = static_cast<uint8_t>(values[4] >> 34);
*ptr++ = static_cast<uint8_t>(values[4] >> 26);
*ptr++ = static_cast<uint8_t>(values[4] >> 18);
*ptr++ = static_cast<uint8_t>(values[4] >> 10);
*ptr++ = static_cast<uint8_t>(values[4] >> 2);
*ptr = static_cast<uint8_t>(values[4] << 6);
*ptr++ |= static_cast<uint8_t>(values[5] >> 52);
*ptr++ = static_cast<uint8_t>(values[5] >> 44);
*ptr++ = static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 54);
*ptr++ = static_cast<uint8_t>(values[6] >> 46);
*ptr++ = static_cast<uint8_t>(values[6] >> 38);
*ptr++ = static_cast<uint8_t>(values[6] >> 30);
*ptr++ = static_cast<uint8_t>(values[6] >> 22);
*ptr++ = static_cast<uint8_t>(values[6] >> 14);
*ptr++ = static_cast<uint8_t>(values[6] >> 6);
*ptr = static_cast<uint8_t>(values[6] << 2);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_59(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 51);
*ptr++ = static_cast<uint8_t>(values[0] >> 43);
*ptr++ = static_cast<uint8_t>(values[0] >> 35);
*ptr++ = static_cast<uint8_t>(values[0] >> 27);
*ptr++ = static_cast<uint8_t>(values[0] >> 19);
*ptr++ = static_cast<uint8_t>(values[0] >> 11);
*ptr++ = static_cast<uint8_t>(values[0] >> 3);
*ptr = static_cast<uint8_t>(values[0] << 5);
*ptr++ |= static_cast<uint8_t>(values[1] >> 54);
*ptr++ = static_cast<uint8_t>(values[1] >> 46);
*ptr++ = static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 57);
*ptr++ = static_cast<uint8_t>(values[2] >> 49);
*ptr++ = static_cast<uint8_t>(values[2] >> 41);
*ptr++ = static_cast<uint8_t>(values[2] >> 33);
*ptr++ = static_cast<uint8_t>(values[2] >> 25);
*ptr++ = static_cast<uint8_t>(values[2] >> 17);
*ptr++ = static_cast<uint8_t>(values[2] >> 9);
*ptr++ = static_cast<uint8_t>(values[2] >> 1);
*ptr = static_cast<uint8_t>(values[2] << 7);
*ptr++ |= static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 55);
*ptr++ = static_cast<uint8_t>(values[4] >> 47);
*ptr++ = static_cast<uint8_t>(values[4] >> 39);
*ptr++ = static_cast<uint8_t>(values[4] >> 31);
*ptr++ = static_cast<uint8_t>(values[4] >> 23);
*ptr++ = static_cast<uint8_t>(values[4] >> 15);
*ptr++ = static_cast<uint8_t>(values[4] >> 7);
*ptr = static_cast<uint8_t>(values[4] << 1);
*ptr++ |= static_cast<uint8_t>(values[5] >> 58);
*ptr++ = static_cast<uint8_t>(values[5] >> 50);
*ptr++ = static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 53);
*ptr++ = static_cast<uint8_t>(values[6] >> 45);
*ptr++ = static_cast<uint8_t>(values[6] >> 37);
*ptr++ = static_cast<uint8_t>(values[6] >> 29);
*ptr++ = static_cast<uint8_t>(values[6] >> 21);
*ptr++ = static_cast<uint8_t>(values[6] >> 13);
*ptr++ = static_cast<uint8_t>(values[6] >> 5);
*ptr = static_cast<uint8_t>(values[6] << 3);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_60(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 52);
*ptr++ = static_cast<uint8_t>(values[0] >> 44);
*ptr++ = static_cast<uint8_t>(values[0] >> 36);
*ptr++ = static_cast<uint8_t>(values[0] >> 28);
*ptr++ = static_cast<uint8_t>(values[0] >> 20);
*ptr++ = static_cast<uint8_t>(values[0] >> 12);
*ptr++ = static_cast<uint8_t>(values[0] >> 4);
*ptr = static_cast<uint8_t>(values[0] << 4);
*ptr++ |= static_cast<uint8_t>(values[1] >> 56);
*ptr++ = static_cast<uint8_t>(values[1] >> 48);
*ptr++ = static_cast<uint8_t>(values[1] >> 40);
*ptr++ = static_cast<uint8_t>(values[1] >> 32);
*ptr++ = static_cast<uint8_t>(values[1] >> 24);
*ptr++ = static_cast<uint8_t>(values[1] >> 16);
*ptr++ = static_cast<uint8_t>(values[1] >> 8);
*ptr++ = static_cast<uint8_t>(values[1]);
*ptr++ = static_cast<uint8_t>(values[2] >> 52);
*ptr++ = static_cast<uint8_t>(values[2] >> 44);
*ptr++ = static_cast<uint8_t>(values[2] >> 36);
*ptr++ = static_cast<uint8_t>(values[2] >> 28);
*ptr++ = static_cast<uint8_t>(values[2] >> 20);
*ptr++ = static_cast<uint8_t>(values[2] >> 12);
*ptr++ = static_cast<uint8_t>(values[2] >> 4);
*ptr = static_cast<uint8_t>(values[2] << 4);
*ptr++ |= static_cast<uint8_t>(values[3] >> 56);
*ptr++ = static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 52);
*ptr++ = static_cast<uint8_t>(values[4] >> 44);
*ptr++ = static_cast<uint8_t>(values[4] >> 36);
*ptr++ = static_cast<uint8_t>(values[4] >> 28);
*ptr++ = static_cast<uint8_t>(values[4] >> 20);
*ptr++ = static_cast<uint8_t>(values[4] >> 12);
*ptr++ = static_cast<uint8_t>(values[4] >> 4);
*ptr = static_cast<uint8_t>(values[4] << 4);
*ptr++ |= static_cast<uint8_t>(values[5] >> 56);
*ptr++ = static_cast<uint8_t>(values[5] >> 48);
*ptr++ = static_cast<uint8_t>(values[5] >> 40);
*ptr++ = static_cast<uint8_t>(values[5] >> 32);
*ptr++ = static_cast<uint8_t>(values[5] >> 24);
*ptr++ = static_cast<uint8_t>(values[5] >> 16);
*ptr++ = static_cast<uint8_t>(values[5] >> 8);
*ptr++ = static_cast<uint8_t>(values[5]);
*ptr++ = static_cast<uint8_t>(values[6] >> 52);
*ptr++ = static_cast<uint8_t>(values[6] >> 44);
*ptr++ = static_cast<uint8_t>(values[6] >> 36);
*ptr++ = static_cast<uint8_t>(values[6] >> 28);
*ptr++ = static_cast<uint8_t>(values[6] >> 20);
*ptr++ = static_cast<uint8_t>(values[6] >> 12);
*ptr++ = static_cast<uint8_t>(values[6] >> 4);
*ptr = static_cast<uint8_t>(values[6] << 4);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_61(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 53);
*ptr++ = static_cast<uint8_t>(values[0] >> 45);
*ptr++ = static_cast<uint8_t>(values[0] >> 37);
*ptr++ = static_cast<uint8_t>(values[0] >> 29);
*ptr++ = static_cast<uint8_t>(values[0] >> 21);
*ptr++ = static_cast<uint8_t>(values[0] >> 13);
*ptr++ = static_cast<uint8_t>(values[0] >> 5);
*ptr = static_cast<uint8_t>(values[0] << 3);
*ptr++ |= static_cast<uint8_t>(values[1] >> 58);
*ptr++ = static_cast<uint8_t>(values[1] >> 50);
*ptr++ = static_cast<uint8_t>(values[1] >> 42);
*ptr++ = static_cast<uint8_t>(values[1] >> 34);
*ptr++ = static_cast<uint8_t>(values[1] >> 26);
*ptr++ = static_cast<uint8_t>(values[1] >> 18);
*ptr++ = static_cast<uint8_t>(values[1] >> 10);
*ptr++ = static_cast<uint8_t>(values[1] >> 2);
*ptr = static_cast<uint8_t>(values[1] << 6);
*ptr++ |= static_cast<uint8_t>(values[2] >> 55);
*ptr++ = static_cast<uint8_t>(values[2] >> 47);
*ptr++ = static_cast<uint8_t>(values[2] >> 39);
*ptr++ = static_cast<uint8_t>(values[2] >> 31);
*ptr++ = static_cast<uint8_t>(values[2] >> 23);
*ptr++ = static_cast<uint8_t>(values[2] >> 15);
*ptr++ = static_cast<uint8_t>(values[2] >> 7);
*ptr = static_cast<uint8_t>(values[2] << 1);
*ptr++ |= static_cast<uint8_t>(values[3] >> 60);
*ptr++ = static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 57);
*ptr++ = static_cast<uint8_t>(values[4] >> 49);
*ptr++ = static_cast<uint8_t>(values[4] >> 41);
*ptr++ = static_cast<uint8_t>(values[4] >> 33);
*ptr++ = static_cast<uint8_t>(values[4] >> 25);
*ptr++ = static_cast<uint8_t>(values[4] >> 17);
*ptr++ = static_cast<uint8_t>(values[4] >> 9);
*ptr++ = static_cast<uint8_t>(values[4] >> 1);
*ptr = static_cast<uint8_t>(values[4] << 7);
*ptr++ |= static_cast<uint8_t>(values[5] >> 54);
*ptr++ = static_cast<uint8_t>(values[5] >> 46);
*ptr++ = static_cast<uint8_t>(values[5] >> 38);
*ptr++ = static_cast<uint8_t>(values[5] >> 30);
*ptr++ = static_cast<uint8_t>(values[5] >> 22);
*ptr++ = static_cast<uint8_t>(values[5] >> 14);
*ptr++ = static_cast<uint8_t>(values[5] >> 6);
*ptr = static_cast<uint8_t>(values[5] << 2);
*ptr++ |= static_cast<uint8_t>(values[6] >> 59);
*ptr++ = static_cast<uint8_t>(values[6] >> 51);
*ptr++ = static_cast<uint8_t>(values[6] >> 43);
*ptr++ = static_cast<uint8_t>(values[6] >> 35);
*ptr++ = static_cast<uint8_t>(values[6] >> 27);
*ptr++ = static_cast<uint8_t>(values[6] >> 19);
*ptr++ = static_cast<uint8_t>(values[6] >> 11);
*ptr++ = static_cast<uint8_t>(values[6] >> 3);
*ptr = static_cast<uint8_t>(values[6] << 5);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_62(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 54);
*ptr++ = static_cast<uint8_t>(values[0] >> 46);
*ptr++ = static_cast<uint8_t>(values[0] >> 38);
*ptr++ = static_cast<uint8_t>(values[0] >> 30);
*ptr++ = static_cast<uint8_t>(values[0] >> 22);
*ptr++ = static_cast<uint8_t>(values[0] >> 14);
*ptr++ = static_cast<uint8_t>(values[0] >> 6);
*ptr = static_cast<uint8_t>(values[0] << 2);
*ptr++ |= static_cast<uint8_t>(values[1] >> 60);
*ptr++ = static_cast<uint8_t>(values[1] >> 52);
*ptr++ = static_cast<uint8_t>(values[1] >> 44);
*ptr++ = static_cast<uint8_t>(values[1] >> 36);
*ptr++ = static_cast<uint8_t>(values[1] >> 28);
*ptr++ = static_cast<uint8_t>(values[1] >> 20);
*ptr++ = static_cast<uint8_t>(values[1] >> 12);
*ptr++ = static_cast<uint8_t>(values[1] >> 4);
*ptr = static_cast<uint8_t>(values[1] << 4);
*ptr++ |= static_cast<uint8_t>(values[2] >> 58);
*ptr++ = static_cast<uint8_t>(values[2] >> 50);
*ptr++ = static_cast<uint8_t>(values[2] >> 42);
*ptr++ = static_cast<uint8_t>(values[2] >> 34);
*ptr++ = static_cast<uint8_t>(values[2] >> 26);
*ptr++ = static_cast<uint8_t>(values[2] >> 18);
*ptr++ = static_cast<uint8_t>(values[2] >> 10);
*ptr++ = static_cast<uint8_t>(values[2] >> 2);
*ptr = static_cast<uint8_t>(values[2] << 6);
*ptr++ |= static_cast<uint8_t>(values[3] >> 56);
*ptr++ = static_cast<uint8_t>(values[3] >> 48);
*ptr++ = static_cast<uint8_t>(values[3] >> 40);
*ptr++ = static_cast<uint8_t>(values[3] >> 32);
*ptr++ = static_cast<uint8_t>(values[3] >> 24);
*ptr++ = static_cast<uint8_t>(values[3] >> 16);
*ptr++ = static_cast<uint8_t>(values[3] >> 8);
*ptr++ = static_cast<uint8_t>(values[3]);
*ptr++ = static_cast<uint8_t>(values[4] >> 54);
*ptr++ = static_cast<uint8_t>(values[4] >> 46);
*ptr++ = static_cast<uint8_t>(values[4] >> 38);
*ptr++ = static_cast<uint8_t>(values[4] >> 30);
*ptr++ = static_cast<uint8_t>(values[4] >> 22);
*ptr++ = static_cast<uint8_t>(values[4] >> 14);
*ptr++ = static_cast<uint8_t>(values[4] >> 6);
*ptr = static_cast<uint8_t>(values[4] << 2);
*ptr++ |= static_cast<uint8_t>(values[5] >> 60);
*ptr++ = static_cast<uint8_t>(values[5] >> 52);
*ptr++ = static_cast<uint8_t>(values[5] >> 44);
*ptr++ = static_cast<uint8_t>(values[5] >> 36);
*ptr++ = static_cast<uint8_t>(values[5] >> 28);
*ptr++ = static_cast<uint8_t>(values[5] >> 20);
*ptr++ = static_cast<uint8_t>(values[5] >> 12);
*ptr++ = static_cast<uint8_t>(values[5] >> 4);
*ptr = static_cast<uint8_t>(values[5] << 4);
*ptr++ |= static_cast<uint8_t>(values[6] >> 58);
*ptr++ = static_cast<uint8_t>(values[6] >> 50);
*ptr++ = static_cast<uint8_t>(values[6] >> 42);
*ptr++ = static_cast<uint8_t>(values[6] >> 34);
*ptr++ = static_cast<uint8_t>(values[6] >> 26);
*ptr++ = static_cast<uint8_t>(values[6] >> 18);
*ptr++ = static_cast<uint8_t>(values[6] >> 10);
*ptr++ = static_cast<uint8_t>(values[6] >> 2);
*ptr = static_cast<uint8_t>(values[6] << 6);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_63(const uint64_t* values, uint8_t* ptr) {
*ptr++ = static_cast<uint8_t>(values[0] >> 55);
*ptr++ = static_cast<uint8_t>(values[0] >> 47);
*ptr++ = static_cast<uint8_t>(values[0] >> 39);
*ptr++ = static_cast<uint8_t>(values[0] >> 31);
*ptr++ = static_cast<uint8_t>(values[0] >> 23);
*ptr++ = static_cast<uint8_t>(values[0] >> 15);
*ptr++ = static_cast<uint8_t>(values[0] >> 7);
*ptr = static_cast<uint8_t>(values[0] << 1);
*ptr++ |= static_cast<uint8_t>(values[1] >> 62);
*ptr++ = static_cast<uint8_t>(values[1] >> 54);
*ptr++ = static_cast<uint8_t>(values[1] >> 46);
*ptr++ = static_cast<uint8_t>(values[1] >> 38);
*ptr++ = static_cast<uint8_t>(values[1] >> 30);
*ptr++ = static_cast<uint8_t>(values[1] >> 22);
*ptr++ = static_cast<uint8_t>(values[1] >> 14);
*ptr++ = static_cast<uint8_t>(values[1] >> 6);
*ptr = static_cast<uint8_t>(values[1] << 2);
*ptr++ |= static_cast<uint8_t>(values[2] >> 61);
*ptr++ = static_cast<uint8_t>(values[2] >> 53);
*ptr++ = static_cast<uint8_t>(values[2] >> 45);
*ptr++ = static_cast<uint8_t>(values[2] >> 37);
*ptr++ = static_cast<uint8_t>(values[2] >> 29);
*ptr++ = static_cast<uint8_t>(values[2] >> 21);
*ptr++ = static_cast<uint8_t>(values[2] >> 13);
*ptr++ = static_cast<uint8_t>(values[2] >> 5);
*ptr = static_cast<uint8_t>(values[2] << 3);
*ptr++ |= static_cast<uint8_t>(values[3] >> 60);
*ptr++ = static_cast<uint8_t>(values[3] >> 52);
*ptr++ = static_cast<uint8_t>(values[3] >> 44);
*ptr++ = static_cast<uint8_t>(values[3] >> 36);
*ptr++ = static_cast<uint8_t>(values[3] >> 28);
*ptr++ = static_cast<uint8_t>(values[3] >> 20);
*ptr++ = static_cast<uint8_t>(values[3] >> 12);
*ptr++ = static_cast<uint8_t>(values[3] >> 4);
*ptr = static_cast<uint8_t>(values[3] << 4);
*ptr++ |= static_cast<uint8_t>(values[4] >> 59);
*ptr++ = static_cast<uint8_t>(values[4] >> 51);
*ptr++ = static_cast<uint8_t>(values[4] >> 43);
*ptr++ = static_cast<uint8_t>(values[4] >> 35);
*ptr++ = static_cast<uint8_t>(values[4] >> 27);
*ptr++ = static_cast<uint8_t>(values[4] >> 19);
*ptr++ = static_cast<uint8_t>(values[4] >> 11);
*ptr++ = static_cast<uint8_t>(values[4] >> 3);
*ptr = static_cast<uint8_t>(values[4] << 5);
*ptr++ |= static_cast<uint8_t>(values[5] >> 58);
*ptr++ = static_cast<uint8_t>(values[5] >> 50);
*ptr++ = static_cast<uint8_t>(values[5] >> 42);
*ptr++ = static_cast<uint8_t>(values[5] >> 34);
*ptr++ = static_cast<uint8_t>(values[5] >> 26);
*ptr++ = static_cast<uint8_t>(values[5] >> 18);
*ptr++ = static_cast<uint8_t>(values[5] >> 10);
*ptr++ = static_cast<uint8_t>(values[5] >> 2);
*ptr = static_cast<uint8_t>(values[5] << 6);
*ptr++ |= static_cast<uint8_t>(values[6] >> 57);
*ptr++ = static_cast<uint8_t>(values[6] >> 49);
*ptr++ = static_cast<uint8_t>(values[6] >> 41);
*ptr++ = static_cast<uint8_t>(values[6] >> 33);
*ptr++ = static_cast<uint8_t>(values[6] >> 25);
*ptr++ = static_cast<uint8_t>(values[6] >> 17);
*ptr++ = static_cast<uint8_t>(values[6] >> 9);
*ptr++ = static_cast<uint8_t>(values[6] >> 1);
*ptr = static_cast<uint8_t>(values[6] << 7);
*ptr++ |= static_cast<uint8_t>(values[7] >> 56);
*ptr++ = static_cast<uint8_t>(values[7] >> 48);
*ptr++ = static_cast<uint8_t>(values[7] >> 40);
*ptr++ = static_cast<uint8_t>(values[7] >> 32);
*ptr++ = static_cast<uint8_t>(values[7] >> 24);
*ptr++ = static_cast<uint8_t>(values[7] >> 16);
*ptr++ = static_cast<uint8_t>(values[7] >> 8);
*ptr = static_cast<uint8_t>(values[7]);
}
static inline void unpack_bits_1(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 7;
values[1] = (*ptr >> 6) & 1;
values[2] = (*ptr >> 5) & 1;
values[3] = (*ptr >> 4) & 1;
values[4] = (*ptr >> 3) & 1;
values[5] = (*ptr >> 2) & 1;
values[6] = (*ptr >> 1) & 1;
values[7] = *ptr & 1;
}
static inline void unpack_bits_2(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 6;
values[1] = (*ptr >> 4) & 3;
values[2] = (*ptr >> 2) & 3;
values[3] = *ptr++ & 3;
values[4] = *ptr >> 6;
values[5] = (*ptr >> 4) & 3;
values[6] = (*ptr >> 2) & 3;
values[7] = *ptr & 3;
}
static inline void unpack_bits_3(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 5;
values[1] = (*ptr >> 2) & 7;
values[2] = (*ptr++ & 3) << 1;
values[2] |= *ptr >> 7;
values[3] = (*ptr >> 4) & 7;
values[4] = (*ptr >> 1) & 7;
values[5] = (*ptr++ & 1) << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr >> 3) & 7;
values[7] = *ptr & 7;
}
static inline void unpack_bits_4(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 4;
values[1] = *ptr++ & 0xf;
values[2] = *ptr >> 4;
values[3] = *ptr++ & 0xf;
values[4] = *ptr >> 4;
values[5] = *ptr++ & 0xf;
values[6] = *ptr >> 4;
values[7] = *ptr & 0xf;
}
static inline void unpack_bits_5(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 3;
values[1] = (*ptr++ & 7) << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr >> 1) & 0x1f;
values[3] = (*ptr++ & 1) << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 1;
values[4] |= *ptr >> 7;
values[5] = (*ptr >> 2) & 0x1f;
values[6] = (*ptr++ & 3) << 3;
values[6] |= *ptr >> 5;
values[7] = *ptr & 0x1f;
}
static inline void unpack_bits_6(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 2;
values[1] = (*ptr++ & 3) << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 2;
values[2] |= *ptr >> 6;
values[3] = *ptr++ & 0x3f;
values[4] = *ptr >> 2;
values[5] = (*ptr++ & 3) << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 2;
values[6] |= *ptr >> 6;
values[7] = *ptr & 0x3f;
}
static inline void unpack_bits_7(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr >> 1;
values[1] = (*ptr++ & 1) << 6;
values[1] |= *ptr >> 2;
values[2] = (*ptr++ & 3) << 5;
values[2] |= *ptr >> 3;
values[3] = (*ptr++ & 7) << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 3;
values[4] |= *ptr >> 5;
values[5] = (*ptr++ & 0x1f) << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 1;
values[6] |= *ptr >> 7;
values[7] = *ptr & 0x7f;
}
static inline void unpack_bits_8(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++;
values[1] = *ptr++;
values[2] = *ptr++;
values[3] = *ptr++;
values[4] = *ptr++;
values[5] = *ptr++;
values[6] = *ptr++;
values[7] = *ptr;
}
static inline void unpack_bits_9(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = (*ptr++ & 0x7f) << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 3;
values[2] |= *ptr >> 5;
values[3] = (*ptr++ & 0x1f) << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 5;
values[4] |= *ptr >> 3;
values[5] = (*ptr++ & 7) << 6;
values[5] |= *ptr >> 2;
values[6] = (*ptr++ & 3) << 7;
values[6] |= *ptr >> 1;
values[7] = (*ptr++ & 1) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_10(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = (*ptr++ & 0x3f) << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 6;
values[2] |= *ptr >> 2;
values[3] = (*ptr++ & 3) << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = (*ptr++ & 0x3f) << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 6;
values[6] |= *ptr >> 2;
values[7] = (*ptr++ & 3) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_11(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = (*ptr++ & 0x1f) << 6;
values[1] |= *ptr >> 2;
values[2] = (*ptr++ & 3) << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = (*ptr++ & 0x7f) << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 7;
values[4] |= *ptr >> 1;
values[5] = (*ptr++ & 1) << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 5;
values[6] |= *ptr >> 3;
values[7] = (*ptr++ & 7) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_12(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = (*ptr++ & 0xf) << 8;
values[1] |= *ptr++;
values[2] = *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = (*ptr++ & 0xf) << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = (*ptr++ & 0xf) << 8;
values[5] |= *ptr++;
values[6] = *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = (*ptr++ & 0xf) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_13(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = (*ptr++ & 7) << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 7;
values[2] |= *ptr >> 1;
values[3] = (*ptr++ & 1) << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = (*ptr++ & 0x7f) << 6;
values[5] |= *ptr >> 2;
values[6] = (*ptr++ & 3) << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = (*ptr++ & 0x1f) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_14(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = (*ptr++ & 3) << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = (*ptr++ & 0x3f) << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = (*ptr++ & 3) << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = (*ptr++ & 0x3f) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_15(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = (*ptr++ & 1) << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = (*ptr++ & 3) << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = (*ptr++ & 7) << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = (*ptr++ & 0x1f) << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = (*ptr++ & 0x7f) << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_16(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 8;
values[0] |= *ptr++;
values[1] = *ptr++ << 8;
values[1] |= *ptr++;
values[2] = *ptr++ << 8;
values[2] |= *ptr++;
values[3] = *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 8;
values[4] |= *ptr++;
values[5] = *ptr++ << 8;
values[5] |= *ptr++;
values[6] = *ptr++ << 8;
values[6] |= *ptr++;
values[7] = *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_17(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = (*ptr++ & 0x7f) << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = (*ptr++ & 0x1f) << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = (*ptr++ & 7) << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = (*ptr++ & 3) << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = (*ptr++ & 1) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_18(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = (*ptr++ & 0x3f) << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = (*ptr++ & 3) << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = (*ptr++ & 0x3f) << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = (*ptr++ & 3) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_19(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = (*ptr++ & 0x1f) << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = (*ptr++ & 3) << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = (*ptr++ & 0x7f) << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = (*ptr++ & 1) << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = (*ptr++ & 7) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_20(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = (*ptr++ & 0xf) << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = (*ptr++ & 0xf) << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = (*ptr++ & 0xf) << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = (*ptr++ & 0xf) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_21(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = (*ptr++ & 7) << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = (*ptr++ & 1) << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = (*ptr++ & 0x7f) << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = (*ptr++ & 3) << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = (*ptr++ & 0x1f) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_22(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = (*ptr++ & 3) << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = (*ptr++ & 0x3f) << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = (*ptr++ & 3) << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = (*ptr++ & 0x3f) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_23(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = (*ptr++ & 1) << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = (*ptr++ & 3) << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = (*ptr++ & 7) << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = (*ptr++ & 0x1f) << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = (*ptr++ & 0x7f) << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_24(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 16;
values[0] |= *ptr++ << 8;
values[0] |= *ptr++;
values[1] = *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = *ptr++ << 16;
values[2] |= *ptr++ << 8;
values[2] |= *ptr++;
values[3] = *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 16;
values[4] |= *ptr++ << 8;
values[4] |= *ptr++;
values[5] = *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = *ptr++ << 16;
values[6] |= *ptr++ << 8;
values[6] |= *ptr++;
values[7] = *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_25(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 17;
values[0] |= *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = (*ptr++ & 0x7f) << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 19;
values[2] |= *ptr++ << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = (*ptr++ & 0x1f) << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 21;
values[4] |= *ptr++ << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = (*ptr++ & 7) << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = (*ptr++ & 3) << 23;
values[6] |= *ptr++ << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = static_cast<uint64_t>(*ptr++ & 1) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_26(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 18;
values[0] |= *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = (*ptr++ & 0x3f) << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = (*ptr++ & 0xf) << 22;
values[2] |= *ptr++ << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = static_cast<uint64_t>(*ptr++ & 3) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 18;
values[4] |= *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = (*ptr++ & 0x3f) << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = (*ptr++ & 0xf) << 22;
values[6] |= *ptr++ << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = static_cast<uint64_t>(*ptr++ & 3) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_27(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 19;
values[0] |= *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = (*ptr++ & 0x1f) << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 25;
values[2] |= *ptr++ << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = (*ptr++ & 0x7f) << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = (*ptr++ & 0xf) << 23;
values[4] |= *ptr++ << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = static_cast<uint64_t>(*ptr++ & 1) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = (*ptr++ & 0x3f) << 21;
values[6] |= *ptr++ << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = static_cast<uint64_t>(*ptr++ & 7) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_28(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 20;
values[0] |= *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = *ptr++ << 20;
values[2] |= *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 20;
values[4] |= *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = *ptr++ << 20;
values[6] |= *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_29(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 21;
values[0] |= *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = static_cast<uint64_t>(*ptr++ & 7) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = (*ptr++ & 0x3f) << 23;
values[2] |= *ptr++ << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = static_cast<uint64_t>(*ptr++ & 1) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 25;
values[4] |= *ptr++ << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = (*ptr++ & 0x7f) << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 27;
values[6] |= *ptr++ << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_30(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 22;
values[0] |= *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = static_cast<uint64_t>(*ptr++ & 3) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 26;
values[2] |= *ptr++ << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = *ptr++ << 22;
values[4] |= *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = static_cast<uint64_t>(*ptr++ & 3) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 26;
values[6] |= *ptr++ << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_31(uint64_t* values, const uint8_t* ptr) {
values[0] = *ptr++ << 23;
values[0] |= *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = static_cast<uint64_t>(*ptr++ & 1) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 29;
values[2] |= *ptr++ << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = static_cast<uint64_t>(*ptr++ & 7) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 27;
values[4] |= *ptr++ << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 25;
values[6] |= *ptr++ << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_32(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 24;
values[0] |= *ptr++ << 16;
values[0] |= *ptr++ << 8;
values[0] |= *ptr++;
values[1] = static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 24;
values[2] |= *ptr++ << 16;
values[2] |= *ptr++ << 8;
values[2] |= *ptr++;
values[3] = static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 24;
values[4] |= *ptr++ << 16;
values[4] |= *ptr++ << 8;
values[4] |= *ptr++;
values[5] = static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 24;
values[6] |= *ptr++ << 16;
values[6] |= *ptr++ << 8;
values[6] |= *ptr++;
values[7] = static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_33(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 25;
values[0] |= *ptr++ << 17;
values[0] |= *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 27;
values[2] |= *ptr++ << 19;
values[2] |= *ptr++ << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 29;
values[4] |= *ptr++ << 21;
values[4] |= *ptr++ << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = static_cast<uint64_t>(*ptr++ & 7) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 31;
values[6] |= *ptr++ << 23;
values[6] |= *ptr++ << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = static_cast<uint64_t>(*ptr++ & 1) << 32;
values[7] |= *ptr++ << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_34(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 26;
values[0] |= *ptr++ << 18;
values[0] |= *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 30;
values[2] |= *ptr++ << 22;
values[2] |= *ptr++ << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = static_cast<uint64_t>(*ptr++ & 3) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 26;
values[4] |= *ptr++ << 18;
values[4] |= *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 30;
values[6] |= *ptr++ << 22;
values[6] |= *ptr++ << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = static_cast<uint64_t>(*ptr++ & 3) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr++;
}
static inline void unpack_bits_35(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 27;
values[0] |= *ptr++ << 19;
values[0] |= *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 2) << 33;
values[2] |= static_cast<uint64_t>(*ptr++) << 25;
values[2] |= *ptr++ << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 31;
values[4] |= *ptr++ << 23;
values[4] |= *ptr++ << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = static_cast<uint64_t>(*ptr++ & 1) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 29;
values[6] |= *ptr++ << 21;
values[6] |= *ptr++ << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = static_cast<uint64_t>(*ptr++ & 7) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_36(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 28;
values[0] |= *ptr++ << 20;
values[0] |= *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 28;
values[2] |= *ptr++ << 20;
values[2] |= *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 28;
values[4] |= *ptr++ << 20;
values[4] |= *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 28;
values[6] |= *ptr++ << 20;
values[6] |= *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_37(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 29;
values[0] |= *ptr++ << 21;
values[0] |= *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = static_cast<uint64_t>(*ptr++ & 7) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 31;
values[2] |= static_cast<uint64_t>(*ptr++) << 23;
values[2] |= *ptr++ << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = static_cast<uint64_t>(*ptr++ & 1) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 33;
values[4] |= static_cast<uint64_t>(*ptr++) << 25;
values[4] |= *ptr++ << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 30;
values[5] |= static_cast<uint64_t>(*ptr++) << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 35;
values[6] |= static_cast<uint64_t>(*ptr++) << 27;
values[6] |= *ptr++ << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_38(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 30;
values[0] |= *ptr++ << 22;
values[0] |= *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = static_cast<uint64_t>(*ptr++ & 3) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 34;
values[2] |= static_cast<uint64_t>(*ptr++) << 26;
values[2] |= *ptr++ << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 30;
values[4] |= *ptr++ << 22;
values[4] |= *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = static_cast<uint64_t>(*ptr++ & 3) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 34;
values[6] |= static_cast<uint64_t>(*ptr++) << 26;
values[6] |= *ptr++ << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_39(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 31;
values[0] |= *ptr++ << 23;
values[0] |= *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = static_cast<uint64_t>(*ptr++ & 1) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 37;
values[2] |= static_cast<uint64_t>(*ptr++) << 29;
values[2] |= *ptr++ << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = static_cast<uint64_t>(*ptr++ & 7) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 35;
values[4] |= static_cast<uint64_t>(*ptr++) << 27;
values[4] |= *ptr++ << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 33;
values[6] |= static_cast<uint64_t>(*ptr++) << 25;
values[6] |= *ptr++ << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_40(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 32;
values[0] |= static_cast<uint64_t>(*ptr++) << 24;
values[0] |= *ptr++ << 16;
values[0] |= *ptr++ << 8;
values[0] |= *ptr++;
values[1] = static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 32;
values[2] |= static_cast<uint64_t>(*ptr++) << 24;
values[2] |= *ptr++ << 16;
values[2] |= *ptr++ << 8;
values[2] |= *ptr++;
values[3] = static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 32;
values[4] |= static_cast<uint64_t>(*ptr++) << 24;
values[4] |= *ptr++ << 16;
values[4] |= *ptr++ << 8;
values[4] |= *ptr++;
values[5] = static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 32;
values[6] |= static_cast<uint64_t>(*ptr++) << 24;
values[6] |= *ptr++ << 16;
values[6] |= *ptr++ << 8;
values[6] |= *ptr++;
values[7] = static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_41(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 33;
values[0] |= static_cast<uint64_t>(*ptr++) << 25;
values[0] |= *ptr++ << 17;
values[0] |= *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 35;
values[2] |= static_cast<uint64_t>(*ptr++) << 27;
values[2] |= *ptr++ << 19;
values[2] |= *ptr++ << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 37;
values[4] |= static_cast<uint64_t>(*ptr++) << 29;
values[4] |= *ptr++ << 21;
values[4] |= *ptr++ << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = static_cast<uint64_t>(*ptr++ & 7) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 39;
values[6] |= static_cast<uint64_t>(*ptr++) << 31;
values[6] |= *ptr++ << 23;
values[6] |= *ptr++ << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = static_cast<uint64_t>(*ptr++ & 1) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_42(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 34;
values[0] |= static_cast<uint64_t>(*ptr++) << 26;
values[0] |= *ptr++ << 18;
values[0] |= *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 38;
values[2] |= static_cast<uint64_t>(*ptr++) << 30;
values[2] |= *ptr++ << 22;
values[2] |= *ptr++ << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = static_cast<uint64_t>(*ptr++ & 3) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 34;
values[4] |= static_cast<uint64_t>(*ptr++) << 26;
values[4] |= *ptr++ << 18;
values[4] |= *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 38;
values[6] |= static_cast<uint64_t>(*ptr++) << 30;
values[6] |= *ptr++ << 22;
values[6] |= *ptr++ << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = static_cast<uint64_t>(*ptr++ & 3) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_43(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 35;
values[0] |= static_cast<uint64_t>(*ptr++) << 27;
values[0] |= *ptr++ << 19;
values[0] |= *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 41;
values[2] |= static_cast<uint64_t>(*ptr++) << 33;
values[2] |= static_cast<uint64_t>(*ptr++) << 25;
values[2] |= *ptr++ << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 39;
values[4] |= static_cast<uint64_t>(*ptr++) << 31;
values[4] |= *ptr++ << 23;
values[4] |= *ptr++ << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = static_cast<uint64_t>(*ptr++ & 1) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 37;
values[6] |= static_cast<uint64_t>(*ptr++) << 29;
values[6] |= *ptr++ << 21;
values[6] |= *ptr++ << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = static_cast<uint64_t>(*ptr++ & 7) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_44(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 36;
values[0] |= static_cast<uint64_t>(*ptr++) << 28;
values[0] |= *ptr++ << 20;
values[0] |= *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
values[1] |= static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 36;
values[2] |= static_cast<uint64_t>(*ptr++) << 28;
values[2] |= *ptr++ << 20;
values[2] |= *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 36;
values[4] |= static_cast<uint64_t>(*ptr++) << 28;
values[4] |= *ptr++ << 20;
values[4] |= *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
values[5] |= static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 36;
values[6] |= static_cast<uint64_t>(*ptr++) << 28;
values[6] |= *ptr++ << 20;
values[6] |= *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_45(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 37;
values[0] |= static_cast<uint64_t>(*ptr++) << 29;
values[0] |= *ptr++ << 21;
values[0] |= *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = static_cast<uint64_t>(*ptr++ & 7) << 42;
values[1] |= static_cast<uint64_t>(*ptr++) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 39;
values[2] |= static_cast<uint64_t>(*ptr++) << 31;
values[2] |= static_cast<uint64_t>(*ptr++) << 23;
values[2] |= *ptr++ << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = static_cast<uint64_t>(*ptr++ & 1) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 41;
values[4] |= static_cast<uint64_t>(*ptr++) << 33;
values[4] |= static_cast<uint64_t>(*ptr++) << 25;
values[4] |= *ptr++ << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= static_cast<uint64_t>(*ptr++) << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 43;
values[6] |= static_cast<uint64_t>(*ptr++) << 35;
values[6] |= static_cast<uint64_t>(*ptr++) << 27;
values[6] |= *ptr++ << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_46(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 38;
values[0] |= static_cast<uint64_t>(*ptr++) << 30;
values[0] |= *ptr++ << 22;
values[0] |= *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = static_cast<uint64_t>(*ptr++ & 3) << 44;
values[1] |= static_cast<uint64_t>(*ptr++) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 42;
values[2] |= static_cast<uint64_t>(*ptr++) << 34;
values[2] |= static_cast<uint64_t>(*ptr++) << 26;
values[2] |= *ptr++ << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 38;
values[4] |= static_cast<uint64_t>(*ptr++) << 30;
values[4] |= *ptr++ << 22;
values[4] |= *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = static_cast<uint64_t>(*ptr++ & 3) << 44;
values[5] |= static_cast<uint64_t>(*ptr++) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 42;
values[6] |= static_cast<uint64_t>(*ptr++) << 34;
values[6] |= static_cast<uint64_t>(*ptr++) << 26;
values[6] |= *ptr++ << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_47(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 39;
values[0] |= static_cast<uint64_t>(*ptr++) << 31;
values[0] |= *ptr++ << 23;
values[0] |= *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = static_cast<uint64_t>(*ptr++ & 1) << 46;
values[1] |= static_cast<uint64_t>(*ptr++) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 45;
values[2] |= static_cast<uint64_t>(*ptr++) << 37;
values[2] |= static_cast<uint64_t>(*ptr++) << 29;
values[2] |= *ptr++ << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = static_cast<uint64_t>(*ptr++ & 7) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 43;
values[4] |= static_cast<uint64_t>(*ptr++) << 35;
values[4] |= static_cast<uint64_t>(*ptr++) << 27;
values[4] |= *ptr++ << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 41;
values[6] |= static_cast<uint64_t>(*ptr++) << 33;
values[6] |= static_cast<uint64_t>(*ptr++) << 25;
values[6] |= *ptr++ << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_48(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 40;
values[0] |= static_cast<uint64_t>(*ptr++) << 32;
values[0] |= static_cast<uint64_t>(*ptr++) << 24;
values[0] |= *ptr++ << 16;
values[0] |= *ptr++ << 8;
values[0] |= *ptr++;
values[1] = static_cast<uint64_t>(*ptr++) << 40;
values[1] |= static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 40;
values[2] |= static_cast<uint64_t>(*ptr++) << 32;
values[2] |= static_cast<uint64_t>(*ptr++) << 24;
values[2] |= *ptr++ << 16;
values[2] |= *ptr++ << 8;
values[2] |= *ptr++;
values[3] = static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 40;
values[4] |= static_cast<uint64_t>(*ptr++) << 32;
values[4] |= static_cast<uint64_t>(*ptr++) << 24;
values[4] |= *ptr++ << 16;
values[4] |= *ptr++ << 8;
values[4] |= *ptr++;
values[5] = static_cast<uint64_t>(*ptr++) << 40;
values[5] |= static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 40;
values[6] |= static_cast<uint64_t>(*ptr++) << 32;
values[6] |= static_cast<uint64_t>(*ptr++) << 24;
values[6] |= *ptr++ << 16;
values[6] |= *ptr++ << 8;
values[6] |= *ptr++;
values[7] = static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_49(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 41;
values[0] |= static_cast<uint64_t>(*ptr++) << 33;
values[0] |= static_cast<uint64_t>(*ptr++) << 25;
values[0] |= *ptr++ << 17;
values[0] |= *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 42;
values[1] |= static_cast<uint64_t>(*ptr++) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 43;
values[2] |= static_cast<uint64_t>(*ptr++) << 35;
values[2] |= static_cast<uint64_t>(*ptr++) << 27;
values[2] |= *ptr++ << 19;
values[2] |= *ptr++ << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 45;
values[4] |= static_cast<uint64_t>(*ptr++) << 37;
values[4] |= static_cast<uint64_t>(*ptr++) << 29;
values[4] |= *ptr++ << 21;
values[4] |= *ptr++ << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = static_cast<uint64_t>(*ptr++ & 7) << 46;
values[5] |= static_cast<uint64_t>(*ptr++) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 47;
values[6] |= static_cast<uint64_t>(*ptr++) << 39;
values[6] |= static_cast<uint64_t>(*ptr++) << 31;
values[6] |= *ptr++ << 23;
values[6] |= *ptr++ << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = static_cast<uint64_t>(*ptr++ & 1) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_50(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 42;
values[0] |= static_cast<uint64_t>(*ptr++) << 34;
values[0] |= static_cast<uint64_t>(*ptr++) << 26;
values[0] |= *ptr++ << 18;
values[0] |= *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 44;
values[1] |= static_cast<uint64_t>(*ptr++) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 46;
values[2] |= static_cast<uint64_t>(*ptr++) << 38;
values[2] |= static_cast<uint64_t>(*ptr++) << 30;
values[2] |= *ptr++ << 22;
values[2] |= *ptr++ << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = static_cast<uint64_t>(*ptr++ & 3) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 42;
values[4] |= static_cast<uint64_t>(*ptr++) << 34;
values[4] |= static_cast<uint64_t>(*ptr++) << 26;
values[4] |= *ptr++ << 18;
values[4] |= *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 44;
values[5] |= static_cast<uint64_t>(*ptr++) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 46;
values[6] |= static_cast<uint64_t>(*ptr++) << 38;
values[6] |= static_cast<uint64_t>(*ptr++) << 30;
values[6] |= *ptr++ << 22;
values[6] |= *ptr++ << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = static_cast<uint64_t>(*ptr++ & 3) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_51(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 43;
values[0] |= static_cast<uint64_t>(*ptr++) << 35;
values[0] |= static_cast<uint64_t>(*ptr++) << 27;
values[0] |= *ptr++ << 19;
values[0] |= *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 46;
values[1] |= static_cast<uint64_t>(*ptr++) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 49;
values[2] |= static_cast<uint64_t>(*ptr++) << 41;
values[2] |= static_cast<uint64_t>(*ptr++) << 33;
values[2] |= static_cast<uint64_t>(*ptr++) << 25;
values[2] |= *ptr++ << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 47;
values[4] |= static_cast<uint64_t>(*ptr++) << 39;
values[4] |= static_cast<uint64_t>(*ptr++) << 31;
values[4] |= *ptr++ << 23;
values[4] |= *ptr++ << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = static_cast<uint64_t>(*ptr++ & 1) << 50;
values[5] |= static_cast<uint64_t>(*ptr++) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 45;
values[6] |= static_cast<uint64_t>(*ptr++) << 37;
values[6] |= static_cast<uint64_t>(*ptr++) << 29;
values[6] |= *ptr++ << 21;
values[6] |= *ptr++ << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = static_cast<uint64_t>(*ptr++ & 7) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_52(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 44;
values[0] |= static_cast<uint64_t>(*ptr++) << 36;
values[0] |= static_cast<uint64_t>(*ptr++) << 28;
values[0] |= *ptr++ << 20;
values[0] |= *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
values[1] |= static_cast<uint64_t>(*ptr++) << 40;
values[1] |= static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 44;
values[2] |= static_cast<uint64_t>(*ptr++) << 36;
values[2] |= static_cast<uint64_t>(*ptr++) << 28;
values[2] |= *ptr++ << 20;
values[2] |= *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 44;
values[4] |= static_cast<uint64_t>(*ptr++) << 36;
values[4] |= static_cast<uint64_t>(*ptr++) << 28;
values[4] |= *ptr++ << 20;
values[4] |= *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
values[5] |= static_cast<uint64_t>(*ptr++) << 40;
values[5] |= static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 44;
values[6] |= static_cast<uint64_t>(*ptr++) << 36;
values[6] |= static_cast<uint64_t>(*ptr++) << 28;
values[6] |= *ptr++ << 20;
values[6] |= *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_53(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 45;
values[0] |= static_cast<uint64_t>(*ptr++) << 37;
values[0] |= static_cast<uint64_t>(*ptr++) << 29;
values[0] |= *ptr++ << 21;
values[0] |= *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = static_cast<uint64_t>(*ptr++ & 7) << 50;
values[1] |= static_cast<uint64_t>(*ptr++) << 42;
values[1] |= static_cast<uint64_t>(*ptr++) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 47;
values[2] |= static_cast<uint64_t>(*ptr++) << 39;
values[2] |= static_cast<uint64_t>(*ptr++) << 31;
values[2] |= static_cast<uint64_t>(*ptr++) << 23;
values[2] |= *ptr++ << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = static_cast<uint64_t>(*ptr++ & 1) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 49;
values[4] |= static_cast<uint64_t>(*ptr++) << 41;
values[4] |= static_cast<uint64_t>(*ptr++) << 33;
values[4] |= static_cast<uint64_t>(*ptr++) << 25;
values[4] |= *ptr++ << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 46;
values[5] |= static_cast<uint64_t>(*ptr++) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 51;
values[6] |= static_cast<uint64_t>(*ptr++) << 43;
values[6] |= static_cast<uint64_t>(*ptr++) << 35;
values[6] |= static_cast<uint64_t>(*ptr++) << 27;
values[6] |= *ptr++ << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_54(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 46;
values[0] |= static_cast<uint64_t>(*ptr++) << 38;
values[0] |= static_cast<uint64_t>(*ptr++) << 30;
values[0] |= *ptr++ << 22;
values[0] |= *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = static_cast<uint64_t>(*ptr++ & 3) << 52;
values[1] |= static_cast<uint64_t>(*ptr++) << 44;
values[1] |= static_cast<uint64_t>(*ptr++) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 50;
values[2] |= static_cast<uint64_t>(*ptr++) << 42;
values[2] |= static_cast<uint64_t>(*ptr++) << 34;
values[2] |= static_cast<uint64_t>(*ptr++) << 26;
values[2] |= *ptr++ << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 46;
values[4] |= static_cast<uint64_t>(*ptr++) << 38;
values[4] |= static_cast<uint64_t>(*ptr++) << 30;
values[4] |= *ptr++ << 22;
values[4] |= *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = static_cast<uint64_t>(*ptr++ & 3) << 52;
values[5] |= static_cast<uint64_t>(*ptr++) << 44;
values[5] |= static_cast<uint64_t>(*ptr++) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 50;
values[6] |= static_cast<uint64_t>(*ptr++) << 42;
values[6] |= static_cast<uint64_t>(*ptr++) << 34;
values[6] |= static_cast<uint64_t>(*ptr++) << 26;
values[6] |= *ptr++ << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr++;
}
static inline void unpack_bits_55(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 47;
values[0] |= static_cast<uint64_t>(*ptr++) << 39;
values[0] |= static_cast<uint64_t>(*ptr++) << 31;
values[0] |= *ptr++ << 23;
values[0] |= *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = static_cast<uint64_t>(*ptr++ & 1) << 54;
values[1] |= static_cast<uint64_t>(*ptr++) << 46;
values[1] |= static_cast<uint64_t>(*ptr++) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 53;
values[2] |= static_cast<uint64_t>(*ptr++) << 45;
values[2] |= static_cast<uint64_t>(*ptr++) << 37;
values[2] |= static_cast<uint64_t>(*ptr++) << 29;
values[2] |= *ptr++ << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = static_cast<uint64_t>(*ptr++ & 7) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 51;
values[4] |= static_cast<uint64_t>(*ptr++) << 43;
values[4] |= static_cast<uint64_t>(*ptr++) << 35;
values[4] |= static_cast<uint64_t>(*ptr++) << 27;
values[4] |= *ptr++ << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 50;
values[5] |= static_cast<uint64_t>(*ptr++) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 49;
values[6] |= static_cast<uint64_t>(*ptr++) << 41;
values[6] |= static_cast<uint64_t>(*ptr++) << 33;
values[6] |= static_cast<uint64_t>(*ptr++) << 25;
values[6] |= *ptr++ << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_56(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 48;
values[0] |= static_cast<uint64_t>(*ptr++) << 40;
values[0] |= static_cast<uint64_t>(*ptr++) << 32;
values[0] |= static_cast<uint64_t>(*ptr++) << 24;
values[0] |= *ptr++ << 16;
values[0] |= *ptr++ << 8;
values[0] |= *ptr++;
values[1] = static_cast<uint64_t>(*ptr++) << 48;
values[1] |= static_cast<uint64_t>(*ptr++) << 40;
values[1] |= static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 48;
values[2] |= static_cast<uint64_t>(*ptr++) << 40;
values[2] |= static_cast<uint64_t>(*ptr++) << 32;
values[2] |= static_cast<uint64_t>(*ptr++) << 24;
values[2] |= *ptr++ << 16;
values[2] |= *ptr++ << 8;
values[2] |= *ptr++;
values[3] = static_cast<uint64_t>(*ptr++) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 48;
values[4] |= static_cast<uint64_t>(*ptr++) << 40;
values[4] |= static_cast<uint64_t>(*ptr++) << 32;
values[4] |= static_cast<uint64_t>(*ptr++) << 24;
values[4] |= *ptr++ << 16;
values[4] |= *ptr++ << 8;
values[4] |= *ptr++;
values[5] = static_cast<uint64_t>(*ptr++) << 48;
values[5] |= static_cast<uint64_t>(*ptr++) << 40;
values[5] |= static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 48;
values[6] |= static_cast<uint64_t>(*ptr++) << 40;
values[6] |= static_cast<uint64_t>(*ptr++) << 32;
values[6] |= static_cast<uint64_t>(*ptr++) << 24;
values[6] |= *ptr++ << 16;
values[6] |= *ptr++ << 8;
values[6] |= *ptr++;
values[7] = static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_57(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 49;
values[0] |= static_cast<uint64_t>(*ptr++) << 41;
values[0] |= static_cast<uint64_t>(*ptr++) << 33;
values[0] |= static_cast<uint64_t>(*ptr++) << 25;
values[0] |= *ptr++ << 17;
values[0] |= *ptr++ << 9;
values[0] |= *ptr++ << 1;
values[0] |= *ptr >> 7;
values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 50;
values[1] |= static_cast<uint64_t>(*ptr++) << 42;
values[1] |= static_cast<uint64_t>(*ptr++) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 51;
values[2] |= static_cast<uint64_t>(*ptr++) << 43;
values[2] |= static_cast<uint64_t>(*ptr++) << 35;
values[2] |= static_cast<uint64_t>(*ptr++) << 27;
values[2] |= *ptr++ << 19;
values[2] |= *ptr++ << 11;
values[2] |= *ptr++ << 3;
values[2] |= *ptr >> 5;
values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 53;
values[4] |= static_cast<uint64_t>(*ptr++) << 45;
values[4] |= static_cast<uint64_t>(*ptr++) << 37;
values[4] |= static_cast<uint64_t>(*ptr++) << 29;
values[4] |= *ptr++ << 21;
values[4] |= *ptr++ << 13;
values[4] |= *ptr++ << 5;
values[4] |= *ptr >> 3;
values[5] = static_cast<uint64_t>(*ptr++ & 7) << 54;
values[5] |= static_cast<uint64_t>(*ptr++) << 46;
values[5] |= static_cast<uint64_t>(*ptr++) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 55;
values[6] |= static_cast<uint64_t>(*ptr++) << 47;
values[6] |= static_cast<uint64_t>(*ptr++) << 39;
values[6] |= static_cast<uint64_t>(*ptr++) << 31;
values[6] |= *ptr++ << 23;
values[6] |= *ptr++ << 15;
values[6] |= *ptr++ << 7;
values[6] |= *ptr >> 1;
values[7] = static_cast<uint64_t>(*ptr++ & 1) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_58(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 50;
values[0] |= static_cast<uint64_t>(*ptr++) << 42;
values[0] |= static_cast<uint64_t>(*ptr++) << 34;
values[0] |= static_cast<uint64_t>(*ptr++) << 26;
values[0] |= *ptr++ << 18;
values[0] |= *ptr++ << 10;
values[0] |= *ptr++ << 2;
values[0] |= *ptr >> 6;
values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 52;
values[1] |= static_cast<uint64_t>(*ptr++) << 44;
values[1] |= static_cast<uint64_t>(*ptr++) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 54;
values[2] |= static_cast<uint64_t>(*ptr++) << 46;
values[2] |= static_cast<uint64_t>(*ptr++) << 38;
values[2] |= static_cast<uint64_t>(*ptr++) << 30;
values[2] |= *ptr++ << 22;
values[2] |= *ptr++ << 14;
values[2] |= *ptr++ << 6;
values[2] |= *ptr >> 2;
values[3] = static_cast<uint64_t>(*ptr++ & 3) << 56;
values[3] |= static_cast<uint64_t>(*ptr++) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 50;
values[4] |= static_cast<uint64_t>(*ptr++) << 42;
values[4] |= static_cast<uint64_t>(*ptr++) << 34;
values[4] |= static_cast<uint64_t>(*ptr++) << 26;
values[4] |= *ptr++ << 18;
values[4] |= *ptr++ << 10;
values[4] |= *ptr++ << 2;
values[4] |= *ptr >> 6;
values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 52;
values[5] |= static_cast<uint64_t>(*ptr++) << 44;
values[5] |= static_cast<uint64_t>(*ptr++) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 54;
values[6] |= static_cast<uint64_t>(*ptr++) << 46;
values[6] |= static_cast<uint64_t>(*ptr++) << 38;
values[6] |= static_cast<uint64_t>(*ptr++) << 30;
values[6] |= *ptr++ << 22;
values[6] |= *ptr++ << 14;
values[6] |= *ptr++ << 6;
values[6] |= *ptr >> 2;
values[7] = static_cast<uint64_t>(*ptr++ & 3) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr++;
}
static inline void unpack_bits_59(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 51;
values[0] |= static_cast<uint64_t>(*ptr++) << 43;
values[0] |= static_cast<uint64_t>(*ptr++) << 35;
values[0] |= static_cast<uint64_t>(*ptr++) << 27;
values[0] |= *ptr++ << 19;
values[0] |= *ptr++ << 11;
values[0] |= *ptr++ << 3;
values[0] |= *ptr >> 5;
values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 54;
values[1] |= static_cast<uint64_t>(*ptr++) << 46;
values[1] |= static_cast<uint64_t>(*ptr++) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 57;
values[2] |= static_cast<uint64_t>(*ptr++) << 49;
values[2] |= static_cast<uint64_t>(*ptr++) << 41;
values[2] |= static_cast<uint64_t>(*ptr++) << 33;
values[2] |= static_cast<uint64_t>(*ptr++) << 25;
values[2] |= *ptr++ << 17;
values[2] |= *ptr++ << 9;
values[2] |= *ptr++ << 1;
values[2] |= *ptr >> 7;
values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 55;
values[4] |= static_cast<uint64_t>(*ptr++) << 47;
values[4] |= static_cast<uint64_t>(*ptr++) << 39;
values[4] |= static_cast<uint64_t>(*ptr++) << 31;
values[4] |= *ptr++ << 23;
values[4] |= *ptr++ << 15;
values[4] |= *ptr++ << 7;
values[4] |= *ptr >> 1;
values[5] = static_cast<uint64_t>(*ptr++ & 1) << 58;
values[5] |= static_cast<uint64_t>(*ptr++) << 50;
values[5] |= static_cast<uint64_t>(*ptr++) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 53;
values[6] |= static_cast<uint64_t>(*ptr++) << 45;
values[6] |= static_cast<uint64_t>(*ptr++) << 37;
values[6] |= static_cast<uint64_t>(*ptr++) << 29;
values[6] |= *ptr++ << 21;
values[6] |= *ptr++ << 13;
values[6] |= *ptr++ << 5;
values[6] |= *ptr >> 3;
values[7] = static_cast<uint64_t>(*ptr++ & 7) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_60(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 52;
values[0] |= static_cast<uint64_t>(*ptr++) << 44;
values[0] |= static_cast<uint64_t>(*ptr++) << 36;
values[0] |= static_cast<uint64_t>(*ptr++) << 28;
values[0] |= *ptr++ << 20;
values[0] |= *ptr++ << 12;
values[0] |= *ptr++ << 4;
values[0] |= *ptr >> 4;
values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
values[1] |= static_cast<uint64_t>(*ptr++) << 48;
values[1] |= static_cast<uint64_t>(*ptr++) << 40;
values[1] |= static_cast<uint64_t>(*ptr++) << 32;
values[1] |= static_cast<uint64_t>(*ptr++) << 24;
values[1] |= *ptr++ << 16;
values[1] |= *ptr++ << 8;
values[1] |= *ptr++;
values[2] = static_cast<uint64_t>(*ptr++) << 52;
values[2] |= static_cast<uint64_t>(*ptr++) << 44;
values[2] |= static_cast<uint64_t>(*ptr++) << 36;
values[2] |= static_cast<uint64_t>(*ptr++) << 28;
values[2] |= *ptr++ << 20;
values[2] |= *ptr++ << 12;
values[2] |= *ptr++ << 4;
values[2] |= *ptr >> 4;
values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
values[3] |= static_cast<uint64_t>(*ptr++) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 52;
values[4] |= static_cast<uint64_t>(*ptr++) << 44;
values[4] |= static_cast<uint64_t>(*ptr++) << 36;
values[4] |= static_cast<uint64_t>(*ptr++) << 28;
values[4] |= *ptr++ << 20;
values[4] |= *ptr++ << 12;
values[4] |= *ptr++ << 4;
values[4] |= *ptr >> 4;
values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
values[5] |= static_cast<uint64_t>(*ptr++) << 48;
values[5] |= static_cast<uint64_t>(*ptr++) << 40;
values[5] |= static_cast<uint64_t>(*ptr++) << 32;
values[5] |= static_cast<uint64_t>(*ptr++) << 24;
values[5] |= *ptr++ << 16;
values[5] |= *ptr++ << 8;
values[5] |= *ptr++;
values[6] = static_cast<uint64_t>(*ptr++) << 52;
values[6] |= static_cast<uint64_t>(*ptr++) << 44;
values[6] |= static_cast<uint64_t>(*ptr++) << 36;
values[6] |= static_cast<uint64_t>(*ptr++) << 28;
values[6] |= *ptr++ << 20;
values[6] |= *ptr++ << 12;
values[6] |= *ptr++ << 4;
values[6] |= *ptr >> 4;
values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_61(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 53;
values[0] |= static_cast<uint64_t>(*ptr++) << 45;
values[0] |= static_cast<uint64_t>(*ptr++) << 37;
values[0] |= static_cast<uint64_t>(*ptr++) << 29;
values[0] |= *ptr++ << 21;
values[0] |= *ptr++ << 13;
values[0] |= *ptr++ << 5;
values[0] |= *ptr >> 3;
values[1] = static_cast<uint64_t>(*ptr++ & 7) << 58;
values[1] |= static_cast<uint64_t>(*ptr++) << 50;
values[1] |= static_cast<uint64_t>(*ptr++) << 42;
values[1] |= static_cast<uint64_t>(*ptr++) << 34;
values[1] |= static_cast<uint64_t>(*ptr++) << 26;
values[1] |= *ptr++ << 18;
values[1] |= *ptr++ << 10;
values[1] |= *ptr++ << 2;
values[1] |= *ptr >> 6;
values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 55;
values[2] |= static_cast<uint64_t>(*ptr++) << 47;
values[2] |= static_cast<uint64_t>(*ptr++) << 39;
values[2] |= static_cast<uint64_t>(*ptr++) << 31;
values[2] |= *ptr++ << 23;
values[2] |= *ptr++ << 15;
values[2] |= *ptr++ << 7;
values[2] |= *ptr >> 1;
values[3] = static_cast<uint64_t>(*ptr++ & 1) << 60;
values[3] |= static_cast<uint64_t>(*ptr++) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 57;
values[4] |= static_cast<uint64_t>(*ptr++) << 49;
values[4] |= static_cast<uint64_t>(*ptr++) << 41;
values[4] |= static_cast<uint64_t>(*ptr++) << 33;
values[4] |= static_cast<uint64_t>(*ptr++) << 25;
values[4] |= *ptr++ << 17;
values[4] |= *ptr++ << 9;
values[4] |= *ptr++ << 1;
values[4] |= *ptr >> 7;
values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 54;
values[5] |= static_cast<uint64_t>(*ptr++) << 46;
values[5] |= static_cast<uint64_t>(*ptr++) << 38;
values[5] |= static_cast<uint64_t>(*ptr++) << 30;
values[5] |= *ptr++ << 22;
values[5] |= *ptr++ << 14;
values[5] |= *ptr++ << 6;
values[5] |= *ptr >> 2;
values[6] = static_cast<uint64_t>(*ptr++ & 3) << 59;
values[6] |= static_cast<uint64_t>(*ptr++) << 51;
values[6] |= static_cast<uint64_t>(*ptr++) << 43;
values[6] |= static_cast<uint64_t>(*ptr++) << 35;
values[6] |= static_cast<uint64_t>(*ptr++) << 27;
values[6] |= *ptr++ << 19;
values[6] |= *ptr++ << 11;
values[6] |= *ptr++ << 3;
values[6] |= *ptr >> 5;
values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_62(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 54;
values[0] |= static_cast<uint64_t>(*ptr++) << 46;
values[0] |= static_cast<uint64_t>(*ptr++) << 38;
values[0] |= static_cast<uint64_t>(*ptr++) << 30;
values[0] |= *ptr++ << 22;
values[0] |= *ptr++ << 14;
values[0] |= *ptr++ << 6;
values[0] |= *ptr >> 2;
values[1] = static_cast<uint64_t>(*ptr++ & 3) << 60;
values[1] |= static_cast<uint64_t>(*ptr++) << 52;
values[1] |= static_cast<uint64_t>(*ptr++) << 44;
values[1] |= static_cast<uint64_t>(*ptr++) << 36;
values[1] |= static_cast<uint64_t>(*ptr++) << 28;
values[1] |= *ptr++ << 20;
values[1] |= *ptr++ << 12;
values[1] |= *ptr++ << 4;
values[1] |= *ptr >> 4;
values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 58;
values[2] |= static_cast<uint64_t>(*ptr++) << 50;
values[2] |= static_cast<uint64_t>(*ptr++) << 42;
values[2] |= static_cast<uint64_t>(*ptr++) << 34;
values[2] |= static_cast<uint64_t>(*ptr++) << 26;
values[2] |= *ptr++ << 18;
values[2] |= *ptr++ << 10;
values[2] |= *ptr++ << 2;
values[2] |= *ptr >> 6;
values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 56;
values[3] |= static_cast<uint64_t>(*ptr++) << 48;
values[3] |= static_cast<uint64_t>(*ptr++) << 40;
values[3] |= static_cast<uint64_t>(*ptr++) << 32;
values[3] |= static_cast<uint64_t>(*ptr++) << 24;
values[3] |= *ptr++ << 16;
values[3] |= *ptr++ << 8;
values[3] |= *ptr++;
values[4] = static_cast<uint64_t>(*ptr++) << 54;
values[4] |= static_cast<uint64_t>(*ptr++) << 46;
values[4] |= static_cast<uint64_t>(*ptr++) << 38;
values[4] |= static_cast<uint64_t>(*ptr++) << 30;
values[4] |= *ptr++ << 22;
values[4] |= *ptr++ << 14;
values[4] |= *ptr++ << 6;
values[4] |= *ptr >> 2;
values[5] = static_cast<uint64_t>(*ptr++ & 3) << 60;
values[5] |= static_cast<uint64_t>(*ptr++) << 52;
values[5] |= static_cast<uint64_t>(*ptr++) << 44;
values[5] |= static_cast<uint64_t>(*ptr++) << 36;
values[5] |= static_cast<uint64_t>(*ptr++) << 28;
values[5] |= *ptr++ << 20;
values[5] |= *ptr++ << 12;
values[5] |= *ptr++ << 4;
values[5] |= *ptr >> 4;
values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 58;
values[6] |= static_cast<uint64_t>(*ptr++) << 50;
values[6] |= static_cast<uint64_t>(*ptr++) << 42;
values[6] |= static_cast<uint64_t>(*ptr++) << 34;
values[6] |= static_cast<uint64_t>(*ptr++) << 26;
values[6] |= *ptr++ << 18;
values[6] |= *ptr++ << 10;
values[6] |= *ptr++ << 2;
values[6] |= *ptr >> 6;
values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void unpack_bits_63(uint64_t* values, const uint8_t* ptr) {
values[0] = static_cast<uint64_t>(*ptr++) << 55;
values[0] |= static_cast<uint64_t>(*ptr++) << 47;
values[0] |= static_cast<uint64_t>(*ptr++) << 39;
values[0] |= static_cast<uint64_t>(*ptr++) << 31;
values[0] |= *ptr++ << 23;
values[0] |= *ptr++ << 15;
values[0] |= *ptr++ << 7;
values[0] |= *ptr >> 1;
values[1] = static_cast<uint64_t>(*ptr++ & 1) << 62;
values[1] |= static_cast<uint64_t>(*ptr++) << 54;
values[1] |= static_cast<uint64_t>(*ptr++) << 46;
values[1] |= static_cast<uint64_t>(*ptr++) << 38;
values[1] |= static_cast<uint64_t>(*ptr++) << 30;
values[1] |= *ptr++ << 22;
values[1] |= *ptr++ << 14;
values[1] |= *ptr++ << 6;
values[1] |= *ptr >> 2;
values[2] = static_cast<uint64_t>(*ptr++ & 3) << 61;
values[2] |= static_cast<uint64_t>(*ptr++) << 53;
values[2] |= static_cast<uint64_t>(*ptr++) << 45;
values[2] |= static_cast<uint64_t>(*ptr++) << 37;
values[2] |= static_cast<uint64_t>(*ptr++) << 29;
values[2] |= *ptr++ << 21;
values[2] |= *ptr++ << 13;
values[2] |= *ptr++ << 5;
values[2] |= *ptr >> 3;
values[3] = static_cast<uint64_t>(*ptr++ & 7) << 60;
values[3] |= static_cast<uint64_t>(*ptr++) << 52;
values[3] |= static_cast<uint64_t>(*ptr++) << 44;
values[3] |= static_cast<uint64_t>(*ptr++) << 36;
values[3] |= static_cast<uint64_t>(*ptr++) << 28;
values[3] |= *ptr++ << 20;
values[3] |= *ptr++ << 12;
values[3] |= *ptr++ << 4;
values[3] |= *ptr >> 4;
values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 59;
values[4] |= static_cast<uint64_t>(*ptr++) << 51;
values[4] |= static_cast<uint64_t>(*ptr++) << 43;
values[4] |= static_cast<uint64_t>(*ptr++) << 35;
values[4] |= static_cast<uint64_t>(*ptr++) << 27;
values[4] |= *ptr++ << 19;
values[4] |= *ptr++ << 11;
values[4] |= *ptr++ << 3;
values[4] |= *ptr >> 5;
values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 58;
values[5] |= static_cast<uint64_t>(*ptr++) << 50;
values[5] |= static_cast<uint64_t>(*ptr++) << 42;
values[5] |= static_cast<uint64_t>(*ptr++) << 34;
values[5] |= static_cast<uint64_t>(*ptr++) << 26;
values[5] |= *ptr++ << 18;
values[5] |= *ptr++ << 10;
values[5] |= *ptr++ << 2;
values[5] |= *ptr >> 6;
values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 57;
values[6] |= static_cast<uint64_t>(*ptr++) << 49;
values[6] |= static_cast<uint64_t>(*ptr++) << 41;
values[6] |= static_cast<uint64_t>(*ptr++) << 33;
values[6] |= static_cast<uint64_t>(*ptr++) << 25;
values[6] |= *ptr++ << 17;
values[6] |= *ptr++ << 9;
values[6] |= *ptr++ << 1;
values[6] |= *ptr >> 7;
values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 56;
values[7] |= static_cast<uint64_t>(*ptr++) << 48;
values[7] |= static_cast<uint64_t>(*ptr++) << 40;
values[7] |= static_cast<uint64_t>(*ptr++) << 32;
values[7] |= static_cast<uint64_t>(*ptr++) << 24;
values[7] |= *ptr++ << 16;
values[7] |= *ptr++ << 8;
values[7] |= *ptr;
}
static inline void pack_bits_block8(const uint64_t* values, uint8_t* ptr, uint8_t bits) {
switch (bits) {
case 1: pack_bits_1(values, ptr); break;
case 2: pack_bits_2(values, ptr); break;
case 3: pack_bits_3(values, ptr); break;
case 4: pack_bits_4(values, ptr); break;
case 5: pack_bits_5(values, ptr); break;
case 6: pack_bits_6(values, ptr); break;
case 7: pack_bits_7(values, ptr); break;
case 8: pack_bits_8(values, ptr); break;
case 9: pack_bits_9(values, ptr); break;
case 10: pack_bits_10(values, ptr); break;
case 11: pack_bits_11(values, ptr); break;
case 12: pack_bits_12(values, ptr); break;
case 13: pack_bits_13(values, ptr); break;
case 14: pack_bits_14(values, ptr); break;
case 15: pack_bits_15(values, ptr); break;
case 16: pack_bits_16(values, ptr); break;
case 17: pack_bits_17(values, ptr); break;
case 18: pack_bits_18(values, ptr); break;
case 19: pack_bits_19(values, ptr); break;
case 20: pack_bits_20(values, ptr); break;
case 21: pack_bits_21(values, ptr); break;
case 22: pack_bits_22(values, ptr); break;
case 23: pack_bits_23(values, ptr); break;
case 24: pack_bits_24(values, ptr); break;
case 25: pack_bits_25(values, ptr); break;
case 26: pack_bits_26(values, ptr); break;
case 27: pack_bits_27(values, ptr); break;
case 28: pack_bits_28(values, ptr); break;
case 29: pack_bits_29(values, ptr); break;
case 30: pack_bits_30(values, ptr); break;
case 31: pack_bits_31(values, ptr); break;
case 32: pack_bits_32(values, ptr); break;
case 33: pack_bits_33(values, ptr); break;
case 34: pack_bits_34(values, ptr); break;
case 35: pack_bits_35(values, ptr); break;
case 36: pack_bits_36(values, ptr); break;
case 37: pack_bits_37(values, ptr); break;
case 38: pack_bits_38(values, ptr); break;
case 39: pack_bits_39(values, ptr); break;
case 40: pack_bits_40(values, ptr); break;
case 41: pack_bits_41(values, ptr); break;
case 42: pack_bits_42(values, ptr); break;
case 43: pack_bits_43(values, ptr); break;
case 44: pack_bits_44(values, ptr); break;
case 45: pack_bits_45(values, ptr); break;
case 46: pack_bits_46(values, ptr); break;
case 47: pack_bits_47(values, ptr); break;
case 48: pack_bits_48(values, ptr); break;
case 49: pack_bits_49(values, ptr); break;
case 50: pack_bits_50(values, ptr); break;
case 51: pack_bits_51(values, ptr); break;
case 52: pack_bits_52(values, ptr); break;
case 53: pack_bits_53(values, ptr); break;
case 54: pack_bits_54(values, ptr); break;
case 55: pack_bits_55(values, ptr); break;
case 56: pack_bits_56(values, ptr); break;
case 57: pack_bits_57(values, ptr); break;
case 58: pack_bits_58(values, ptr); break;
case 59: pack_bits_59(values, ptr); break;
case 60: pack_bits_60(values, ptr); break;
case 61: pack_bits_61(values, ptr); break;
case 62: pack_bits_62(values, ptr); break;
case 63: pack_bits_63(values, ptr); break;
default: throw std::logic_error("wrong number of bits " + std::to_string(bits));
}
}
static inline void unpack_bits_block8(uint64_t* values, const uint8_t* ptr, uint8_t bits) {
switch (bits) {
case 1: unpack_bits_1(values, ptr); break;
case 2: unpack_bits_2(values, ptr); break;
case 3: unpack_bits_3(values, ptr); break;
case 4: unpack_bits_4(values, ptr); break;
case 5: unpack_bits_5(values, ptr); break;
case 6: unpack_bits_6(values, ptr); break;
case 7: unpack_bits_7(values, ptr); break;
case 8: unpack_bits_8(values, ptr); break;
case 9: unpack_bits_9(values, ptr); break;
case 10: unpack_bits_10(values, ptr); break;
case 11: unpack_bits_11(values, ptr); break;
case 12: unpack_bits_12(values, ptr); break;
case 13: unpack_bits_13(values, ptr); break;
case 14: unpack_bits_14(values, ptr); break;
case 15: unpack_bits_15(values, ptr); break;
case 16: unpack_bits_16(values, ptr); break;
case 17: unpack_bits_17(values, ptr); break;
case 18: unpack_bits_18(values, ptr); break;
case 19: unpack_bits_19(values, ptr); break;
case 20: unpack_bits_20(values, ptr); break;
case 21: unpack_bits_21(values, ptr); break;
case 22: unpack_bits_22(values, ptr); break;
case 23: unpack_bits_23(values, ptr); break;
case 24: unpack_bits_24(values, ptr); break;
case 25: unpack_bits_25(values, ptr); break;
case 26: unpack_bits_26(values, ptr); break;
case 27: unpack_bits_27(values, ptr); break;
case 28: unpack_bits_28(values, ptr); break;
case 29: unpack_bits_29(values, ptr); break;
case 30: unpack_bits_30(values, ptr); break;
case 31: unpack_bits_31(values, ptr); break;
case 32: unpack_bits_32(values, ptr); break;
case 33: unpack_bits_33(values, ptr); break;
case 34: unpack_bits_34(values, ptr); break;
case 35: unpack_bits_35(values, ptr); break;
case 36: unpack_bits_36(values, ptr); break;
case 37: unpack_bits_37(values, ptr); break;
case 38: unpack_bits_38(values, ptr); break;
case 39: unpack_bits_39(values, ptr); break;
case 40: unpack_bits_40(values, ptr); break;
case 41: unpack_bits_41(values, ptr); break;
case 42: unpack_bits_42(values, ptr); break;
case 43: unpack_bits_43(values, ptr); break;
case 44: unpack_bits_44(values, ptr); break;
case 45: unpack_bits_45(values, ptr); break;
case 46: unpack_bits_46(values, ptr); break;
case 47: unpack_bits_47(values, ptr); break;
case 48: unpack_bits_48(values, ptr); break;
case 49: unpack_bits_49(values, ptr); break;
case 50: unpack_bits_50(values, ptr); break;
case 51: unpack_bits_51(values, ptr); break;
case 52: unpack_bits_52(values, ptr); break;
case 53: unpack_bits_53(values, ptr); break;
case 54: unpack_bits_54(values, ptr); break;
case 55: unpack_bits_55(values, ptr); break;
case 56: unpack_bits_56(values, ptr); break;
case 57: unpack_bits_57(values, ptr); break;
case 58: unpack_bits_58(values, ptr); break;
case 59: unpack_bits_59(values, ptr); break;
case 60: unpack_bits_60(values, ptr); break;
case 61: unpack_bits_61(values, ptr); break;
case 62: unpack_bits_62(values, ptr); break;
case 63: unpack_bits_63(values, ptr); break;
default: throw std::logic_error("wrong number of bits " + std::to_string(bits));
}
}
} // namespace
#endif // BIT_PACKING_HPP_