/usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util
Edit: /usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util/bpacking64_default.h (195934B)
// 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.
// This file was generated by script which is modified from its original version in
// GitHub. Original source:
// https://github.com/lemire/FrameOfReference/blob/146948b6058a976bc7767262ad3a2ce201486b93/scripts/turbopacking64.py
// The original copyright notice follows.
// This code is released under the
// Apache License Version 2.0 http://www.apache.org/licenses/.
// (c) Daniel Lemire 2013
#pragma once
#include "arrow/util/bit_util.h"
#include "arrow/util/ubsan.h"
namespace arrow {
namespace internal {
inline const uint8_t* unpack0_64(const uint8_t* in, uint64_t* out) {
for (int k = 0; k < 32; k += 1) {
out[k] = 0;
}
return in;
}
inline const uint8_t* unpack1_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 1ULL;
uint64_t w0 = util::SafeLoadAs
(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 1) & mask;
out[2] = (w0 >> 2) & mask;
out[3] = (w0 >> 3) & mask;
out[4] = (w0 >> 4) & mask;
out[5] = (w0 >> 5) & mask;
out[6] = (w0 >> 6) & mask;
out[7] = (w0 >> 7) & mask;
out[8] = (w0 >> 8) & mask;
out[9] = (w0 >> 9) & mask;
out[10] = (w0 >> 10) & mask;
out[11] = (w0 >> 11) & mask;
out[12] = (w0 >> 12) & mask;
out[13] = (w0 >> 13) & mask;
out[14] = (w0 >> 14) & mask;
out[15] = (w0 >> 15) & mask;
out[16] = (w0 >> 16) & mask;
out[17] = (w0 >> 17) & mask;
out[18] = (w0 >> 18) & mask;
out[19] = (w0 >> 19) & mask;
out[20] = (w0 >> 20) & mask;
out[21] = (w0 >> 21) & mask;
out[22] = (w0 >> 22) & mask;
out[23] = (w0 >> 23) & mask;
out[24] = (w0 >> 24) & mask;
out[25] = (w0 >> 25) & mask;
out[26] = (w0 >> 26) & mask;
out[27] = (w0 >> 27) & mask;
out[28] = (w0 >> 28) & mask;
out[29] = (w0 >> 29) & mask;
out[30] = (w0 >> 30) & mask;
out[31] = (w0 >> 31) & mask;
return in;
}
inline const uint8_t* unpack2_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 3ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 2) & mask;
out[2] = (w0 >> 4) & mask;
out[3] = (w0 >> 6) & mask;
out[4] = (w0 >> 8) & mask;
out[5] = (w0 >> 10) & mask;
out[6] = (w0 >> 12) & mask;
out[7] = (w0 >> 14) & mask;
out[8] = (w0 >> 16) & mask;
out[9] = (w0 >> 18) & mask;
out[10] = (w0 >> 20) & mask;
out[11] = (w0 >> 22) & mask;
out[12] = (w0 >> 24) & mask;
out[13] = (w0 >> 26) & mask;
out[14] = (w0 >> 28) & mask;
out[15] = (w0 >> 30) & mask;
out[16] = (w0 >> 32) & mask;
out[17] = (w0 >> 34) & mask;
out[18] = (w0 >> 36) & mask;
out[19] = (w0 >> 38) & mask;
out[20] = (w0 >> 40) & mask;
out[21] = (w0 >> 42) & mask;
out[22] = (w0 >> 44) & mask;
out[23] = (w0 >> 46) & mask;
out[24] = (w0 >> 48) & mask;
out[25] = (w0 >> 50) & mask;
out[26] = (w0 >> 52) & mask;
out[27] = (w0 >> 54) & mask;
out[28] = (w0 >> 56) & mask;
out[29] = (w0 >> 58) & mask;
out[30] = (w0 >> 60) & mask;
out[31] = w0 >> 62;
return in;
}
inline const uint8_t* unpack3_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 7ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 3) & mask;
out[2] = (w0 >> 6) & mask;
out[3] = (w0 >> 9) & mask;
out[4] = (w0 >> 12) & mask;
out[5] = (w0 >> 15) & mask;
out[6] = (w0 >> 18) & mask;
out[7] = (w0 >> 21) & mask;
out[8] = (w0 >> 24) & mask;
out[9] = (w0 >> 27) & mask;
out[10] = (w0 >> 30) & mask;
out[11] = (w0 >> 33) & mask;
out[12] = (w0 >> 36) & mask;
out[13] = (w0 >> 39) & mask;
out[14] = (w0 >> 42) & mask;
out[15] = (w0 >> 45) & mask;
out[16] = (w0 >> 48) & mask;
out[17] = (w0 >> 51) & mask;
out[18] = (w0 >> 54) & mask;
out[19] = (w0 >> 57) & mask;
out[20] = (w0 >> 60) & mask;
out[21] = ((w0 >> 63) | (w1 << 1)) & mask;
out[22] = (w1 >> 2) & mask;
out[23] = (w1 >> 5) & mask;
out[24] = (w1 >> 8) & mask;
out[25] = (w1 >> 11) & mask;
out[26] = (w1 >> 14) & mask;
out[27] = (w1 >> 17) & mask;
out[28] = (w1 >> 20) & mask;
out[29] = (w1 >> 23) & mask;
out[30] = (w1 >> 26) & mask;
out[31] = (w1 >> 29) & mask;
return in;
}
inline const uint8_t* unpack4_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 15ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 4) & mask;
out[2] = (w0 >> 8) & mask;
out[3] = (w0 >> 12) & mask;
out[4] = (w0 >> 16) & mask;
out[5] = (w0 >> 20) & mask;
out[6] = (w0 >> 24) & mask;
out[7] = (w0 >> 28) & mask;
out[8] = (w0 >> 32) & mask;
out[9] = (w0 >> 36) & mask;
out[10] = (w0 >> 40) & mask;
out[11] = (w0 >> 44) & mask;
out[12] = (w0 >> 48) & mask;
out[13] = (w0 >> 52) & mask;
out[14] = (w0 >> 56) & mask;
out[15] = w0 >> 60;
out[16] = (w1)&mask;
out[17] = (w1 >> 4) & mask;
out[18] = (w1 >> 8) & mask;
out[19] = (w1 >> 12) & mask;
out[20] = (w1 >> 16) & mask;
out[21] = (w1 >> 20) & mask;
out[22] = (w1 >> 24) & mask;
out[23] = (w1 >> 28) & mask;
out[24] = (w1 >> 32) & mask;
out[25] = (w1 >> 36) & mask;
out[26] = (w1 >> 40) & mask;
out[27] = (w1 >> 44) & mask;
out[28] = (w1 >> 48) & mask;
out[29] = (w1 >> 52) & mask;
out[30] = (w1 >> 56) & mask;
out[31] = w1 >> 60;
return in;
}
inline const uint8_t* unpack5_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 31ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 5) & mask;
out[2] = (w0 >> 10) & mask;
out[3] = (w0 >> 15) & mask;
out[4] = (w0 >> 20) & mask;
out[5] = (w0 >> 25) & mask;
out[6] = (w0 >> 30) & mask;
out[7] = (w0 >> 35) & mask;
out[8] = (w0 >> 40) & mask;
out[9] = (w0 >> 45) & mask;
out[10] = (w0 >> 50) & mask;
out[11] = (w0 >> 55) & mask;
out[12] = ((w0 >> 60) | (w1 << 4)) & mask;
out[13] = (w1 >> 1) & mask;
out[14] = (w1 >> 6) & mask;
out[15] = (w1 >> 11) & mask;
out[16] = (w1 >> 16) & mask;
out[17] = (w1 >> 21) & mask;
out[18] = (w1 >> 26) & mask;
out[19] = (w1 >> 31) & mask;
out[20] = (w1 >> 36) & mask;
out[21] = (w1 >> 41) & mask;
out[22] = (w1 >> 46) & mask;
out[23] = (w1 >> 51) & mask;
out[24] = (w1 >> 56) & mask;
out[25] = ((w1 >> 61) | (w2 << 3)) & mask;
out[26] = (w2 >> 2) & mask;
out[27] = (w2 >> 7) & mask;
out[28] = (w2 >> 12) & mask;
out[29] = (w2 >> 17) & mask;
out[30] = (w2 >> 22) & mask;
out[31] = (w2 >> 27) & mask;
return in;
}
inline const uint8_t* unpack6_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 63ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 6) & mask;
out[2] = (w0 >> 12) & mask;
out[3] = (w0 >> 18) & mask;
out[4] = (w0 >> 24) & mask;
out[5] = (w0 >> 30) & mask;
out[6] = (w0 >> 36) & mask;
out[7] = (w0 >> 42) & mask;
out[8] = (w0 >> 48) & mask;
out[9] = (w0 >> 54) & mask;
out[10] = ((w0 >> 60) | (w1 << 4)) & mask;
out[11] = (w1 >> 2) & mask;
out[12] = (w1 >> 8) & mask;
out[13] = (w1 >> 14) & mask;
out[14] = (w1 >> 20) & mask;
out[15] = (w1 >> 26) & mask;
out[16] = (w1 >> 32) & mask;
out[17] = (w1 >> 38) & mask;
out[18] = (w1 >> 44) & mask;
out[19] = (w1 >> 50) & mask;
out[20] = (w1 >> 56) & mask;
out[21] = ((w1 >> 62) | (w2 << 2)) & mask;
out[22] = (w2 >> 4) & mask;
out[23] = (w2 >> 10) & mask;
out[24] = (w2 >> 16) & mask;
out[25] = (w2 >> 22) & mask;
out[26] = (w2 >> 28) & mask;
out[27] = (w2 >> 34) & mask;
out[28] = (w2 >> 40) & mask;
out[29] = (w2 >> 46) & mask;
out[30] = (w2 >> 52) & mask;
out[31] = w2 >> 58;
return in;
}
inline const uint8_t* unpack7_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 127ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 7) & mask;
out[2] = (w0 >> 14) & mask;
out[3] = (w0 >> 21) & mask;
out[4] = (w0 >> 28) & mask;
out[5] = (w0 >> 35) & mask;
out[6] = (w0 >> 42) & mask;
out[7] = (w0 >> 49) & mask;
out[8] = (w0 >> 56) & mask;
out[9] = ((w0 >> 63) | (w1 << 1)) & mask;
out[10] = (w1 >> 6) & mask;
out[11] = (w1 >> 13) & mask;
out[12] = (w1 >> 20) & mask;
out[13] = (w1 >> 27) & mask;
out[14] = (w1 >> 34) & mask;
out[15] = (w1 >> 41) & mask;
out[16] = (w1 >> 48) & mask;
out[17] = (w1 >> 55) & mask;
out[18] = ((w1 >> 62) | (w2 << 2)) & mask;
out[19] = (w2 >> 5) & mask;
out[20] = (w2 >> 12) & mask;
out[21] = (w2 >> 19) & mask;
out[22] = (w2 >> 26) & mask;
out[23] = (w2 >> 33) & mask;
out[24] = (w2 >> 40) & mask;
out[25] = (w2 >> 47) & mask;
out[26] = (w2 >> 54) & mask;
out[27] = ((w2 >> 61) | (w3 << 3)) & mask;
out[28] = (w3 >> 4) & mask;
out[29] = (w3 >> 11) & mask;
out[30] = (w3 >> 18) & mask;
out[31] = (w3 >> 25) & mask;
return in;
}
inline const uint8_t* unpack8_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 255ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 8) & mask;
out[2] = (w0 >> 16) & mask;
out[3] = (w0 >> 24) & mask;
out[4] = (w0 >> 32) & mask;
out[5] = (w0 >> 40) & mask;
out[6] = (w0 >> 48) & mask;
out[7] = w0 >> 56;
out[8] = (w1)&mask;
out[9] = (w1 >> 8) & mask;
out[10] = (w1 >> 16) & mask;
out[11] = (w1 >> 24) & mask;
out[12] = (w1 >> 32) & mask;
out[13] = (w1 >> 40) & mask;
out[14] = (w1 >> 48) & mask;
out[15] = w1 >> 56;
out[16] = (w2)&mask;
out[17] = (w2 >> 8) & mask;
out[18] = (w2 >> 16) & mask;
out[19] = (w2 >> 24) & mask;
out[20] = (w2 >> 32) & mask;
out[21] = (w2 >> 40) & mask;
out[22] = (w2 >> 48) & mask;
out[23] = w2 >> 56;
out[24] = (w3)&mask;
out[25] = (w3 >> 8) & mask;
out[26] = (w3 >> 16) & mask;
out[27] = (w3 >> 24) & mask;
out[28] = (w3 >> 32) & mask;
out[29] = (w3 >> 40) & mask;
out[30] = (w3 >> 48) & mask;
out[31] = w3 >> 56;
return in;
}
inline const uint8_t* unpack9_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 511ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 9) & mask;
out[2] = (w0 >> 18) & mask;
out[3] = (w0 >> 27) & mask;
out[4] = (w0 >> 36) & mask;
out[5] = (w0 >> 45) & mask;
out[6] = (w0 >> 54) & mask;
out[7] = ((w0 >> 63) | (w1 << 1)) & mask;
out[8] = (w1 >> 8) & mask;
out[9] = (w1 >> 17) & mask;
out[10] = (w1 >> 26) & mask;
out[11] = (w1 >> 35) & mask;
out[12] = (w1 >> 44) & mask;
out[13] = (w1 >> 53) & mask;
out[14] = ((w1 >> 62) | (w2 << 2)) & mask;
out[15] = (w2 >> 7) & mask;
out[16] = (w2 >> 16) & mask;
out[17] = (w2 >> 25) & mask;
out[18] = (w2 >> 34) & mask;
out[19] = (w2 >> 43) & mask;
out[20] = (w2 >> 52) & mask;
out[21] = ((w2 >> 61) | (w3 << 3)) & mask;
out[22] = (w3 >> 6) & mask;
out[23] = (w3 >> 15) & mask;
out[24] = (w3 >> 24) & mask;
out[25] = (w3 >> 33) & mask;
out[26] = (w3 >> 42) & mask;
out[27] = (w3 >> 51) & mask;
out[28] = ((w3 >> 60) | (w4 << 4)) & mask;
out[29] = (w4 >> 5) & mask;
out[30] = (w4 >> 14) & mask;
out[31] = (w4 >> 23) & mask;
return in;
}
inline const uint8_t* unpack10_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 1023ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 10) & mask;
out[2] = (w0 >> 20) & mask;
out[3] = (w0 >> 30) & mask;
out[4] = (w0 >> 40) & mask;
out[5] = (w0 >> 50) & mask;
out[6] = ((w0 >> 60) | (w1 << 4)) & mask;
out[7] = (w1 >> 6) & mask;
out[8] = (w1 >> 16) & mask;
out[9] = (w1 >> 26) & mask;
out[10] = (w1 >> 36) & mask;
out[11] = (w1 >> 46) & mask;
out[12] = ((w1 >> 56) | (w2 << 8)) & mask;
out[13] = (w2 >> 2) & mask;
out[14] = (w2 >> 12) & mask;
out[15] = (w2 >> 22) & mask;
out[16] = (w2 >> 32) & mask;
out[17] = (w2 >> 42) & mask;
out[18] = (w2 >> 52) & mask;
out[19] = ((w2 >> 62) | (w3 << 2)) & mask;
out[20] = (w3 >> 8) & mask;
out[21] = (w3 >> 18) & mask;
out[22] = (w3 >> 28) & mask;
out[23] = (w3 >> 38) & mask;
out[24] = (w3 >> 48) & mask;
out[25] = ((w3 >> 58) | (w4 << 6)) & mask;
out[26] = (w4 >> 4) & mask;
out[27] = (w4 >> 14) & mask;
out[28] = (w4 >> 24) & mask;
out[29] = (w4 >> 34) & mask;
out[30] = (w4 >> 44) & mask;
out[31] = w4 >> 54;
return in;
}
inline const uint8_t* unpack11_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 2047ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 11) & mask;
out[2] = (w0 >> 22) & mask;
out[3] = (w0 >> 33) & mask;
out[4] = (w0 >> 44) & mask;
out[5] = ((w0 >> 55) | (w1 << 9)) & mask;
out[6] = (w1 >> 2) & mask;
out[7] = (w1 >> 13) & mask;
out[8] = (w1 >> 24) & mask;
out[9] = (w1 >> 35) & mask;
out[10] = (w1 >> 46) & mask;
out[11] = ((w1 >> 57) | (w2 << 7)) & mask;
out[12] = (w2 >> 4) & mask;
out[13] = (w2 >> 15) & mask;
out[14] = (w2 >> 26) & mask;
out[15] = (w2 >> 37) & mask;
out[16] = (w2 >> 48) & mask;
out[17] = ((w2 >> 59) | (w3 << 5)) & mask;
out[18] = (w3 >> 6) & mask;
out[19] = (w3 >> 17) & mask;
out[20] = (w3 >> 28) & mask;
out[21] = (w3 >> 39) & mask;
out[22] = (w3 >> 50) & mask;
out[23] = ((w3 >> 61) | (w4 << 3)) & mask;
out[24] = (w4 >> 8) & mask;
out[25] = (w4 >> 19) & mask;
out[26] = (w4 >> 30) & mask;
out[27] = (w4 >> 41) & mask;
out[28] = (w4 >> 52) & mask;
out[29] = ((w4 >> 63) | (w5 << 1)) & mask;
out[30] = (w5 >> 10) & mask;
out[31] = (w5 >> 21) & mask;
return in;
}
inline const uint8_t* unpack12_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 4095ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 12) & mask;
out[2] = (w0 >> 24) & mask;
out[3] = (w0 >> 36) & mask;
out[4] = (w0 >> 48) & mask;
out[5] = ((w0 >> 60) | (w1 << 4)) & mask;
out[6] = (w1 >> 8) & mask;
out[7] = (w1 >> 20) & mask;
out[8] = (w1 >> 32) & mask;
out[9] = (w1 >> 44) & mask;
out[10] = ((w1 >> 56) | (w2 << 8)) & mask;
out[11] = (w2 >> 4) & mask;
out[12] = (w2 >> 16) & mask;
out[13] = (w2 >> 28) & mask;
out[14] = (w2 >> 40) & mask;
out[15] = w2 >> 52;
out[16] = (w3)&mask;
out[17] = (w3 >> 12) & mask;
out[18] = (w3 >> 24) & mask;
out[19] = (w3 >> 36) & mask;
out[20] = (w3 >> 48) & mask;
out[21] = ((w3 >> 60) | (w4 << 4)) & mask;
out[22] = (w4 >> 8) & mask;
out[23] = (w4 >> 20) & mask;
out[24] = (w4 >> 32) & mask;
out[25] = (w4 >> 44) & mask;
out[26] = ((w4 >> 56) | (w5 << 8)) & mask;
out[27] = (w5 >> 4) & mask;
out[28] = (w5 >> 16) & mask;
out[29] = (w5 >> 28) & mask;
out[30] = (w5 >> 40) & mask;
out[31] = w5 >> 52;
return in;
}
inline const uint8_t* unpack13_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 8191ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 13) & mask;
out[2] = (w0 >> 26) & mask;
out[3] = (w0 >> 39) & mask;
out[4] = ((w0 >> 52) | (w1 << 12)) & mask;
out[5] = (w1 >> 1) & mask;
out[6] = (w1 >> 14) & mask;
out[7] = (w1 >> 27) & mask;
out[8] = (w1 >> 40) & mask;
out[9] = ((w1 >> 53) | (w2 << 11)) & mask;
out[10] = (w2 >> 2) & mask;
out[11] = (w2 >> 15) & mask;
out[12] = (w2 >> 28) & mask;
out[13] = (w2 >> 41) & mask;
out[14] = ((w2 >> 54) | (w3 << 10)) & mask;
out[15] = (w3 >> 3) & mask;
out[16] = (w3 >> 16) & mask;
out[17] = (w3 >> 29) & mask;
out[18] = (w3 >> 42) & mask;
out[19] = ((w3 >> 55) | (w4 << 9)) & mask;
out[20] = (w4 >> 4) & mask;
out[21] = (w4 >> 17) & mask;
out[22] = (w4 >> 30) & mask;
out[23] = (w4 >> 43) & mask;
out[24] = ((w4 >> 56) | (w5 << 8)) & mask;
out[25] = (w5 >> 5) & mask;
out[26] = (w5 >> 18) & mask;
out[27] = (w5 >> 31) & mask;
out[28] = (w5 >> 44) & mask;
out[29] = ((w5 >> 57) | (w6 << 7)) & mask;
out[30] = (w6 >> 6) & mask;
out[31] = (w6 >> 19) & mask;
return in;
}
inline const uint8_t* unpack14_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 16383ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 14) & mask;
out[2] = (w0 >> 28) & mask;
out[3] = (w0 >> 42) & mask;
out[4] = ((w0 >> 56) | (w1 << 8)) & mask;
out[5] = (w1 >> 6) & mask;
out[6] = (w1 >> 20) & mask;
out[7] = (w1 >> 34) & mask;
out[8] = (w1 >> 48) & mask;
out[9] = ((w1 >> 62) | (w2 << 2)) & mask;
out[10] = (w2 >> 12) & mask;
out[11] = (w2 >> 26) & mask;
out[12] = (w2 >> 40) & mask;
out[13] = ((w2 >> 54) | (w3 << 10)) & mask;
out[14] = (w3 >> 4) & mask;
out[15] = (w3 >> 18) & mask;
out[16] = (w3 >> 32) & mask;
out[17] = (w3 >> 46) & mask;
out[18] = ((w3 >> 60) | (w4 << 4)) & mask;
out[19] = (w4 >> 10) & mask;
out[20] = (w4 >> 24) & mask;
out[21] = (w4 >> 38) & mask;
out[22] = ((w4 >> 52) | (w5 << 12)) & mask;
out[23] = (w5 >> 2) & mask;
out[24] = (w5 >> 16) & mask;
out[25] = (w5 >> 30) & mask;
out[26] = (w5 >> 44) & mask;
out[27] = ((w5 >> 58) | (w6 << 6)) & mask;
out[28] = (w6 >> 8) & mask;
out[29] = (w6 >> 22) & mask;
out[30] = (w6 >> 36) & mask;
out[31] = w6 >> 50;
return in;
}
inline const uint8_t* unpack15_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 32767ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 15) & mask;
out[2] = (w0 >> 30) & mask;
out[3] = (w0 >> 45) & mask;
out[4] = ((w0 >> 60) | (w1 << 4)) & mask;
out[5] = (w1 >> 11) & mask;
out[6] = (w1 >> 26) & mask;
out[7] = (w1 >> 41) & mask;
out[8] = ((w1 >> 56) | (w2 << 8)) & mask;
out[9] = (w2 >> 7) & mask;
out[10] = (w2 >> 22) & mask;
out[11] = (w2 >> 37) & mask;
out[12] = ((w2 >> 52) | (w3 << 12)) & mask;
out[13] = (w3 >> 3) & mask;
out[14] = (w3 >> 18) & mask;
out[15] = (w3 >> 33) & mask;
out[16] = (w3 >> 48) & mask;
out[17] = ((w3 >> 63) | (w4 << 1)) & mask;
out[18] = (w4 >> 14) & mask;
out[19] = (w4 >> 29) & mask;
out[20] = (w4 >> 44) & mask;
out[21] = ((w4 >> 59) | (w5 << 5)) & mask;
out[22] = (w5 >> 10) & mask;
out[23] = (w5 >> 25) & mask;
out[24] = (w5 >> 40) & mask;
out[25] = ((w5 >> 55) | (w6 << 9)) & mask;
out[26] = (w6 >> 6) & mask;
out[27] = (w6 >> 21) & mask;
out[28] = (w6 >> 36) & mask;
out[29] = ((w6 >> 51) | (w7 << 13)) & mask;
out[30] = (w7 >> 2) & mask;
out[31] = (w7 >> 17) & mask;
return in;
}
inline const uint8_t* unpack16_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 65535ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 16) & mask;
out[2] = (w0 >> 32) & mask;
out[3] = w0 >> 48;
out[4] = (w1)&mask;
out[5] = (w1 >> 16) & mask;
out[6] = (w1 >> 32) & mask;
out[7] = w1 >> 48;
out[8] = (w2)&mask;
out[9] = (w2 >> 16) & mask;
out[10] = (w2 >> 32) & mask;
out[11] = w2 >> 48;
out[12] = (w3)&mask;
out[13] = (w3 >> 16) & mask;
out[14] = (w3 >> 32) & mask;
out[15] = w3 >> 48;
out[16] = (w4)&mask;
out[17] = (w4 >> 16) & mask;
out[18] = (w4 >> 32) & mask;
out[19] = w4 >> 48;
out[20] = (w5)&mask;
out[21] = (w5 >> 16) & mask;
out[22] = (w5 >> 32) & mask;
out[23] = w5 >> 48;
out[24] = (w6)&mask;
out[25] = (w6 >> 16) & mask;
out[26] = (w6 >> 32) & mask;
out[27] = w6 >> 48;
out[28] = (w7)&mask;
out[29] = (w7 >> 16) & mask;
out[30] = (w7 >> 32) & mask;
out[31] = w7 >> 48;
return in;
}
inline const uint8_t* unpack17_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 131071ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 17) & mask;
out[2] = (w0 >> 34) & mask;
out[3] = ((w0 >> 51) | (w1 << 13)) & mask;
out[4] = (w1 >> 4) & mask;
out[5] = (w1 >> 21) & mask;
out[6] = (w1 >> 38) & mask;
out[7] = ((w1 >> 55) | (w2 << 9)) & mask;
out[8] = (w2 >> 8) & mask;
out[9] = (w2 >> 25) & mask;
out[10] = (w2 >> 42) & mask;
out[11] = ((w2 >> 59) | (w3 << 5)) & mask;
out[12] = (w3 >> 12) & mask;
out[13] = (w3 >> 29) & mask;
out[14] = (w3 >> 46) & mask;
out[15] = ((w3 >> 63) | (w4 << 1)) & mask;
out[16] = (w4 >> 16) & mask;
out[17] = (w4 >> 33) & mask;
out[18] = ((w4 >> 50) | (w5 << 14)) & mask;
out[19] = (w5 >> 3) & mask;
out[20] = (w5 >> 20) & mask;
out[21] = (w5 >> 37) & mask;
out[22] = ((w5 >> 54) | (w6 << 10)) & mask;
out[23] = (w6 >> 7) & mask;
out[24] = (w6 >> 24) & mask;
out[25] = (w6 >> 41) & mask;
out[26] = ((w6 >> 58) | (w7 << 6)) & mask;
out[27] = (w7 >> 11) & mask;
out[28] = (w7 >> 28) & mask;
out[29] = (w7 >> 45) & mask;
out[30] = ((w7 >> 62) | (w8 << 2)) & mask;
out[31] = (w8 >> 15) & mask;
return in;
}
inline const uint8_t* unpack18_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 262143ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 18) & mask;
out[2] = (w0 >> 36) & mask;
out[3] = ((w0 >> 54) | (w1 << 10)) & mask;
out[4] = (w1 >> 8) & mask;
out[5] = (w1 >> 26) & mask;
out[6] = (w1 >> 44) & mask;
out[7] = ((w1 >> 62) | (w2 << 2)) & mask;
out[8] = (w2 >> 16) & mask;
out[9] = (w2 >> 34) & mask;
out[10] = ((w2 >> 52) | (w3 << 12)) & mask;
out[11] = (w3 >> 6) & mask;
out[12] = (w3 >> 24) & mask;
out[13] = (w3 >> 42) & mask;
out[14] = ((w3 >> 60) | (w4 << 4)) & mask;
out[15] = (w4 >> 14) & mask;
out[16] = (w4 >> 32) & mask;
out[17] = ((w4 >> 50) | (w5 << 14)) & mask;
out[18] = (w5 >> 4) & mask;
out[19] = (w5 >> 22) & mask;
out[20] = (w5 >> 40) & mask;
out[21] = ((w5 >> 58) | (w6 << 6)) & mask;
out[22] = (w6 >> 12) & mask;
out[23] = (w6 >> 30) & mask;
out[24] = ((w6 >> 48) | (w7 << 16)) & mask;
out[25] = (w7 >> 2) & mask;
out[26] = (w7 >> 20) & mask;
out[27] = (w7 >> 38) & mask;
out[28] = ((w7 >> 56) | (w8 << 8)) & mask;
out[29] = (w8 >> 10) & mask;
out[30] = (w8 >> 28) & mask;
out[31] = w8 >> 46;
return in;
}
inline const uint8_t* unpack19_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 524287ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 19) & mask;
out[2] = (w0 >> 38) & mask;
out[3] = ((w0 >> 57) | (w1 << 7)) & mask;
out[4] = (w1 >> 12) & mask;
out[5] = (w1 >> 31) & mask;
out[6] = ((w1 >> 50) | (w2 << 14)) & mask;
out[7] = (w2 >> 5) & mask;
out[8] = (w2 >> 24) & mask;
out[9] = (w2 >> 43) & mask;
out[10] = ((w2 >> 62) | (w3 << 2)) & mask;
out[11] = (w3 >> 17) & mask;
out[12] = (w3 >> 36) & mask;
out[13] = ((w3 >> 55) | (w4 << 9)) & mask;
out[14] = (w4 >> 10) & mask;
out[15] = (w4 >> 29) & mask;
out[16] = ((w4 >> 48) | (w5 << 16)) & mask;
out[17] = (w5 >> 3) & mask;
out[18] = (w5 >> 22) & mask;
out[19] = (w5 >> 41) & mask;
out[20] = ((w5 >> 60) | (w6 << 4)) & mask;
out[21] = (w6 >> 15) & mask;
out[22] = (w6 >> 34) & mask;
out[23] = ((w6 >> 53) | (w7 << 11)) & mask;
out[24] = (w7 >> 8) & mask;
out[25] = (w7 >> 27) & mask;
out[26] = ((w7 >> 46) | (w8 << 18)) & mask;
out[27] = (w8 >> 1) & mask;
out[28] = (w8 >> 20) & mask;
out[29] = (w8 >> 39) & mask;
out[30] = ((w8 >> 58) | (w9 << 6)) & mask;
out[31] = (w9 >> 13) & mask;
return in;
}
inline const uint8_t* unpack20_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 1048575ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 20) & mask;
out[2] = (w0 >> 40) & mask;
out[3] = ((w0 >> 60) | (w1 << 4)) & mask;
out[4] = (w1 >> 16) & mask;
out[5] = (w1 >> 36) & mask;
out[6] = ((w1 >> 56) | (w2 << 8)) & mask;
out[7] = (w2 >> 12) & mask;
out[8] = (w2 >> 32) & mask;
out[9] = ((w2 >> 52) | (w3 << 12)) & mask;
out[10] = (w3 >> 8) & mask;
out[11] = (w3 >> 28) & mask;
out[12] = ((w3 >> 48) | (w4 << 16)) & mask;
out[13] = (w4 >> 4) & mask;
out[14] = (w4 >> 24) & mask;
out[15] = w4 >> 44;
out[16] = (w5)&mask;
out[17] = (w5 >> 20) & mask;
out[18] = (w5 >> 40) & mask;
out[19] = ((w5 >> 60) | (w6 << 4)) & mask;
out[20] = (w6 >> 16) & mask;
out[21] = (w6 >> 36) & mask;
out[22] = ((w6 >> 56) | (w7 << 8)) & mask;
out[23] = (w7 >> 12) & mask;
out[24] = (w7 >> 32) & mask;
out[25] = ((w7 >> 52) | (w8 << 12)) & mask;
out[26] = (w8 >> 8) & mask;
out[27] = (w8 >> 28) & mask;
out[28] = ((w8 >> 48) | (w9 << 16)) & mask;
out[29] = (w9 >> 4) & mask;
out[30] = (w9 >> 24) & mask;
out[31] = w9 >> 44;
return in;
}
inline const uint8_t* unpack21_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 2097151ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 21) & mask;
out[2] = (w0 >> 42) & mask;
out[3] = ((w0 >> 63) | (w1 << 1)) & mask;
out[4] = (w1 >> 20) & mask;
out[5] = (w1 >> 41) & mask;
out[6] = ((w1 >> 62) | (w2 << 2)) & mask;
out[7] = (w2 >> 19) & mask;
out[8] = (w2 >> 40) & mask;
out[9] = ((w2 >> 61) | (w3 << 3)) & mask;
out[10] = (w3 >> 18) & mask;
out[11] = (w3 >> 39) & mask;
out[12] = ((w3 >> 60) | (w4 << 4)) & mask;
out[13] = (w4 >> 17) & mask;
out[14] = (w4 >> 38) & mask;
out[15] = ((w4 >> 59) | (w5 << 5)) & mask;
out[16] = (w5 >> 16) & mask;
out[17] = (w5 >> 37) & mask;
out[18] = ((w5 >> 58) | (w6 << 6)) & mask;
out[19] = (w6 >> 15) & mask;
out[20] = (w6 >> 36) & mask;
out[21] = ((w6 >> 57) | (w7 << 7)) & mask;
out[22] = (w7 >> 14) & mask;
out[23] = (w7 >> 35) & mask;
out[24] = ((w7 >> 56) | (w8 << 8)) & mask;
out[25] = (w8 >> 13) & mask;
out[26] = (w8 >> 34) & mask;
out[27] = ((w8 >> 55) | (w9 << 9)) & mask;
out[28] = (w9 >> 12) & mask;
out[29] = (w9 >> 33) & mask;
out[30] = ((w9 >> 54) | (w10 << 10)) & mask;
out[31] = (w10 >> 11) & mask;
return in;
}
inline const uint8_t* unpack22_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 4194303ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 22) & mask;
out[2] = ((w0 >> 44) | (w1 << 20)) & mask;
out[3] = (w1 >> 2) & mask;
out[4] = (w1 >> 24) & mask;
out[5] = ((w1 >> 46) | (w2 << 18)) & mask;
out[6] = (w2 >> 4) & mask;
out[7] = (w2 >> 26) & mask;
out[8] = ((w2 >> 48) | (w3 << 16)) & mask;
out[9] = (w3 >> 6) & mask;
out[10] = (w3 >> 28) & mask;
out[11] = ((w3 >> 50) | (w4 << 14)) & mask;
out[12] = (w4 >> 8) & mask;
out[13] = (w4 >> 30) & mask;
out[14] = ((w4 >> 52) | (w5 << 12)) & mask;
out[15] = (w5 >> 10) & mask;
out[16] = (w5 >> 32) & mask;
out[17] = ((w5 >> 54) | (w6 << 10)) & mask;
out[18] = (w6 >> 12) & mask;
out[19] = (w6 >> 34) & mask;
out[20] = ((w6 >> 56) | (w7 << 8)) & mask;
out[21] = (w7 >> 14) & mask;
out[22] = (w7 >> 36) & mask;
out[23] = ((w7 >> 58) | (w8 << 6)) & mask;
out[24] = (w8 >> 16) & mask;
out[25] = (w8 >> 38) & mask;
out[26] = ((w8 >> 60) | (w9 << 4)) & mask;
out[27] = (w9 >> 18) & mask;
out[28] = (w9 >> 40) & mask;
out[29] = ((w9 >> 62) | (w10 << 2)) & mask;
out[30] = (w10 >> 20) & mask;
out[31] = w10 >> 42;
return in;
}
inline const uint8_t* unpack23_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 8388607ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 23) & mask;
out[2] = ((w0 >> 46) | (w1 << 18)) & mask;
out[3] = (w1 >> 5) & mask;
out[4] = (w1 >> 28) & mask;
out[5] = ((w1 >> 51) | (w2 << 13)) & mask;
out[6] = (w2 >> 10) & mask;
out[7] = (w2 >> 33) & mask;
out[8] = ((w2 >> 56) | (w3 << 8)) & mask;
out[9] = (w3 >> 15) & mask;
out[10] = (w3 >> 38) & mask;
out[11] = ((w3 >> 61) | (w4 << 3)) & mask;
out[12] = (w4 >> 20) & mask;
out[13] = ((w4 >> 43) | (w5 << 21)) & mask;
out[14] = (w5 >> 2) & mask;
out[15] = (w5 >> 25) & mask;
out[16] = ((w5 >> 48) | (w6 << 16)) & mask;
out[17] = (w6 >> 7) & mask;
out[18] = (w6 >> 30) & mask;
out[19] = ((w6 >> 53) | (w7 << 11)) & mask;
out[20] = (w7 >> 12) & mask;
out[21] = (w7 >> 35) & mask;
out[22] = ((w7 >> 58) | (w8 << 6)) & mask;
out[23] = (w8 >> 17) & mask;
out[24] = (w8 >> 40) & mask;
out[25] = ((w8 >> 63) | (w9 << 1)) & mask;
out[26] = (w9 >> 22) & mask;
out[27] = ((w9 >> 45) | (w10 << 19)) & mask;
out[28] = (w10 >> 4) & mask;
out[29] = (w10 >> 27) & mask;
out[30] = ((w10 >> 50) | (w11 << 14)) & mask;
out[31] = (w11 >> 9) & mask;
return in;
}
inline const uint8_t* unpack24_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 16777215ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 24) & mask;
out[2] = ((w0 >> 48) | (w1 << 16)) & mask;
out[3] = (w1 >> 8) & mask;
out[4] = (w1 >> 32) & mask;
out[5] = ((w1 >> 56) | (w2 << 8)) & mask;
out[6] = (w2 >> 16) & mask;
out[7] = w2 >> 40;
out[8] = (w3)&mask;
out[9] = (w3 >> 24) & mask;
out[10] = ((w3 >> 48) | (w4 << 16)) & mask;
out[11] = (w4 >> 8) & mask;
out[12] = (w4 >> 32) & mask;
out[13] = ((w4 >> 56) | (w5 << 8)) & mask;
out[14] = (w5 >> 16) & mask;
out[15] = w5 >> 40;
out[16] = (w6)&mask;
out[17] = (w6 >> 24) & mask;
out[18] = ((w6 >> 48) | (w7 << 16)) & mask;
out[19] = (w7 >> 8) & mask;
out[20] = (w7 >> 32) & mask;
out[21] = ((w7 >> 56) | (w8 << 8)) & mask;
out[22] = (w8 >> 16) & mask;
out[23] = w8 >> 40;
out[24] = (w9)&mask;
out[25] = (w9 >> 24) & mask;
out[26] = ((w9 >> 48) | (w10 << 16)) & mask;
out[27] = (w10 >> 8) & mask;
out[28] = (w10 >> 32) & mask;
out[29] = ((w10 >> 56) | (w11 << 8)) & mask;
out[30] = (w11 >> 16) & mask;
out[31] = w11 >> 40;
return in;
}
inline const uint8_t* unpack25_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 33554431ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 25) & mask;
out[2] = ((w0 >> 50) | (w1 << 14)) & mask;
out[3] = (w1 >> 11) & mask;
out[4] = (w1 >> 36) & mask;
out[5] = ((w1 >> 61) | (w2 << 3)) & mask;
out[6] = (w2 >> 22) & mask;
out[7] = ((w2 >> 47) | (w3 << 17)) & mask;
out[8] = (w3 >> 8) & mask;
out[9] = (w3 >> 33) & mask;
out[10] = ((w3 >> 58) | (w4 << 6)) & mask;
out[11] = (w4 >> 19) & mask;
out[12] = ((w4 >> 44) | (w5 << 20)) & mask;
out[13] = (w5 >> 5) & mask;
out[14] = (w5 >> 30) & mask;
out[15] = ((w5 >> 55) | (w6 << 9)) & mask;
out[16] = (w6 >> 16) & mask;
out[17] = ((w6 >> 41) | (w7 << 23)) & mask;
out[18] = (w7 >> 2) & mask;
out[19] = (w7 >> 27) & mask;
out[20] = ((w7 >> 52) | (w8 << 12)) & mask;
out[21] = (w8 >> 13) & mask;
out[22] = (w8 >> 38) & mask;
out[23] = ((w8 >> 63) | (w9 << 1)) & mask;
out[24] = (w9 >> 24) & mask;
out[25] = ((w9 >> 49) | (w10 << 15)) & mask;
out[26] = (w10 >> 10) & mask;
out[27] = (w10 >> 35) & mask;
out[28] = ((w10 >> 60) | (w11 << 4)) & mask;
out[29] = (w11 >> 21) & mask;
out[30] = ((w11 >> 46) | (w12 << 18)) & mask;
out[31] = (w12 >> 7) & mask;
return in;
}
inline const uint8_t* unpack26_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 67108863ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 26) & mask;
out[2] = ((w0 >> 52) | (w1 << 12)) & mask;
out[3] = (w1 >> 14) & mask;
out[4] = ((w1 >> 40) | (w2 << 24)) & mask;
out[5] = (w2 >> 2) & mask;
out[6] = (w2 >> 28) & mask;
out[7] = ((w2 >> 54) | (w3 << 10)) & mask;
out[8] = (w3 >> 16) & mask;
out[9] = ((w3 >> 42) | (w4 << 22)) & mask;
out[10] = (w4 >> 4) & mask;
out[11] = (w4 >> 30) & mask;
out[12] = ((w4 >> 56) | (w5 << 8)) & mask;
out[13] = (w5 >> 18) & mask;
out[14] = ((w5 >> 44) | (w6 << 20)) & mask;
out[15] = (w6 >> 6) & mask;
out[16] = (w6 >> 32) & mask;
out[17] = ((w6 >> 58) | (w7 << 6)) & mask;
out[18] = (w7 >> 20) & mask;
out[19] = ((w7 >> 46) | (w8 << 18)) & mask;
out[20] = (w8 >> 8) & mask;
out[21] = (w8 >> 34) & mask;
out[22] = ((w8 >> 60) | (w9 << 4)) & mask;
out[23] = (w9 >> 22) & mask;
out[24] = ((w9 >> 48) | (w10 << 16)) & mask;
out[25] = (w10 >> 10) & mask;
out[26] = (w10 >> 36) & mask;
out[27] = ((w10 >> 62) | (w11 << 2)) & mask;
out[28] = (w11 >> 24) & mask;
out[29] = ((w11 >> 50) | (w12 << 14)) & mask;
out[30] = (w12 >> 12) & mask;
out[31] = w12 >> 38;
return in;
}
inline const uint8_t* unpack27_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 134217727ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
uint64_t w13 = util::SafeLoadAs(in);
w13 = arrow::BitUtil::FromLittleEndian(w13);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 27) & mask;
out[2] = ((w0 >> 54) | (w1 << 10)) & mask;
out[3] = (w1 >> 17) & mask;
out[4] = ((w1 >> 44) | (w2 << 20)) & mask;
out[5] = (w2 >> 7) & mask;
out[6] = (w2 >> 34) & mask;
out[7] = ((w2 >> 61) | (w3 << 3)) & mask;
out[8] = (w3 >> 24) & mask;
out[9] = ((w3 >> 51) | (w4 << 13)) & mask;
out[10] = (w4 >> 14) & mask;
out[11] = ((w4 >> 41) | (w5 << 23)) & mask;
out[12] = (w5 >> 4) & mask;
out[13] = (w5 >> 31) & mask;
out[14] = ((w5 >> 58) | (w6 << 6)) & mask;
out[15] = (w6 >> 21) & mask;
out[16] = ((w6 >> 48) | (w7 << 16)) & mask;
out[17] = (w7 >> 11) & mask;
out[18] = ((w7 >> 38) | (w8 << 26)) & mask;
out[19] = (w8 >> 1) & mask;
out[20] = (w8 >> 28) & mask;
out[21] = ((w8 >> 55) | (w9 << 9)) & mask;
out[22] = (w9 >> 18) & mask;
out[23] = ((w9 >> 45) | (w10 << 19)) & mask;
out[24] = (w10 >> 8) & mask;
out[25] = (w10 >> 35) & mask;
out[26] = ((w10 >> 62) | (w11 << 2)) & mask;
out[27] = (w11 >> 25) & mask;
out[28] = ((w11 >> 52) | (w12 << 12)) & mask;
out[29] = (w12 >> 15) & mask;
out[30] = ((w12 >> 42) | (w13 << 22)) & mask;
out[31] = (w13 >> 5) & mask;
return in;
}
inline const uint8_t* unpack28_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 268435455ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
uint64_t w13 = util::SafeLoadAs(in);
w13 = arrow::BitUtil::FromLittleEndian(w13);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 28) & mask;
out[2] = ((w0 >> 56) | (w1 << 8)) & mask;
out[3] = (w1 >> 20) & mask;
out[4] = ((w1 >> 48) | (w2 << 16)) & mask;
out[5] = (w2 >> 12) & mask;
out[6] = ((w2 >> 40) | (w3 << 24)) & mask;
out[7] = (w3 >> 4) & mask;
out[8] = (w3 >> 32) & mask;
out[9] = ((w3 >> 60) | (w4 << 4)) & mask;
out[10] = (w4 >> 24) & mask;
out[11] = ((w4 >> 52) | (w5 << 12)) & mask;
out[12] = (w5 >> 16) & mask;
out[13] = ((w5 >> 44) | (w6 << 20)) & mask;
out[14] = (w6 >> 8) & mask;
out[15] = w6 >> 36;
out[16] = (w7)&mask;
out[17] = (w7 >> 28) & mask;
out[18] = ((w7 >> 56) | (w8 << 8)) & mask;
out[19] = (w8 >> 20) & mask;
out[20] = ((w8 >> 48) | (w9 << 16)) & mask;
out[21] = (w9 >> 12) & mask;
out[22] = ((w9 >> 40) | (w10 << 24)) & mask;
out[23] = (w10 >> 4) & mask;
out[24] = (w10 >> 32) & mask;
out[25] = ((w10 >> 60) | (w11 << 4)) & mask;
out[26] = (w11 >> 24) & mask;
out[27] = ((w11 >> 52) | (w12 << 12)) & mask;
out[28] = (w12 >> 16) & mask;
out[29] = ((w12 >> 44) | (w13 << 20)) & mask;
out[30] = (w13 >> 8) & mask;
out[31] = w13 >> 36;
return in;
}
inline const uint8_t* unpack29_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 536870911ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
uint64_t w13 = util::SafeLoadAs(in);
w13 = arrow::BitUtil::FromLittleEndian(w13);
in += 8;
uint64_t w14 = util::SafeLoadAs(in);
w14 = arrow::BitUtil::FromLittleEndian(w14);
in += 4;
out[0] = (w0)&mask;
out[1] = (w0 >> 29) & mask;
out[2] = ((w0 >> 58) | (w1 << 6)) & mask;
out[3] = (w1 >> 23) & mask;
out[4] = ((w1 >> 52) | (w2 << 12)) & mask;
out[5] = (w2 >> 17) & mask;
out[6] = ((w2 >> 46) | (w3 << 18)) & mask;
out[7] = (w3 >> 11) & mask;
out[8] = ((w3 >> 40) | (w4 << 24)) & mask;
out[9] = (w4 >> 5) & mask;
out[10] = (w4 >> 34) & mask;
out[11] = ((w4 >> 63) | (w5 << 1)) & mask;
out[12] = (w5 >> 28) & mask;
out[13] = ((w5 >> 57) | (w6 << 7)) & mask;
out[14] = (w6 >> 22) & mask;
out[15] = ((w6 >> 51) | (w7 << 13)) & mask;
out[16] = (w7 >> 16) & mask;
out[17] = ((w7 >> 45) | (w8 << 19)) & mask;
out[18] = (w8 >> 10) & mask;
out[19] = ((w8 >> 39) | (w9 << 25)) & mask;
out[20] = (w9 >> 4) & mask;
out[21] = (w9 >> 33) & mask;
out[22] = ((w9 >> 62) | (w10 << 2)) & mask;
out[23] = (w10 >> 27) & mask;
out[24] = ((w10 >> 56) | (w11 << 8)) & mask;
out[25] = (w11 >> 21) & mask;
out[26] = ((w11 >> 50) | (w12 << 14)) & mask;
out[27] = (w12 >> 15) & mask;
out[28] = ((w12 >> 44) | (w13 << 20)) & mask;
out[29] = (w13 >> 9) & mask;
out[30] = ((w13 >> 38) | (w14 << 26)) & mask;
out[31] = (w14 >> 3) & mask;
return in;
}
inline const uint8_t* unpack30_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 1073741823ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
uint64_t w13 = util::SafeLoadAs(in);
w13 = arrow::BitUtil::FromLittleEndian(w13);
in += 8;
uint64_t w14 = util::SafeLoadAs(in);
w14 = arrow::BitUtil::FromLittleEndian(w14);
in += 8;
out[0] = (w0)&mask;
out[1] = (w0 >> 30) & mask;
out[2] = ((w0 >> 60) | (w1 << 4)) & mask;
out[3] = (w1 >> 26) & mask;
out[4] = ((w1 >> 56) | (w2 << 8)) & mask;
out[5] = (w2 >> 22) & mask;
out[6] = ((w2 >> 52) | (w3 << 12)) & mask;
out[7] = (w3 >> 18) & mask;
out[8] = ((w3 >> 48) | (w4 << 16)) & mask;
out[9] = (w4 >> 14) & mask;
out[10] = ((w4 >> 44) | (w5 << 20)) & mask;
out[11] = (w5 >> 10) & mask;
out[12] = ((w5 >> 40) | (w6 << 24)) & mask;
out[13] = (w6 >> 6) & mask;
out[14] = ((w6 >> 36) | (w7 << 28)) & mask;
out[15] = (w7 >> 2) & mask;
out[16] = (w7 >> 32) & mask;
out[17] = ((w7 >> 62) | (w8 << 2)) & mask;
out[18] = (w8 >> 28) & mask;
out[19] = ((w8 >> 58) | (w9 << 6)) & mask;
out[20] = (w9 >> 24) & mask;
out[21] = ((w9 >> 54) | (w10 << 10)) & mask;
out[22] = (w10 >> 20) & mask;
out[23] = ((w10 >> 50) | (w11 << 14)) & mask;
out[24] = (w11 >> 16) & mask;
out[25] = ((w11 >> 46) | (w12 << 18)) & mask;
out[26] = (w12 >> 12) & mask;
out[27] = ((w12 >> 42) | (w13 << 22)) & mask;
out[28] = (w13 >> 8) & mask;
out[29] = ((w13 >> 38) | (w14 << 26)) & mask;
out[30] = (w14 >> 4) & mask;
out[31] = w14 >> 34;
return in;
}
inline const uint8_t* unpack31_64(const uint8_t* in, uint64_t* out) {
const uint64_t mask = 2147483647ULL;
uint64_t w0 = util::SafeLoadAs(in);
w0 = arrow::BitUtil::FromLittleEndian(w0);
in += 8;
uint64_t w1 = util::SafeLoadAs(in);
w1 = arrow::BitUtil::FromLittleEndian(w1);
in += 8;
uint64_t w2 = util::SafeLoadAs(in);
w2 = arrow::BitUtil::FromLittleEndian(w2);
in += 8;
uint64_t w3 = util::SafeLoadAs(in);
w3 = arrow::BitUtil::FromLittleEndian(w3);
in += 8;
uint64_t w4 = util::SafeLoadAs(in);
w4 = arrow::BitUtil::FromLittleEndian(w4);
in += 8;
uint64_t w5 = util::SafeLoadAs(in);
w5 = arrow::BitUtil::FromLittleEndian(w5);
in += 8;
uint64_t w6 = util::SafeLoadAs(in);
w6 = arrow::BitUtil::FromLittleEndian(w6);
in += 8;
uint64_t w7 = util::SafeLoadAs(in);
w7 = arrow::BitUtil::FromLittleEndian(w7);
in += 8;
uint64_t w8 = util::SafeLoadAs(in);
w8 = arrow::BitUtil::FromLittleEndian(w8);
in += 8;
uint64_t w9 = util::SafeLoadAs(in);
w9 = arrow::BitUtil::FromLittleEndian(w9);
in += 8;
uint64_t w10 = util::SafeLoadAs(in);
w10 = arrow::BitUtil::FromLittleEndian(w10);
in += 8;
uint64_t w11 = util::SafeLoadAs(in);
w11 = arrow::BitUtil::FromLittleEndian(w11);
in += 8;
uint64_t w12 = util::SafeLoadAs(in);
w12 = arrow::BitUtil::FromLittleEndian(w12);
in += 8;
uint64_t w13 = util::SafeLoadAs