File indexing completed on 2025-08-28 08:27:06
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #pragma once
0028
0029 #include "arrow/util/bit_util.h"
0030 #include "arrow/util/ubsan.h"
0031
0032 namespace arrow {
0033 namespace internal {
0034
0035 inline const uint8_t* unpack0_64(const uint8_t* in, uint64_t* out) {
0036 for (int k = 0; k < 32; k += 1) {
0037 out[k] = 0;
0038 }
0039 return in;
0040 }
0041
0042 inline const uint8_t* unpack1_64(const uint8_t* in, uint64_t* out) {
0043 const uint64_t mask = 1ULL;
0044 uint64_t w0 = util::SafeLoadAs<uint32_t>(in);
0045 w0 = arrow::bit_util::FromLittleEndian(w0);
0046 in += 4;
0047 out[0] = (w0)&mask;
0048 out[1] = (w0 >> 1) & mask;
0049 out[2] = (w0 >> 2) & mask;
0050 out[3] = (w0 >> 3) & mask;
0051 out[4] = (w0 >> 4) & mask;
0052 out[5] = (w0 >> 5) & mask;
0053 out[6] = (w0 >> 6) & mask;
0054 out[7] = (w0 >> 7) & mask;
0055 out[8] = (w0 >> 8) & mask;
0056 out[9] = (w0 >> 9) & mask;
0057 out[10] = (w0 >> 10) & mask;
0058 out[11] = (w0 >> 11) & mask;
0059 out[12] = (w0 >> 12) & mask;
0060 out[13] = (w0 >> 13) & mask;
0061 out[14] = (w0 >> 14) & mask;
0062 out[15] = (w0 >> 15) & mask;
0063 out[16] = (w0 >> 16) & mask;
0064 out[17] = (w0 >> 17) & mask;
0065 out[18] = (w0 >> 18) & mask;
0066 out[19] = (w0 >> 19) & mask;
0067 out[20] = (w0 >> 20) & mask;
0068 out[21] = (w0 >> 21) & mask;
0069 out[22] = (w0 >> 22) & mask;
0070 out[23] = (w0 >> 23) & mask;
0071 out[24] = (w0 >> 24) & mask;
0072 out[25] = (w0 >> 25) & mask;
0073 out[26] = (w0 >> 26) & mask;
0074 out[27] = (w0 >> 27) & mask;
0075 out[28] = (w0 >> 28) & mask;
0076 out[29] = (w0 >> 29) & mask;
0077 out[30] = (w0 >> 30) & mask;
0078 out[31] = (w0 >> 31) & mask;
0079
0080 return in;
0081 }
0082
0083 inline const uint8_t* unpack2_64(const uint8_t* in, uint64_t* out) {
0084 const uint64_t mask = 3ULL;
0085 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0086 w0 = arrow::bit_util::FromLittleEndian(w0);
0087 in += 8;
0088 out[0] = (w0)&mask;
0089 out[1] = (w0 >> 2) & mask;
0090 out[2] = (w0 >> 4) & mask;
0091 out[3] = (w0 >> 6) & mask;
0092 out[4] = (w0 >> 8) & mask;
0093 out[5] = (w0 >> 10) & mask;
0094 out[6] = (w0 >> 12) & mask;
0095 out[7] = (w0 >> 14) & mask;
0096 out[8] = (w0 >> 16) & mask;
0097 out[9] = (w0 >> 18) & mask;
0098 out[10] = (w0 >> 20) & mask;
0099 out[11] = (w0 >> 22) & mask;
0100 out[12] = (w0 >> 24) & mask;
0101 out[13] = (w0 >> 26) & mask;
0102 out[14] = (w0 >> 28) & mask;
0103 out[15] = (w0 >> 30) & mask;
0104 out[16] = (w0 >> 32) & mask;
0105 out[17] = (w0 >> 34) & mask;
0106 out[18] = (w0 >> 36) & mask;
0107 out[19] = (w0 >> 38) & mask;
0108 out[20] = (w0 >> 40) & mask;
0109 out[21] = (w0 >> 42) & mask;
0110 out[22] = (w0 >> 44) & mask;
0111 out[23] = (w0 >> 46) & mask;
0112 out[24] = (w0 >> 48) & mask;
0113 out[25] = (w0 >> 50) & mask;
0114 out[26] = (w0 >> 52) & mask;
0115 out[27] = (w0 >> 54) & mask;
0116 out[28] = (w0 >> 56) & mask;
0117 out[29] = (w0 >> 58) & mask;
0118 out[30] = (w0 >> 60) & mask;
0119 out[31] = w0 >> 62;
0120
0121 return in;
0122 }
0123
0124 inline const uint8_t* unpack3_64(const uint8_t* in, uint64_t* out) {
0125 const uint64_t mask = 7ULL;
0126 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0127 w0 = arrow::bit_util::FromLittleEndian(w0);
0128 in += 8;
0129 uint64_t w1 = util::SafeLoadAs<uint32_t>(in);
0130 w1 = arrow::bit_util::FromLittleEndian(w1);
0131 in += 4;
0132 out[0] = (w0)&mask;
0133 out[1] = (w0 >> 3) & mask;
0134 out[2] = (w0 >> 6) & mask;
0135 out[3] = (w0 >> 9) & mask;
0136 out[4] = (w0 >> 12) & mask;
0137 out[5] = (w0 >> 15) & mask;
0138 out[6] = (w0 >> 18) & mask;
0139 out[7] = (w0 >> 21) & mask;
0140 out[8] = (w0 >> 24) & mask;
0141 out[9] = (w0 >> 27) & mask;
0142 out[10] = (w0 >> 30) & mask;
0143 out[11] = (w0 >> 33) & mask;
0144 out[12] = (w0 >> 36) & mask;
0145 out[13] = (w0 >> 39) & mask;
0146 out[14] = (w0 >> 42) & mask;
0147 out[15] = (w0 >> 45) & mask;
0148 out[16] = (w0 >> 48) & mask;
0149 out[17] = (w0 >> 51) & mask;
0150 out[18] = (w0 >> 54) & mask;
0151 out[19] = (w0 >> 57) & mask;
0152 out[20] = (w0 >> 60) & mask;
0153 out[21] = ((w0 >> 63) | (w1 << 1)) & mask;
0154 out[22] = (w1 >> 2) & mask;
0155 out[23] = (w1 >> 5) & mask;
0156 out[24] = (w1 >> 8) & mask;
0157 out[25] = (w1 >> 11) & mask;
0158 out[26] = (w1 >> 14) & mask;
0159 out[27] = (w1 >> 17) & mask;
0160 out[28] = (w1 >> 20) & mask;
0161 out[29] = (w1 >> 23) & mask;
0162 out[30] = (w1 >> 26) & mask;
0163 out[31] = (w1 >> 29) & mask;
0164
0165 return in;
0166 }
0167
0168 inline const uint8_t* unpack4_64(const uint8_t* in, uint64_t* out) {
0169 const uint64_t mask = 15ULL;
0170 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0171 w0 = arrow::bit_util::FromLittleEndian(w0);
0172 in += 8;
0173 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0174 w1 = arrow::bit_util::FromLittleEndian(w1);
0175 in += 8;
0176 out[0] = (w0)&mask;
0177 out[1] = (w0 >> 4) & mask;
0178 out[2] = (w0 >> 8) & mask;
0179 out[3] = (w0 >> 12) & mask;
0180 out[4] = (w0 >> 16) & mask;
0181 out[5] = (w0 >> 20) & mask;
0182 out[6] = (w0 >> 24) & mask;
0183 out[7] = (w0 >> 28) & mask;
0184 out[8] = (w0 >> 32) & mask;
0185 out[9] = (w0 >> 36) & mask;
0186 out[10] = (w0 >> 40) & mask;
0187 out[11] = (w0 >> 44) & mask;
0188 out[12] = (w0 >> 48) & mask;
0189 out[13] = (w0 >> 52) & mask;
0190 out[14] = (w0 >> 56) & mask;
0191 out[15] = w0 >> 60;
0192 out[16] = (w1)&mask;
0193 out[17] = (w1 >> 4) & mask;
0194 out[18] = (w1 >> 8) & mask;
0195 out[19] = (w1 >> 12) & mask;
0196 out[20] = (w1 >> 16) & mask;
0197 out[21] = (w1 >> 20) & mask;
0198 out[22] = (w1 >> 24) & mask;
0199 out[23] = (w1 >> 28) & mask;
0200 out[24] = (w1 >> 32) & mask;
0201 out[25] = (w1 >> 36) & mask;
0202 out[26] = (w1 >> 40) & mask;
0203 out[27] = (w1 >> 44) & mask;
0204 out[28] = (w1 >> 48) & mask;
0205 out[29] = (w1 >> 52) & mask;
0206 out[30] = (w1 >> 56) & mask;
0207 out[31] = w1 >> 60;
0208
0209 return in;
0210 }
0211
0212 inline const uint8_t* unpack5_64(const uint8_t* in, uint64_t* out) {
0213 const uint64_t mask = 31ULL;
0214 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0215 w0 = arrow::bit_util::FromLittleEndian(w0);
0216 in += 8;
0217 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0218 w1 = arrow::bit_util::FromLittleEndian(w1);
0219 in += 8;
0220 uint64_t w2 = util::SafeLoadAs<uint32_t>(in);
0221 w2 = arrow::bit_util::FromLittleEndian(w2);
0222 in += 4;
0223 out[0] = (w0)&mask;
0224 out[1] = (w0 >> 5) & mask;
0225 out[2] = (w0 >> 10) & mask;
0226 out[3] = (w0 >> 15) & mask;
0227 out[4] = (w0 >> 20) & mask;
0228 out[5] = (w0 >> 25) & mask;
0229 out[6] = (w0 >> 30) & mask;
0230 out[7] = (w0 >> 35) & mask;
0231 out[8] = (w0 >> 40) & mask;
0232 out[9] = (w0 >> 45) & mask;
0233 out[10] = (w0 >> 50) & mask;
0234 out[11] = (w0 >> 55) & mask;
0235 out[12] = ((w0 >> 60) | (w1 << 4)) & mask;
0236 out[13] = (w1 >> 1) & mask;
0237 out[14] = (w1 >> 6) & mask;
0238 out[15] = (w1 >> 11) & mask;
0239 out[16] = (w1 >> 16) & mask;
0240 out[17] = (w1 >> 21) & mask;
0241 out[18] = (w1 >> 26) & mask;
0242 out[19] = (w1 >> 31) & mask;
0243 out[20] = (w1 >> 36) & mask;
0244 out[21] = (w1 >> 41) & mask;
0245 out[22] = (w1 >> 46) & mask;
0246 out[23] = (w1 >> 51) & mask;
0247 out[24] = (w1 >> 56) & mask;
0248 out[25] = ((w1 >> 61) | (w2 << 3)) & mask;
0249 out[26] = (w2 >> 2) & mask;
0250 out[27] = (w2 >> 7) & mask;
0251 out[28] = (w2 >> 12) & mask;
0252 out[29] = (w2 >> 17) & mask;
0253 out[30] = (w2 >> 22) & mask;
0254 out[31] = (w2 >> 27) & mask;
0255
0256 return in;
0257 }
0258
0259 inline const uint8_t* unpack6_64(const uint8_t* in, uint64_t* out) {
0260 const uint64_t mask = 63ULL;
0261 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0262 w0 = arrow::bit_util::FromLittleEndian(w0);
0263 in += 8;
0264 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0265 w1 = arrow::bit_util::FromLittleEndian(w1);
0266 in += 8;
0267 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0268 w2 = arrow::bit_util::FromLittleEndian(w2);
0269 in += 8;
0270 out[0] = (w0)&mask;
0271 out[1] = (w0 >> 6) & mask;
0272 out[2] = (w0 >> 12) & mask;
0273 out[3] = (w0 >> 18) & mask;
0274 out[4] = (w0 >> 24) & mask;
0275 out[5] = (w0 >> 30) & mask;
0276 out[6] = (w0 >> 36) & mask;
0277 out[7] = (w0 >> 42) & mask;
0278 out[8] = (w0 >> 48) & mask;
0279 out[9] = (w0 >> 54) & mask;
0280 out[10] = ((w0 >> 60) | (w1 << 4)) & mask;
0281 out[11] = (w1 >> 2) & mask;
0282 out[12] = (w1 >> 8) & mask;
0283 out[13] = (w1 >> 14) & mask;
0284 out[14] = (w1 >> 20) & mask;
0285 out[15] = (w1 >> 26) & mask;
0286 out[16] = (w1 >> 32) & mask;
0287 out[17] = (w1 >> 38) & mask;
0288 out[18] = (w1 >> 44) & mask;
0289 out[19] = (w1 >> 50) & mask;
0290 out[20] = (w1 >> 56) & mask;
0291 out[21] = ((w1 >> 62) | (w2 << 2)) & mask;
0292 out[22] = (w2 >> 4) & mask;
0293 out[23] = (w2 >> 10) & mask;
0294 out[24] = (w2 >> 16) & mask;
0295 out[25] = (w2 >> 22) & mask;
0296 out[26] = (w2 >> 28) & mask;
0297 out[27] = (w2 >> 34) & mask;
0298 out[28] = (w2 >> 40) & mask;
0299 out[29] = (w2 >> 46) & mask;
0300 out[30] = (w2 >> 52) & mask;
0301 out[31] = w2 >> 58;
0302
0303 return in;
0304 }
0305
0306 inline const uint8_t* unpack7_64(const uint8_t* in, uint64_t* out) {
0307 const uint64_t mask = 127ULL;
0308 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0309 w0 = arrow::bit_util::FromLittleEndian(w0);
0310 in += 8;
0311 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0312 w1 = arrow::bit_util::FromLittleEndian(w1);
0313 in += 8;
0314 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0315 w2 = arrow::bit_util::FromLittleEndian(w2);
0316 in += 8;
0317 uint64_t w3 = util::SafeLoadAs<uint32_t>(in);
0318 w3 = arrow::bit_util::FromLittleEndian(w3);
0319 in += 4;
0320 out[0] = (w0)&mask;
0321 out[1] = (w0 >> 7) & mask;
0322 out[2] = (w0 >> 14) & mask;
0323 out[3] = (w0 >> 21) & mask;
0324 out[4] = (w0 >> 28) & mask;
0325 out[5] = (w0 >> 35) & mask;
0326 out[6] = (w0 >> 42) & mask;
0327 out[7] = (w0 >> 49) & mask;
0328 out[8] = (w0 >> 56) & mask;
0329 out[9] = ((w0 >> 63) | (w1 << 1)) & mask;
0330 out[10] = (w1 >> 6) & mask;
0331 out[11] = (w1 >> 13) & mask;
0332 out[12] = (w1 >> 20) & mask;
0333 out[13] = (w1 >> 27) & mask;
0334 out[14] = (w1 >> 34) & mask;
0335 out[15] = (w1 >> 41) & mask;
0336 out[16] = (w1 >> 48) & mask;
0337 out[17] = (w1 >> 55) & mask;
0338 out[18] = ((w1 >> 62) | (w2 << 2)) & mask;
0339 out[19] = (w2 >> 5) & mask;
0340 out[20] = (w2 >> 12) & mask;
0341 out[21] = (w2 >> 19) & mask;
0342 out[22] = (w2 >> 26) & mask;
0343 out[23] = (w2 >> 33) & mask;
0344 out[24] = (w2 >> 40) & mask;
0345 out[25] = (w2 >> 47) & mask;
0346 out[26] = (w2 >> 54) & mask;
0347 out[27] = ((w2 >> 61) | (w3 << 3)) & mask;
0348 out[28] = (w3 >> 4) & mask;
0349 out[29] = (w3 >> 11) & mask;
0350 out[30] = (w3 >> 18) & mask;
0351 out[31] = (w3 >> 25) & mask;
0352
0353 return in;
0354 }
0355
0356 inline const uint8_t* unpack8_64(const uint8_t* in, uint64_t* out) {
0357 const uint64_t mask = 255ULL;
0358 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0359 w0 = arrow::bit_util::FromLittleEndian(w0);
0360 in += 8;
0361 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0362 w1 = arrow::bit_util::FromLittleEndian(w1);
0363 in += 8;
0364 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0365 w2 = arrow::bit_util::FromLittleEndian(w2);
0366 in += 8;
0367 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0368 w3 = arrow::bit_util::FromLittleEndian(w3);
0369 in += 8;
0370 out[0] = (w0)&mask;
0371 out[1] = (w0 >> 8) & mask;
0372 out[2] = (w0 >> 16) & mask;
0373 out[3] = (w0 >> 24) & mask;
0374 out[4] = (w0 >> 32) & mask;
0375 out[5] = (w0 >> 40) & mask;
0376 out[6] = (w0 >> 48) & mask;
0377 out[7] = w0 >> 56;
0378 out[8] = (w1)&mask;
0379 out[9] = (w1 >> 8) & mask;
0380 out[10] = (w1 >> 16) & mask;
0381 out[11] = (w1 >> 24) & mask;
0382 out[12] = (w1 >> 32) & mask;
0383 out[13] = (w1 >> 40) & mask;
0384 out[14] = (w1 >> 48) & mask;
0385 out[15] = w1 >> 56;
0386 out[16] = (w2)&mask;
0387 out[17] = (w2 >> 8) & mask;
0388 out[18] = (w2 >> 16) & mask;
0389 out[19] = (w2 >> 24) & mask;
0390 out[20] = (w2 >> 32) & mask;
0391 out[21] = (w2 >> 40) & mask;
0392 out[22] = (w2 >> 48) & mask;
0393 out[23] = w2 >> 56;
0394 out[24] = (w3)&mask;
0395 out[25] = (w3 >> 8) & mask;
0396 out[26] = (w3 >> 16) & mask;
0397 out[27] = (w3 >> 24) & mask;
0398 out[28] = (w3 >> 32) & mask;
0399 out[29] = (w3 >> 40) & mask;
0400 out[30] = (w3 >> 48) & mask;
0401 out[31] = w3 >> 56;
0402
0403 return in;
0404 }
0405
0406 inline const uint8_t* unpack9_64(const uint8_t* in, uint64_t* out) {
0407 const uint64_t mask = 511ULL;
0408 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0409 w0 = arrow::bit_util::FromLittleEndian(w0);
0410 in += 8;
0411 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0412 w1 = arrow::bit_util::FromLittleEndian(w1);
0413 in += 8;
0414 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0415 w2 = arrow::bit_util::FromLittleEndian(w2);
0416 in += 8;
0417 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0418 w3 = arrow::bit_util::FromLittleEndian(w3);
0419 in += 8;
0420 uint64_t w4 = util::SafeLoadAs<uint32_t>(in);
0421 w4 = arrow::bit_util::FromLittleEndian(w4);
0422 in += 4;
0423 out[0] = (w0)&mask;
0424 out[1] = (w0 >> 9) & mask;
0425 out[2] = (w0 >> 18) & mask;
0426 out[3] = (w0 >> 27) & mask;
0427 out[4] = (w0 >> 36) & mask;
0428 out[5] = (w0 >> 45) & mask;
0429 out[6] = (w0 >> 54) & mask;
0430 out[7] = ((w0 >> 63) | (w1 << 1)) & mask;
0431 out[8] = (w1 >> 8) & mask;
0432 out[9] = (w1 >> 17) & mask;
0433 out[10] = (w1 >> 26) & mask;
0434 out[11] = (w1 >> 35) & mask;
0435 out[12] = (w1 >> 44) & mask;
0436 out[13] = (w1 >> 53) & mask;
0437 out[14] = ((w1 >> 62) | (w2 << 2)) & mask;
0438 out[15] = (w2 >> 7) & mask;
0439 out[16] = (w2 >> 16) & mask;
0440 out[17] = (w2 >> 25) & mask;
0441 out[18] = (w2 >> 34) & mask;
0442 out[19] = (w2 >> 43) & mask;
0443 out[20] = (w2 >> 52) & mask;
0444 out[21] = ((w2 >> 61) | (w3 << 3)) & mask;
0445 out[22] = (w3 >> 6) & mask;
0446 out[23] = (w3 >> 15) & mask;
0447 out[24] = (w3 >> 24) & mask;
0448 out[25] = (w3 >> 33) & mask;
0449 out[26] = (w3 >> 42) & mask;
0450 out[27] = (w3 >> 51) & mask;
0451 out[28] = ((w3 >> 60) | (w4 << 4)) & mask;
0452 out[29] = (w4 >> 5) & mask;
0453 out[30] = (w4 >> 14) & mask;
0454 out[31] = (w4 >> 23) & mask;
0455
0456 return in;
0457 }
0458
0459 inline const uint8_t* unpack10_64(const uint8_t* in, uint64_t* out) {
0460 const uint64_t mask = 1023ULL;
0461 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0462 w0 = arrow::bit_util::FromLittleEndian(w0);
0463 in += 8;
0464 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0465 w1 = arrow::bit_util::FromLittleEndian(w1);
0466 in += 8;
0467 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0468 w2 = arrow::bit_util::FromLittleEndian(w2);
0469 in += 8;
0470 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0471 w3 = arrow::bit_util::FromLittleEndian(w3);
0472 in += 8;
0473 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0474 w4 = arrow::bit_util::FromLittleEndian(w4);
0475 in += 8;
0476 out[0] = (w0)&mask;
0477 out[1] = (w0 >> 10) & mask;
0478 out[2] = (w0 >> 20) & mask;
0479 out[3] = (w0 >> 30) & mask;
0480 out[4] = (w0 >> 40) & mask;
0481 out[5] = (w0 >> 50) & mask;
0482 out[6] = ((w0 >> 60) | (w1 << 4)) & mask;
0483 out[7] = (w1 >> 6) & mask;
0484 out[8] = (w1 >> 16) & mask;
0485 out[9] = (w1 >> 26) & mask;
0486 out[10] = (w1 >> 36) & mask;
0487 out[11] = (w1 >> 46) & mask;
0488 out[12] = ((w1 >> 56) | (w2 << 8)) & mask;
0489 out[13] = (w2 >> 2) & mask;
0490 out[14] = (w2 >> 12) & mask;
0491 out[15] = (w2 >> 22) & mask;
0492 out[16] = (w2 >> 32) & mask;
0493 out[17] = (w2 >> 42) & mask;
0494 out[18] = (w2 >> 52) & mask;
0495 out[19] = ((w2 >> 62) | (w3 << 2)) & mask;
0496 out[20] = (w3 >> 8) & mask;
0497 out[21] = (w3 >> 18) & mask;
0498 out[22] = (w3 >> 28) & mask;
0499 out[23] = (w3 >> 38) & mask;
0500 out[24] = (w3 >> 48) & mask;
0501 out[25] = ((w3 >> 58) | (w4 << 6)) & mask;
0502 out[26] = (w4 >> 4) & mask;
0503 out[27] = (w4 >> 14) & mask;
0504 out[28] = (w4 >> 24) & mask;
0505 out[29] = (w4 >> 34) & mask;
0506 out[30] = (w4 >> 44) & mask;
0507 out[31] = w4 >> 54;
0508
0509 return in;
0510 }
0511
0512 inline const uint8_t* unpack11_64(const uint8_t* in, uint64_t* out) {
0513 const uint64_t mask = 2047ULL;
0514 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0515 w0 = arrow::bit_util::FromLittleEndian(w0);
0516 in += 8;
0517 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0518 w1 = arrow::bit_util::FromLittleEndian(w1);
0519 in += 8;
0520 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0521 w2 = arrow::bit_util::FromLittleEndian(w2);
0522 in += 8;
0523 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0524 w3 = arrow::bit_util::FromLittleEndian(w3);
0525 in += 8;
0526 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0527 w4 = arrow::bit_util::FromLittleEndian(w4);
0528 in += 8;
0529 uint64_t w5 = util::SafeLoadAs<uint32_t>(in);
0530 w5 = arrow::bit_util::FromLittleEndian(w5);
0531 in += 4;
0532 out[0] = (w0)&mask;
0533 out[1] = (w0 >> 11) & mask;
0534 out[2] = (w0 >> 22) & mask;
0535 out[3] = (w0 >> 33) & mask;
0536 out[4] = (w0 >> 44) & mask;
0537 out[5] = ((w0 >> 55) | (w1 << 9)) & mask;
0538 out[6] = (w1 >> 2) & mask;
0539 out[7] = (w1 >> 13) & mask;
0540 out[8] = (w1 >> 24) & mask;
0541 out[9] = (w1 >> 35) & mask;
0542 out[10] = (w1 >> 46) & mask;
0543 out[11] = ((w1 >> 57) | (w2 << 7)) & mask;
0544 out[12] = (w2 >> 4) & mask;
0545 out[13] = (w2 >> 15) & mask;
0546 out[14] = (w2 >> 26) & mask;
0547 out[15] = (w2 >> 37) & mask;
0548 out[16] = (w2 >> 48) & mask;
0549 out[17] = ((w2 >> 59) | (w3 << 5)) & mask;
0550 out[18] = (w3 >> 6) & mask;
0551 out[19] = (w3 >> 17) & mask;
0552 out[20] = (w3 >> 28) & mask;
0553 out[21] = (w3 >> 39) & mask;
0554 out[22] = (w3 >> 50) & mask;
0555 out[23] = ((w3 >> 61) | (w4 << 3)) & mask;
0556 out[24] = (w4 >> 8) & mask;
0557 out[25] = (w4 >> 19) & mask;
0558 out[26] = (w4 >> 30) & mask;
0559 out[27] = (w4 >> 41) & mask;
0560 out[28] = (w4 >> 52) & mask;
0561 out[29] = ((w4 >> 63) | (w5 << 1)) & mask;
0562 out[30] = (w5 >> 10) & mask;
0563 out[31] = (w5 >> 21) & mask;
0564
0565 return in;
0566 }
0567
0568 inline const uint8_t* unpack12_64(const uint8_t* in, uint64_t* out) {
0569 const uint64_t mask = 4095ULL;
0570 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0571 w0 = arrow::bit_util::FromLittleEndian(w0);
0572 in += 8;
0573 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0574 w1 = arrow::bit_util::FromLittleEndian(w1);
0575 in += 8;
0576 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0577 w2 = arrow::bit_util::FromLittleEndian(w2);
0578 in += 8;
0579 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0580 w3 = arrow::bit_util::FromLittleEndian(w3);
0581 in += 8;
0582 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0583 w4 = arrow::bit_util::FromLittleEndian(w4);
0584 in += 8;
0585 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0586 w5 = arrow::bit_util::FromLittleEndian(w5);
0587 in += 8;
0588 out[0] = (w0)&mask;
0589 out[1] = (w0 >> 12) & mask;
0590 out[2] = (w0 >> 24) & mask;
0591 out[3] = (w0 >> 36) & mask;
0592 out[4] = (w0 >> 48) & mask;
0593 out[5] = ((w0 >> 60) | (w1 << 4)) & mask;
0594 out[6] = (w1 >> 8) & mask;
0595 out[7] = (w1 >> 20) & mask;
0596 out[8] = (w1 >> 32) & mask;
0597 out[9] = (w1 >> 44) & mask;
0598 out[10] = ((w1 >> 56) | (w2 << 8)) & mask;
0599 out[11] = (w2 >> 4) & mask;
0600 out[12] = (w2 >> 16) & mask;
0601 out[13] = (w2 >> 28) & mask;
0602 out[14] = (w2 >> 40) & mask;
0603 out[15] = w2 >> 52;
0604 out[16] = (w3)&mask;
0605 out[17] = (w3 >> 12) & mask;
0606 out[18] = (w3 >> 24) & mask;
0607 out[19] = (w3 >> 36) & mask;
0608 out[20] = (w3 >> 48) & mask;
0609 out[21] = ((w3 >> 60) | (w4 << 4)) & mask;
0610 out[22] = (w4 >> 8) & mask;
0611 out[23] = (w4 >> 20) & mask;
0612 out[24] = (w4 >> 32) & mask;
0613 out[25] = (w4 >> 44) & mask;
0614 out[26] = ((w4 >> 56) | (w5 << 8)) & mask;
0615 out[27] = (w5 >> 4) & mask;
0616 out[28] = (w5 >> 16) & mask;
0617 out[29] = (w5 >> 28) & mask;
0618 out[30] = (w5 >> 40) & mask;
0619 out[31] = w5 >> 52;
0620
0621 return in;
0622 }
0623
0624 inline const uint8_t* unpack13_64(const uint8_t* in, uint64_t* out) {
0625 const uint64_t mask = 8191ULL;
0626 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0627 w0 = arrow::bit_util::FromLittleEndian(w0);
0628 in += 8;
0629 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0630 w1 = arrow::bit_util::FromLittleEndian(w1);
0631 in += 8;
0632 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0633 w2 = arrow::bit_util::FromLittleEndian(w2);
0634 in += 8;
0635 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0636 w3 = arrow::bit_util::FromLittleEndian(w3);
0637 in += 8;
0638 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0639 w4 = arrow::bit_util::FromLittleEndian(w4);
0640 in += 8;
0641 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0642 w5 = arrow::bit_util::FromLittleEndian(w5);
0643 in += 8;
0644 uint64_t w6 = util::SafeLoadAs<uint32_t>(in);
0645 w6 = arrow::bit_util::FromLittleEndian(w6);
0646 in += 4;
0647 out[0] = (w0)&mask;
0648 out[1] = (w0 >> 13) & mask;
0649 out[2] = (w0 >> 26) & mask;
0650 out[3] = (w0 >> 39) & mask;
0651 out[4] = ((w0 >> 52) | (w1 << 12)) & mask;
0652 out[5] = (w1 >> 1) & mask;
0653 out[6] = (w1 >> 14) & mask;
0654 out[7] = (w1 >> 27) & mask;
0655 out[8] = (w1 >> 40) & mask;
0656 out[9] = ((w1 >> 53) | (w2 << 11)) & mask;
0657 out[10] = (w2 >> 2) & mask;
0658 out[11] = (w2 >> 15) & mask;
0659 out[12] = (w2 >> 28) & mask;
0660 out[13] = (w2 >> 41) & mask;
0661 out[14] = ((w2 >> 54) | (w3 << 10)) & mask;
0662 out[15] = (w3 >> 3) & mask;
0663 out[16] = (w3 >> 16) & mask;
0664 out[17] = (w3 >> 29) & mask;
0665 out[18] = (w3 >> 42) & mask;
0666 out[19] = ((w3 >> 55) | (w4 << 9)) & mask;
0667 out[20] = (w4 >> 4) & mask;
0668 out[21] = (w4 >> 17) & mask;
0669 out[22] = (w4 >> 30) & mask;
0670 out[23] = (w4 >> 43) & mask;
0671 out[24] = ((w4 >> 56) | (w5 << 8)) & mask;
0672 out[25] = (w5 >> 5) & mask;
0673 out[26] = (w5 >> 18) & mask;
0674 out[27] = (w5 >> 31) & mask;
0675 out[28] = (w5 >> 44) & mask;
0676 out[29] = ((w5 >> 57) | (w6 << 7)) & mask;
0677 out[30] = (w6 >> 6) & mask;
0678 out[31] = (w6 >> 19) & mask;
0679
0680 return in;
0681 }
0682
0683 inline const uint8_t* unpack14_64(const uint8_t* in, uint64_t* out) {
0684 const uint64_t mask = 16383ULL;
0685 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0686 w0 = arrow::bit_util::FromLittleEndian(w0);
0687 in += 8;
0688 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0689 w1 = arrow::bit_util::FromLittleEndian(w1);
0690 in += 8;
0691 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0692 w2 = arrow::bit_util::FromLittleEndian(w2);
0693 in += 8;
0694 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0695 w3 = arrow::bit_util::FromLittleEndian(w3);
0696 in += 8;
0697 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0698 w4 = arrow::bit_util::FromLittleEndian(w4);
0699 in += 8;
0700 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0701 w5 = arrow::bit_util::FromLittleEndian(w5);
0702 in += 8;
0703 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
0704 w6 = arrow::bit_util::FromLittleEndian(w6);
0705 in += 8;
0706 out[0] = (w0)&mask;
0707 out[1] = (w0 >> 14) & mask;
0708 out[2] = (w0 >> 28) & mask;
0709 out[3] = (w0 >> 42) & mask;
0710 out[4] = ((w0 >> 56) | (w1 << 8)) & mask;
0711 out[5] = (w1 >> 6) & mask;
0712 out[6] = (w1 >> 20) & mask;
0713 out[7] = (w1 >> 34) & mask;
0714 out[8] = (w1 >> 48) & mask;
0715 out[9] = ((w1 >> 62) | (w2 << 2)) & mask;
0716 out[10] = (w2 >> 12) & mask;
0717 out[11] = (w2 >> 26) & mask;
0718 out[12] = (w2 >> 40) & mask;
0719 out[13] = ((w2 >> 54) | (w3 << 10)) & mask;
0720 out[14] = (w3 >> 4) & mask;
0721 out[15] = (w3 >> 18) & mask;
0722 out[16] = (w3 >> 32) & mask;
0723 out[17] = (w3 >> 46) & mask;
0724 out[18] = ((w3 >> 60) | (w4 << 4)) & mask;
0725 out[19] = (w4 >> 10) & mask;
0726 out[20] = (w4 >> 24) & mask;
0727 out[21] = (w4 >> 38) & mask;
0728 out[22] = ((w4 >> 52) | (w5 << 12)) & mask;
0729 out[23] = (w5 >> 2) & mask;
0730 out[24] = (w5 >> 16) & mask;
0731 out[25] = (w5 >> 30) & mask;
0732 out[26] = (w5 >> 44) & mask;
0733 out[27] = ((w5 >> 58) | (w6 << 6)) & mask;
0734 out[28] = (w6 >> 8) & mask;
0735 out[29] = (w6 >> 22) & mask;
0736 out[30] = (w6 >> 36) & mask;
0737 out[31] = w6 >> 50;
0738
0739 return in;
0740 }
0741
0742 inline const uint8_t* unpack15_64(const uint8_t* in, uint64_t* out) {
0743 const uint64_t mask = 32767ULL;
0744 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0745 w0 = arrow::bit_util::FromLittleEndian(w0);
0746 in += 8;
0747 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0748 w1 = arrow::bit_util::FromLittleEndian(w1);
0749 in += 8;
0750 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0751 w2 = arrow::bit_util::FromLittleEndian(w2);
0752 in += 8;
0753 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0754 w3 = arrow::bit_util::FromLittleEndian(w3);
0755 in += 8;
0756 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0757 w4 = arrow::bit_util::FromLittleEndian(w4);
0758 in += 8;
0759 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0760 w5 = arrow::bit_util::FromLittleEndian(w5);
0761 in += 8;
0762 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
0763 w6 = arrow::bit_util::FromLittleEndian(w6);
0764 in += 8;
0765 uint64_t w7 = util::SafeLoadAs<uint32_t>(in);
0766 w7 = arrow::bit_util::FromLittleEndian(w7);
0767 in += 4;
0768 out[0] = (w0)&mask;
0769 out[1] = (w0 >> 15) & mask;
0770 out[2] = (w0 >> 30) & mask;
0771 out[3] = (w0 >> 45) & mask;
0772 out[4] = ((w0 >> 60) | (w1 << 4)) & mask;
0773 out[5] = (w1 >> 11) & mask;
0774 out[6] = (w1 >> 26) & mask;
0775 out[7] = (w1 >> 41) & mask;
0776 out[8] = ((w1 >> 56) | (w2 << 8)) & mask;
0777 out[9] = (w2 >> 7) & mask;
0778 out[10] = (w2 >> 22) & mask;
0779 out[11] = (w2 >> 37) & mask;
0780 out[12] = ((w2 >> 52) | (w3 << 12)) & mask;
0781 out[13] = (w3 >> 3) & mask;
0782 out[14] = (w3 >> 18) & mask;
0783 out[15] = (w3 >> 33) & mask;
0784 out[16] = (w3 >> 48) & mask;
0785 out[17] = ((w3 >> 63) | (w4 << 1)) & mask;
0786 out[18] = (w4 >> 14) & mask;
0787 out[19] = (w4 >> 29) & mask;
0788 out[20] = (w4 >> 44) & mask;
0789 out[21] = ((w4 >> 59) | (w5 << 5)) & mask;
0790 out[22] = (w5 >> 10) & mask;
0791 out[23] = (w5 >> 25) & mask;
0792 out[24] = (w5 >> 40) & mask;
0793 out[25] = ((w5 >> 55) | (w6 << 9)) & mask;
0794 out[26] = (w6 >> 6) & mask;
0795 out[27] = (w6 >> 21) & mask;
0796 out[28] = (w6 >> 36) & mask;
0797 out[29] = ((w6 >> 51) | (w7 << 13)) & mask;
0798 out[30] = (w7 >> 2) & mask;
0799 out[31] = (w7 >> 17) & mask;
0800
0801 return in;
0802 }
0803
0804 inline const uint8_t* unpack16_64(const uint8_t* in, uint64_t* out) {
0805 const uint64_t mask = 65535ULL;
0806 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0807 w0 = arrow::bit_util::FromLittleEndian(w0);
0808 in += 8;
0809 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0810 w1 = arrow::bit_util::FromLittleEndian(w1);
0811 in += 8;
0812 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0813 w2 = arrow::bit_util::FromLittleEndian(w2);
0814 in += 8;
0815 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0816 w3 = arrow::bit_util::FromLittleEndian(w3);
0817 in += 8;
0818 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0819 w4 = arrow::bit_util::FromLittleEndian(w4);
0820 in += 8;
0821 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0822 w5 = arrow::bit_util::FromLittleEndian(w5);
0823 in += 8;
0824 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
0825 w6 = arrow::bit_util::FromLittleEndian(w6);
0826 in += 8;
0827 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
0828 w7 = arrow::bit_util::FromLittleEndian(w7);
0829 in += 8;
0830 out[0] = (w0)&mask;
0831 out[1] = (w0 >> 16) & mask;
0832 out[2] = (w0 >> 32) & mask;
0833 out[3] = w0 >> 48;
0834 out[4] = (w1)&mask;
0835 out[5] = (w1 >> 16) & mask;
0836 out[6] = (w1 >> 32) & mask;
0837 out[7] = w1 >> 48;
0838 out[8] = (w2)&mask;
0839 out[9] = (w2 >> 16) & mask;
0840 out[10] = (w2 >> 32) & mask;
0841 out[11] = w2 >> 48;
0842 out[12] = (w3)&mask;
0843 out[13] = (w3 >> 16) & mask;
0844 out[14] = (w3 >> 32) & mask;
0845 out[15] = w3 >> 48;
0846 out[16] = (w4)&mask;
0847 out[17] = (w4 >> 16) & mask;
0848 out[18] = (w4 >> 32) & mask;
0849 out[19] = w4 >> 48;
0850 out[20] = (w5)&mask;
0851 out[21] = (w5 >> 16) & mask;
0852 out[22] = (w5 >> 32) & mask;
0853 out[23] = w5 >> 48;
0854 out[24] = (w6)&mask;
0855 out[25] = (w6 >> 16) & mask;
0856 out[26] = (w6 >> 32) & mask;
0857 out[27] = w6 >> 48;
0858 out[28] = (w7)&mask;
0859 out[29] = (w7 >> 16) & mask;
0860 out[30] = (w7 >> 32) & mask;
0861 out[31] = w7 >> 48;
0862
0863 return in;
0864 }
0865
0866 inline const uint8_t* unpack17_64(const uint8_t* in, uint64_t* out) {
0867 const uint64_t mask = 131071ULL;
0868 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0869 w0 = arrow::bit_util::FromLittleEndian(w0);
0870 in += 8;
0871 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0872 w1 = arrow::bit_util::FromLittleEndian(w1);
0873 in += 8;
0874 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0875 w2 = arrow::bit_util::FromLittleEndian(w2);
0876 in += 8;
0877 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0878 w3 = arrow::bit_util::FromLittleEndian(w3);
0879 in += 8;
0880 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0881 w4 = arrow::bit_util::FromLittleEndian(w4);
0882 in += 8;
0883 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0884 w5 = arrow::bit_util::FromLittleEndian(w5);
0885 in += 8;
0886 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
0887 w6 = arrow::bit_util::FromLittleEndian(w6);
0888 in += 8;
0889 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
0890 w7 = arrow::bit_util::FromLittleEndian(w7);
0891 in += 8;
0892 uint64_t w8 = util::SafeLoadAs<uint32_t>(in);
0893 w8 = arrow::bit_util::FromLittleEndian(w8);
0894 in += 4;
0895 out[0] = (w0)&mask;
0896 out[1] = (w0 >> 17) & mask;
0897 out[2] = (w0 >> 34) & mask;
0898 out[3] = ((w0 >> 51) | (w1 << 13)) & mask;
0899 out[4] = (w1 >> 4) & mask;
0900 out[5] = (w1 >> 21) & mask;
0901 out[6] = (w1 >> 38) & mask;
0902 out[7] = ((w1 >> 55) | (w2 << 9)) & mask;
0903 out[8] = (w2 >> 8) & mask;
0904 out[9] = (w2 >> 25) & mask;
0905 out[10] = (w2 >> 42) & mask;
0906 out[11] = ((w2 >> 59) | (w3 << 5)) & mask;
0907 out[12] = (w3 >> 12) & mask;
0908 out[13] = (w3 >> 29) & mask;
0909 out[14] = (w3 >> 46) & mask;
0910 out[15] = ((w3 >> 63) | (w4 << 1)) & mask;
0911 out[16] = (w4 >> 16) & mask;
0912 out[17] = (w4 >> 33) & mask;
0913 out[18] = ((w4 >> 50) | (w5 << 14)) & mask;
0914 out[19] = (w5 >> 3) & mask;
0915 out[20] = (w5 >> 20) & mask;
0916 out[21] = (w5 >> 37) & mask;
0917 out[22] = ((w5 >> 54) | (w6 << 10)) & mask;
0918 out[23] = (w6 >> 7) & mask;
0919 out[24] = (w6 >> 24) & mask;
0920 out[25] = (w6 >> 41) & mask;
0921 out[26] = ((w6 >> 58) | (w7 << 6)) & mask;
0922 out[27] = (w7 >> 11) & mask;
0923 out[28] = (w7 >> 28) & mask;
0924 out[29] = (w7 >> 45) & mask;
0925 out[30] = ((w7 >> 62) | (w8 << 2)) & mask;
0926 out[31] = (w8 >> 15) & mask;
0927
0928 return in;
0929 }
0930
0931 inline const uint8_t* unpack18_64(const uint8_t* in, uint64_t* out) {
0932 const uint64_t mask = 262143ULL;
0933 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0934 w0 = arrow::bit_util::FromLittleEndian(w0);
0935 in += 8;
0936 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
0937 w1 = arrow::bit_util::FromLittleEndian(w1);
0938 in += 8;
0939 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
0940 w2 = arrow::bit_util::FromLittleEndian(w2);
0941 in += 8;
0942 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
0943 w3 = arrow::bit_util::FromLittleEndian(w3);
0944 in += 8;
0945 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
0946 w4 = arrow::bit_util::FromLittleEndian(w4);
0947 in += 8;
0948 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
0949 w5 = arrow::bit_util::FromLittleEndian(w5);
0950 in += 8;
0951 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
0952 w6 = arrow::bit_util::FromLittleEndian(w6);
0953 in += 8;
0954 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
0955 w7 = arrow::bit_util::FromLittleEndian(w7);
0956 in += 8;
0957 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
0958 w8 = arrow::bit_util::FromLittleEndian(w8);
0959 in += 8;
0960 out[0] = (w0)&mask;
0961 out[1] = (w0 >> 18) & mask;
0962 out[2] = (w0 >> 36) & mask;
0963 out[3] = ((w0 >> 54) | (w1 << 10)) & mask;
0964 out[4] = (w1 >> 8) & mask;
0965 out[5] = (w1 >> 26) & mask;
0966 out[6] = (w1 >> 44) & mask;
0967 out[7] = ((w1 >> 62) | (w2 << 2)) & mask;
0968 out[8] = (w2 >> 16) & mask;
0969 out[9] = (w2 >> 34) & mask;
0970 out[10] = ((w2 >> 52) | (w3 << 12)) & mask;
0971 out[11] = (w3 >> 6) & mask;
0972 out[12] = (w3 >> 24) & mask;
0973 out[13] = (w3 >> 42) & mask;
0974 out[14] = ((w3 >> 60) | (w4 << 4)) & mask;
0975 out[15] = (w4 >> 14) & mask;
0976 out[16] = (w4 >> 32) & mask;
0977 out[17] = ((w4 >> 50) | (w5 << 14)) & mask;
0978 out[18] = (w5 >> 4) & mask;
0979 out[19] = (w5 >> 22) & mask;
0980 out[20] = (w5 >> 40) & mask;
0981 out[21] = ((w5 >> 58) | (w6 << 6)) & mask;
0982 out[22] = (w6 >> 12) & mask;
0983 out[23] = (w6 >> 30) & mask;
0984 out[24] = ((w6 >> 48) | (w7 << 16)) & mask;
0985 out[25] = (w7 >> 2) & mask;
0986 out[26] = (w7 >> 20) & mask;
0987 out[27] = (w7 >> 38) & mask;
0988 out[28] = ((w7 >> 56) | (w8 << 8)) & mask;
0989 out[29] = (w8 >> 10) & mask;
0990 out[30] = (w8 >> 28) & mask;
0991 out[31] = w8 >> 46;
0992
0993 return in;
0994 }
0995
0996 inline const uint8_t* unpack19_64(const uint8_t* in, uint64_t* out) {
0997 const uint64_t mask = 524287ULL;
0998 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
0999 w0 = arrow::bit_util::FromLittleEndian(w0);
1000 in += 8;
1001 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1002 w1 = arrow::bit_util::FromLittleEndian(w1);
1003 in += 8;
1004 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1005 w2 = arrow::bit_util::FromLittleEndian(w2);
1006 in += 8;
1007 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1008 w3 = arrow::bit_util::FromLittleEndian(w3);
1009 in += 8;
1010 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1011 w4 = arrow::bit_util::FromLittleEndian(w4);
1012 in += 8;
1013 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1014 w5 = arrow::bit_util::FromLittleEndian(w5);
1015 in += 8;
1016 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1017 w6 = arrow::bit_util::FromLittleEndian(w6);
1018 in += 8;
1019 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1020 w7 = arrow::bit_util::FromLittleEndian(w7);
1021 in += 8;
1022 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1023 w8 = arrow::bit_util::FromLittleEndian(w8);
1024 in += 8;
1025 uint64_t w9 = util::SafeLoadAs<uint32_t>(in);
1026 w9 = arrow::bit_util::FromLittleEndian(w9);
1027 in += 4;
1028 out[0] = (w0)&mask;
1029 out[1] = (w0 >> 19) & mask;
1030 out[2] = (w0 >> 38) & mask;
1031 out[3] = ((w0 >> 57) | (w1 << 7)) & mask;
1032 out[4] = (w1 >> 12) & mask;
1033 out[5] = (w1 >> 31) & mask;
1034 out[6] = ((w1 >> 50) | (w2 << 14)) & mask;
1035 out[7] = (w2 >> 5) & mask;
1036 out[8] = (w2 >> 24) & mask;
1037 out[9] = (w2 >> 43) & mask;
1038 out[10] = ((w2 >> 62) | (w3 << 2)) & mask;
1039 out[11] = (w3 >> 17) & mask;
1040 out[12] = (w3 >> 36) & mask;
1041 out[13] = ((w3 >> 55) | (w4 << 9)) & mask;
1042 out[14] = (w4 >> 10) & mask;
1043 out[15] = (w4 >> 29) & mask;
1044 out[16] = ((w4 >> 48) | (w5 << 16)) & mask;
1045 out[17] = (w5 >> 3) & mask;
1046 out[18] = (w5 >> 22) & mask;
1047 out[19] = (w5 >> 41) & mask;
1048 out[20] = ((w5 >> 60) | (w6 << 4)) & mask;
1049 out[21] = (w6 >> 15) & mask;
1050 out[22] = (w6 >> 34) & mask;
1051 out[23] = ((w6 >> 53) | (w7 << 11)) & mask;
1052 out[24] = (w7 >> 8) & mask;
1053 out[25] = (w7 >> 27) & mask;
1054 out[26] = ((w7 >> 46) | (w8 << 18)) & mask;
1055 out[27] = (w8 >> 1) & mask;
1056 out[28] = (w8 >> 20) & mask;
1057 out[29] = (w8 >> 39) & mask;
1058 out[30] = ((w8 >> 58) | (w9 << 6)) & mask;
1059 out[31] = (w9 >> 13) & mask;
1060
1061 return in;
1062 }
1063
1064 inline const uint8_t* unpack20_64(const uint8_t* in, uint64_t* out) {
1065 const uint64_t mask = 1048575ULL;
1066 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1067 w0 = arrow::bit_util::FromLittleEndian(w0);
1068 in += 8;
1069 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1070 w1 = arrow::bit_util::FromLittleEndian(w1);
1071 in += 8;
1072 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1073 w2 = arrow::bit_util::FromLittleEndian(w2);
1074 in += 8;
1075 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1076 w3 = arrow::bit_util::FromLittleEndian(w3);
1077 in += 8;
1078 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1079 w4 = arrow::bit_util::FromLittleEndian(w4);
1080 in += 8;
1081 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1082 w5 = arrow::bit_util::FromLittleEndian(w5);
1083 in += 8;
1084 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1085 w6 = arrow::bit_util::FromLittleEndian(w6);
1086 in += 8;
1087 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1088 w7 = arrow::bit_util::FromLittleEndian(w7);
1089 in += 8;
1090 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1091 w8 = arrow::bit_util::FromLittleEndian(w8);
1092 in += 8;
1093 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1094 w9 = arrow::bit_util::FromLittleEndian(w9);
1095 in += 8;
1096 out[0] = (w0)&mask;
1097 out[1] = (w0 >> 20) & mask;
1098 out[2] = (w0 >> 40) & mask;
1099 out[3] = ((w0 >> 60) | (w1 << 4)) & mask;
1100 out[4] = (w1 >> 16) & mask;
1101 out[5] = (w1 >> 36) & mask;
1102 out[6] = ((w1 >> 56) | (w2 << 8)) & mask;
1103 out[7] = (w2 >> 12) & mask;
1104 out[8] = (w2 >> 32) & mask;
1105 out[9] = ((w2 >> 52) | (w3 << 12)) & mask;
1106 out[10] = (w3 >> 8) & mask;
1107 out[11] = (w3 >> 28) & mask;
1108 out[12] = ((w3 >> 48) | (w4 << 16)) & mask;
1109 out[13] = (w4 >> 4) & mask;
1110 out[14] = (w4 >> 24) & mask;
1111 out[15] = w4 >> 44;
1112 out[16] = (w5)&mask;
1113 out[17] = (w5 >> 20) & mask;
1114 out[18] = (w5 >> 40) & mask;
1115 out[19] = ((w5 >> 60) | (w6 << 4)) & mask;
1116 out[20] = (w6 >> 16) & mask;
1117 out[21] = (w6 >> 36) & mask;
1118 out[22] = ((w6 >> 56) | (w7 << 8)) & mask;
1119 out[23] = (w7 >> 12) & mask;
1120 out[24] = (w7 >> 32) & mask;
1121 out[25] = ((w7 >> 52) | (w8 << 12)) & mask;
1122 out[26] = (w8 >> 8) & mask;
1123 out[27] = (w8 >> 28) & mask;
1124 out[28] = ((w8 >> 48) | (w9 << 16)) & mask;
1125 out[29] = (w9 >> 4) & mask;
1126 out[30] = (w9 >> 24) & mask;
1127 out[31] = w9 >> 44;
1128
1129 return in;
1130 }
1131
1132 inline const uint8_t* unpack21_64(const uint8_t* in, uint64_t* out) {
1133 const uint64_t mask = 2097151ULL;
1134 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1135 w0 = arrow::bit_util::FromLittleEndian(w0);
1136 in += 8;
1137 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1138 w1 = arrow::bit_util::FromLittleEndian(w1);
1139 in += 8;
1140 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1141 w2 = arrow::bit_util::FromLittleEndian(w2);
1142 in += 8;
1143 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1144 w3 = arrow::bit_util::FromLittleEndian(w3);
1145 in += 8;
1146 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1147 w4 = arrow::bit_util::FromLittleEndian(w4);
1148 in += 8;
1149 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1150 w5 = arrow::bit_util::FromLittleEndian(w5);
1151 in += 8;
1152 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1153 w6 = arrow::bit_util::FromLittleEndian(w6);
1154 in += 8;
1155 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1156 w7 = arrow::bit_util::FromLittleEndian(w7);
1157 in += 8;
1158 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1159 w8 = arrow::bit_util::FromLittleEndian(w8);
1160 in += 8;
1161 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1162 w9 = arrow::bit_util::FromLittleEndian(w9);
1163 in += 8;
1164 uint64_t w10 = util::SafeLoadAs<uint32_t>(in);
1165 w10 = arrow::bit_util::FromLittleEndian(w10);
1166 in += 4;
1167 out[0] = (w0)&mask;
1168 out[1] = (w0 >> 21) & mask;
1169 out[2] = (w0 >> 42) & mask;
1170 out[3] = ((w0 >> 63) | (w1 << 1)) & mask;
1171 out[4] = (w1 >> 20) & mask;
1172 out[5] = (w1 >> 41) & mask;
1173 out[6] = ((w1 >> 62) | (w2 << 2)) & mask;
1174 out[7] = (w2 >> 19) & mask;
1175 out[8] = (w2 >> 40) & mask;
1176 out[9] = ((w2 >> 61) | (w3 << 3)) & mask;
1177 out[10] = (w3 >> 18) & mask;
1178 out[11] = (w3 >> 39) & mask;
1179 out[12] = ((w3 >> 60) | (w4 << 4)) & mask;
1180 out[13] = (w4 >> 17) & mask;
1181 out[14] = (w4 >> 38) & mask;
1182 out[15] = ((w4 >> 59) | (w5 << 5)) & mask;
1183 out[16] = (w5 >> 16) & mask;
1184 out[17] = (w5 >> 37) & mask;
1185 out[18] = ((w5 >> 58) | (w6 << 6)) & mask;
1186 out[19] = (w6 >> 15) & mask;
1187 out[20] = (w6 >> 36) & mask;
1188 out[21] = ((w6 >> 57) | (w7 << 7)) & mask;
1189 out[22] = (w7 >> 14) & mask;
1190 out[23] = (w7 >> 35) & mask;
1191 out[24] = ((w7 >> 56) | (w8 << 8)) & mask;
1192 out[25] = (w8 >> 13) & mask;
1193 out[26] = (w8 >> 34) & mask;
1194 out[27] = ((w8 >> 55) | (w9 << 9)) & mask;
1195 out[28] = (w9 >> 12) & mask;
1196 out[29] = (w9 >> 33) & mask;
1197 out[30] = ((w9 >> 54) | (w10 << 10)) & mask;
1198 out[31] = (w10 >> 11) & mask;
1199
1200 return in;
1201 }
1202
1203 inline const uint8_t* unpack22_64(const uint8_t* in, uint64_t* out) {
1204 const uint64_t mask = 4194303ULL;
1205 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1206 w0 = arrow::bit_util::FromLittleEndian(w0);
1207 in += 8;
1208 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1209 w1 = arrow::bit_util::FromLittleEndian(w1);
1210 in += 8;
1211 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1212 w2 = arrow::bit_util::FromLittleEndian(w2);
1213 in += 8;
1214 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1215 w3 = arrow::bit_util::FromLittleEndian(w3);
1216 in += 8;
1217 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1218 w4 = arrow::bit_util::FromLittleEndian(w4);
1219 in += 8;
1220 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1221 w5 = arrow::bit_util::FromLittleEndian(w5);
1222 in += 8;
1223 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1224 w6 = arrow::bit_util::FromLittleEndian(w6);
1225 in += 8;
1226 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1227 w7 = arrow::bit_util::FromLittleEndian(w7);
1228 in += 8;
1229 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1230 w8 = arrow::bit_util::FromLittleEndian(w8);
1231 in += 8;
1232 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1233 w9 = arrow::bit_util::FromLittleEndian(w9);
1234 in += 8;
1235 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1236 w10 = arrow::bit_util::FromLittleEndian(w10);
1237 in += 8;
1238 out[0] = (w0)&mask;
1239 out[1] = (w0 >> 22) & mask;
1240 out[2] = ((w0 >> 44) | (w1 << 20)) & mask;
1241 out[3] = (w1 >> 2) & mask;
1242 out[4] = (w1 >> 24) & mask;
1243 out[5] = ((w1 >> 46) | (w2 << 18)) & mask;
1244 out[6] = (w2 >> 4) & mask;
1245 out[7] = (w2 >> 26) & mask;
1246 out[8] = ((w2 >> 48) | (w3 << 16)) & mask;
1247 out[9] = (w3 >> 6) & mask;
1248 out[10] = (w3 >> 28) & mask;
1249 out[11] = ((w3 >> 50) | (w4 << 14)) & mask;
1250 out[12] = (w4 >> 8) & mask;
1251 out[13] = (w4 >> 30) & mask;
1252 out[14] = ((w4 >> 52) | (w5 << 12)) & mask;
1253 out[15] = (w5 >> 10) & mask;
1254 out[16] = (w5 >> 32) & mask;
1255 out[17] = ((w5 >> 54) | (w6 << 10)) & mask;
1256 out[18] = (w6 >> 12) & mask;
1257 out[19] = (w6 >> 34) & mask;
1258 out[20] = ((w6 >> 56) | (w7 << 8)) & mask;
1259 out[21] = (w7 >> 14) & mask;
1260 out[22] = (w7 >> 36) & mask;
1261 out[23] = ((w7 >> 58) | (w8 << 6)) & mask;
1262 out[24] = (w8 >> 16) & mask;
1263 out[25] = (w8 >> 38) & mask;
1264 out[26] = ((w8 >> 60) | (w9 << 4)) & mask;
1265 out[27] = (w9 >> 18) & mask;
1266 out[28] = (w9 >> 40) & mask;
1267 out[29] = ((w9 >> 62) | (w10 << 2)) & mask;
1268 out[30] = (w10 >> 20) & mask;
1269 out[31] = w10 >> 42;
1270
1271 return in;
1272 }
1273
1274 inline const uint8_t* unpack23_64(const uint8_t* in, uint64_t* out) {
1275 const uint64_t mask = 8388607ULL;
1276 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1277 w0 = arrow::bit_util::FromLittleEndian(w0);
1278 in += 8;
1279 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1280 w1 = arrow::bit_util::FromLittleEndian(w1);
1281 in += 8;
1282 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1283 w2 = arrow::bit_util::FromLittleEndian(w2);
1284 in += 8;
1285 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1286 w3 = arrow::bit_util::FromLittleEndian(w3);
1287 in += 8;
1288 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1289 w4 = arrow::bit_util::FromLittleEndian(w4);
1290 in += 8;
1291 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1292 w5 = arrow::bit_util::FromLittleEndian(w5);
1293 in += 8;
1294 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1295 w6 = arrow::bit_util::FromLittleEndian(w6);
1296 in += 8;
1297 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1298 w7 = arrow::bit_util::FromLittleEndian(w7);
1299 in += 8;
1300 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1301 w8 = arrow::bit_util::FromLittleEndian(w8);
1302 in += 8;
1303 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1304 w9 = arrow::bit_util::FromLittleEndian(w9);
1305 in += 8;
1306 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1307 w10 = arrow::bit_util::FromLittleEndian(w10);
1308 in += 8;
1309 uint64_t w11 = util::SafeLoadAs<uint32_t>(in);
1310 w11 = arrow::bit_util::FromLittleEndian(w11);
1311 in += 4;
1312 out[0] = (w0)&mask;
1313 out[1] = (w0 >> 23) & mask;
1314 out[2] = ((w0 >> 46) | (w1 << 18)) & mask;
1315 out[3] = (w1 >> 5) & mask;
1316 out[4] = (w1 >> 28) & mask;
1317 out[5] = ((w1 >> 51) | (w2 << 13)) & mask;
1318 out[6] = (w2 >> 10) & mask;
1319 out[7] = (w2 >> 33) & mask;
1320 out[8] = ((w2 >> 56) | (w3 << 8)) & mask;
1321 out[9] = (w3 >> 15) & mask;
1322 out[10] = (w3 >> 38) & mask;
1323 out[11] = ((w3 >> 61) | (w4 << 3)) & mask;
1324 out[12] = (w4 >> 20) & mask;
1325 out[13] = ((w4 >> 43) | (w5 << 21)) & mask;
1326 out[14] = (w5 >> 2) & mask;
1327 out[15] = (w5 >> 25) & mask;
1328 out[16] = ((w5 >> 48) | (w6 << 16)) & mask;
1329 out[17] = (w6 >> 7) & mask;
1330 out[18] = (w6 >> 30) & mask;
1331 out[19] = ((w6 >> 53) | (w7 << 11)) & mask;
1332 out[20] = (w7 >> 12) & mask;
1333 out[21] = (w7 >> 35) & mask;
1334 out[22] = ((w7 >> 58) | (w8 << 6)) & mask;
1335 out[23] = (w8 >> 17) & mask;
1336 out[24] = (w8 >> 40) & mask;
1337 out[25] = ((w8 >> 63) | (w9 << 1)) & mask;
1338 out[26] = (w9 >> 22) & mask;
1339 out[27] = ((w9 >> 45) | (w10 << 19)) & mask;
1340 out[28] = (w10 >> 4) & mask;
1341 out[29] = (w10 >> 27) & mask;
1342 out[30] = ((w10 >> 50) | (w11 << 14)) & mask;
1343 out[31] = (w11 >> 9) & mask;
1344
1345 return in;
1346 }
1347
1348 inline const uint8_t* unpack24_64(const uint8_t* in, uint64_t* out) {
1349 const uint64_t mask = 16777215ULL;
1350 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1351 w0 = arrow::bit_util::FromLittleEndian(w0);
1352 in += 8;
1353 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1354 w1 = arrow::bit_util::FromLittleEndian(w1);
1355 in += 8;
1356 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1357 w2 = arrow::bit_util::FromLittleEndian(w2);
1358 in += 8;
1359 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1360 w3 = arrow::bit_util::FromLittleEndian(w3);
1361 in += 8;
1362 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1363 w4 = arrow::bit_util::FromLittleEndian(w4);
1364 in += 8;
1365 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1366 w5 = arrow::bit_util::FromLittleEndian(w5);
1367 in += 8;
1368 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1369 w6 = arrow::bit_util::FromLittleEndian(w6);
1370 in += 8;
1371 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1372 w7 = arrow::bit_util::FromLittleEndian(w7);
1373 in += 8;
1374 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1375 w8 = arrow::bit_util::FromLittleEndian(w8);
1376 in += 8;
1377 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1378 w9 = arrow::bit_util::FromLittleEndian(w9);
1379 in += 8;
1380 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1381 w10 = arrow::bit_util::FromLittleEndian(w10);
1382 in += 8;
1383 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1384 w11 = arrow::bit_util::FromLittleEndian(w11);
1385 in += 8;
1386 out[0] = (w0)&mask;
1387 out[1] = (w0 >> 24) & mask;
1388 out[2] = ((w0 >> 48) | (w1 << 16)) & mask;
1389 out[3] = (w1 >> 8) & mask;
1390 out[4] = (w1 >> 32) & mask;
1391 out[5] = ((w1 >> 56) | (w2 << 8)) & mask;
1392 out[6] = (w2 >> 16) & mask;
1393 out[7] = w2 >> 40;
1394 out[8] = (w3)&mask;
1395 out[9] = (w3 >> 24) & mask;
1396 out[10] = ((w3 >> 48) | (w4 << 16)) & mask;
1397 out[11] = (w4 >> 8) & mask;
1398 out[12] = (w4 >> 32) & mask;
1399 out[13] = ((w4 >> 56) | (w5 << 8)) & mask;
1400 out[14] = (w5 >> 16) & mask;
1401 out[15] = w5 >> 40;
1402 out[16] = (w6)&mask;
1403 out[17] = (w6 >> 24) & mask;
1404 out[18] = ((w6 >> 48) | (w7 << 16)) & mask;
1405 out[19] = (w7 >> 8) & mask;
1406 out[20] = (w7 >> 32) & mask;
1407 out[21] = ((w7 >> 56) | (w8 << 8)) & mask;
1408 out[22] = (w8 >> 16) & mask;
1409 out[23] = w8 >> 40;
1410 out[24] = (w9)&mask;
1411 out[25] = (w9 >> 24) & mask;
1412 out[26] = ((w9 >> 48) | (w10 << 16)) & mask;
1413 out[27] = (w10 >> 8) & mask;
1414 out[28] = (w10 >> 32) & mask;
1415 out[29] = ((w10 >> 56) | (w11 << 8)) & mask;
1416 out[30] = (w11 >> 16) & mask;
1417 out[31] = w11 >> 40;
1418
1419 return in;
1420 }
1421
1422 inline const uint8_t* unpack25_64(const uint8_t* in, uint64_t* out) {
1423 const uint64_t mask = 33554431ULL;
1424 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1425 w0 = arrow::bit_util::FromLittleEndian(w0);
1426 in += 8;
1427 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1428 w1 = arrow::bit_util::FromLittleEndian(w1);
1429 in += 8;
1430 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1431 w2 = arrow::bit_util::FromLittleEndian(w2);
1432 in += 8;
1433 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1434 w3 = arrow::bit_util::FromLittleEndian(w3);
1435 in += 8;
1436 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1437 w4 = arrow::bit_util::FromLittleEndian(w4);
1438 in += 8;
1439 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1440 w5 = arrow::bit_util::FromLittleEndian(w5);
1441 in += 8;
1442 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1443 w6 = arrow::bit_util::FromLittleEndian(w6);
1444 in += 8;
1445 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1446 w7 = arrow::bit_util::FromLittleEndian(w7);
1447 in += 8;
1448 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1449 w8 = arrow::bit_util::FromLittleEndian(w8);
1450 in += 8;
1451 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1452 w9 = arrow::bit_util::FromLittleEndian(w9);
1453 in += 8;
1454 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1455 w10 = arrow::bit_util::FromLittleEndian(w10);
1456 in += 8;
1457 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1458 w11 = arrow::bit_util::FromLittleEndian(w11);
1459 in += 8;
1460 uint64_t w12 = util::SafeLoadAs<uint32_t>(in);
1461 w12 = arrow::bit_util::FromLittleEndian(w12);
1462 in += 4;
1463 out[0] = (w0)&mask;
1464 out[1] = (w0 >> 25) & mask;
1465 out[2] = ((w0 >> 50) | (w1 << 14)) & mask;
1466 out[3] = (w1 >> 11) & mask;
1467 out[4] = (w1 >> 36) & mask;
1468 out[5] = ((w1 >> 61) | (w2 << 3)) & mask;
1469 out[6] = (w2 >> 22) & mask;
1470 out[7] = ((w2 >> 47) | (w3 << 17)) & mask;
1471 out[8] = (w3 >> 8) & mask;
1472 out[9] = (w3 >> 33) & mask;
1473 out[10] = ((w3 >> 58) | (w4 << 6)) & mask;
1474 out[11] = (w4 >> 19) & mask;
1475 out[12] = ((w4 >> 44) | (w5 << 20)) & mask;
1476 out[13] = (w5 >> 5) & mask;
1477 out[14] = (w5 >> 30) & mask;
1478 out[15] = ((w5 >> 55) | (w6 << 9)) & mask;
1479 out[16] = (w6 >> 16) & mask;
1480 out[17] = ((w6 >> 41) | (w7 << 23)) & mask;
1481 out[18] = (w7 >> 2) & mask;
1482 out[19] = (w7 >> 27) & mask;
1483 out[20] = ((w7 >> 52) | (w8 << 12)) & mask;
1484 out[21] = (w8 >> 13) & mask;
1485 out[22] = (w8 >> 38) & mask;
1486 out[23] = ((w8 >> 63) | (w9 << 1)) & mask;
1487 out[24] = (w9 >> 24) & mask;
1488 out[25] = ((w9 >> 49) | (w10 << 15)) & mask;
1489 out[26] = (w10 >> 10) & mask;
1490 out[27] = (w10 >> 35) & mask;
1491 out[28] = ((w10 >> 60) | (w11 << 4)) & mask;
1492 out[29] = (w11 >> 21) & mask;
1493 out[30] = ((w11 >> 46) | (w12 << 18)) & mask;
1494 out[31] = (w12 >> 7) & mask;
1495
1496 return in;
1497 }
1498
1499 inline const uint8_t* unpack26_64(const uint8_t* in, uint64_t* out) {
1500 const uint64_t mask = 67108863ULL;
1501 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1502 w0 = arrow::bit_util::FromLittleEndian(w0);
1503 in += 8;
1504 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1505 w1 = arrow::bit_util::FromLittleEndian(w1);
1506 in += 8;
1507 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1508 w2 = arrow::bit_util::FromLittleEndian(w2);
1509 in += 8;
1510 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1511 w3 = arrow::bit_util::FromLittleEndian(w3);
1512 in += 8;
1513 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1514 w4 = arrow::bit_util::FromLittleEndian(w4);
1515 in += 8;
1516 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1517 w5 = arrow::bit_util::FromLittleEndian(w5);
1518 in += 8;
1519 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1520 w6 = arrow::bit_util::FromLittleEndian(w6);
1521 in += 8;
1522 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1523 w7 = arrow::bit_util::FromLittleEndian(w7);
1524 in += 8;
1525 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1526 w8 = arrow::bit_util::FromLittleEndian(w8);
1527 in += 8;
1528 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1529 w9 = arrow::bit_util::FromLittleEndian(w9);
1530 in += 8;
1531 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1532 w10 = arrow::bit_util::FromLittleEndian(w10);
1533 in += 8;
1534 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1535 w11 = arrow::bit_util::FromLittleEndian(w11);
1536 in += 8;
1537 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1538 w12 = arrow::bit_util::FromLittleEndian(w12);
1539 in += 8;
1540 out[0] = (w0)&mask;
1541 out[1] = (w0 >> 26) & mask;
1542 out[2] = ((w0 >> 52) | (w1 << 12)) & mask;
1543 out[3] = (w1 >> 14) & mask;
1544 out[4] = ((w1 >> 40) | (w2 << 24)) & mask;
1545 out[5] = (w2 >> 2) & mask;
1546 out[6] = (w2 >> 28) & mask;
1547 out[7] = ((w2 >> 54) | (w3 << 10)) & mask;
1548 out[8] = (w3 >> 16) & mask;
1549 out[9] = ((w3 >> 42) | (w4 << 22)) & mask;
1550 out[10] = (w4 >> 4) & mask;
1551 out[11] = (w4 >> 30) & mask;
1552 out[12] = ((w4 >> 56) | (w5 << 8)) & mask;
1553 out[13] = (w5 >> 18) & mask;
1554 out[14] = ((w5 >> 44) | (w6 << 20)) & mask;
1555 out[15] = (w6 >> 6) & mask;
1556 out[16] = (w6 >> 32) & mask;
1557 out[17] = ((w6 >> 58) | (w7 << 6)) & mask;
1558 out[18] = (w7 >> 20) & mask;
1559 out[19] = ((w7 >> 46) | (w8 << 18)) & mask;
1560 out[20] = (w8 >> 8) & mask;
1561 out[21] = (w8 >> 34) & mask;
1562 out[22] = ((w8 >> 60) | (w9 << 4)) & mask;
1563 out[23] = (w9 >> 22) & mask;
1564 out[24] = ((w9 >> 48) | (w10 << 16)) & mask;
1565 out[25] = (w10 >> 10) & mask;
1566 out[26] = (w10 >> 36) & mask;
1567 out[27] = ((w10 >> 62) | (w11 << 2)) & mask;
1568 out[28] = (w11 >> 24) & mask;
1569 out[29] = ((w11 >> 50) | (w12 << 14)) & mask;
1570 out[30] = (w12 >> 12) & mask;
1571 out[31] = w12 >> 38;
1572
1573 return in;
1574 }
1575
1576 inline const uint8_t* unpack27_64(const uint8_t* in, uint64_t* out) {
1577 const uint64_t mask = 134217727ULL;
1578 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1579 w0 = arrow::bit_util::FromLittleEndian(w0);
1580 in += 8;
1581 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1582 w1 = arrow::bit_util::FromLittleEndian(w1);
1583 in += 8;
1584 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1585 w2 = arrow::bit_util::FromLittleEndian(w2);
1586 in += 8;
1587 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1588 w3 = arrow::bit_util::FromLittleEndian(w3);
1589 in += 8;
1590 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1591 w4 = arrow::bit_util::FromLittleEndian(w4);
1592 in += 8;
1593 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1594 w5 = arrow::bit_util::FromLittleEndian(w5);
1595 in += 8;
1596 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1597 w6 = arrow::bit_util::FromLittleEndian(w6);
1598 in += 8;
1599 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1600 w7 = arrow::bit_util::FromLittleEndian(w7);
1601 in += 8;
1602 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1603 w8 = arrow::bit_util::FromLittleEndian(w8);
1604 in += 8;
1605 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1606 w9 = arrow::bit_util::FromLittleEndian(w9);
1607 in += 8;
1608 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1609 w10 = arrow::bit_util::FromLittleEndian(w10);
1610 in += 8;
1611 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1612 w11 = arrow::bit_util::FromLittleEndian(w11);
1613 in += 8;
1614 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1615 w12 = arrow::bit_util::FromLittleEndian(w12);
1616 in += 8;
1617 uint64_t w13 = util::SafeLoadAs<uint32_t>(in);
1618 w13 = arrow::bit_util::FromLittleEndian(w13);
1619 in += 4;
1620 out[0] = (w0)&mask;
1621 out[1] = (w0 >> 27) & mask;
1622 out[2] = ((w0 >> 54) | (w1 << 10)) & mask;
1623 out[3] = (w1 >> 17) & mask;
1624 out[4] = ((w1 >> 44) | (w2 << 20)) & mask;
1625 out[5] = (w2 >> 7) & mask;
1626 out[6] = (w2 >> 34) & mask;
1627 out[7] = ((w2 >> 61) | (w3 << 3)) & mask;
1628 out[8] = (w3 >> 24) & mask;
1629 out[9] = ((w3 >> 51) | (w4 << 13)) & mask;
1630 out[10] = (w4 >> 14) & mask;
1631 out[11] = ((w4 >> 41) | (w5 << 23)) & mask;
1632 out[12] = (w5 >> 4) & mask;
1633 out[13] = (w5 >> 31) & mask;
1634 out[14] = ((w5 >> 58) | (w6 << 6)) & mask;
1635 out[15] = (w6 >> 21) & mask;
1636 out[16] = ((w6 >> 48) | (w7 << 16)) & mask;
1637 out[17] = (w7 >> 11) & mask;
1638 out[18] = ((w7 >> 38) | (w8 << 26)) & mask;
1639 out[19] = (w8 >> 1) & mask;
1640 out[20] = (w8 >> 28) & mask;
1641 out[21] = ((w8 >> 55) | (w9 << 9)) & mask;
1642 out[22] = (w9 >> 18) & mask;
1643 out[23] = ((w9 >> 45) | (w10 << 19)) & mask;
1644 out[24] = (w10 >> 8) & mask;
1645 out[25] = (w10 >> 35) & mask;
1646 out[26] = ((w10 >> 62) | (w11 << 2)) & mask;
1647 out[27] = (w11 >> 25) & mask;
1648 out[28] = ((w11 >> 52) | (w12 << 12)) & mask;
1649 out[29] = (w12 >> 15) & mask;
1650 out[30] = ((w12 >> 42) | (w13 << 22)) & mask;
1651 out[31] = (w13 >> 5) & mask;
1652
1653 return in;
1654 }
1655
1656 inline const uint8_t* unpack28_64(const uint8_t* in, uint64_t* out) {
1657 const uint64_t mask = 268435455ULL;
1658 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1659 w0 = arrow::bit_util::FromLittleEndian(w0);
1660 in += 8;
1661 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1662 w1 = arrow::bit_util::FromLittleEndian(w1);
1663 in += 8;
1664 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1665 w2 = arrow::bit_util::FromLittleEndian(w2);
1666 in += 8;
1667 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1668 w3 = arrow::bit_util::FromLittleEndian(w3);
1669 in += 8;
1670 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1671 w4 = arrow::bit_util::FromLittleEndian(w4);
1672 in += 8;
1673 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1674 w5 = arrow::bit_util::FromLittleEndian(w5);
1675 in += 8;
1676 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1677 w6 = arrow::bit_util::FromLittleEndian(w6);
1678 in += 8;
1679 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1680 w7 = arrow::bit_util::FromLittleEndian(w7);
1681 in += 8;
1682 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1683 w8 = arrow::bit_util::FromLittleEndian(w8);
1684 in += 8;
1685 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1686 w9 = arrow::bit_util::FromLittleEndian(w9);
1687 in += 8;
1688 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1689 w10 = arrow::bit_util::FromLittleEndian(w10);
1690 in += 8;
1691 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1692 w11 = arrow::bit_util::FromLittleEndian(w11);
1693 in += 8;
1694 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1695 w12 = arrow::bit_util::FromLittleEndian(w12);
1696 in += 8;
1697 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
1698 w13 = arrow::bit_util::FromLittleEndian(w13);
1699 in += 8;
1700 out[0] = (w0)&mask;
1701 out[1] = (w0 >> 28) & mask;
1702 out[2] = ((w0 >> 56) | (w1 << 8)) & mask;
1703 out[3] = (w1 >> 20) & mask;
1704 out[4] = ((w1 >> 48) | (w2 << 16)) & mask;
1705 out[5] = (w2 >> 12) & mask;
1706 out[6] = ((w2 >> 40) | (w3 << 24)) & mask;
1707 out[7] = (w3 >> 4) & mask;
1708 out[8] = (w3 >> 32) & mask;
1709 out[9] = ((w3 >> 60) | (w4 << 4)) & mask;
1710 out[10] = (w4 >> 24) & mask;
1711 out[11] = ((w4 >> 52) | (w5 << 12)) & mask;
1712 out[12] = (w5 >> 16) & mask;
1713 out[13] = ((w5 >> 44) | (w6 << 20)) & mask;
1714 out[14] = (w6 >> 8) & mask;
1715 out[15] = w6 >> 36;
1716 out[16] = (w7)&mask;
1717 out[17] = (w7 >> 28) & mask;
1718 out[18] = ((w7 >> 56) | (w8 << 8)) & mask;
1719 out[19] = (w8 >> 20) & mask;
1720 out[20] = ((w8 >> 48) | (w9 << 16)) & mask;
1721 out[21] = (w9 >> 12) & mask;
1722 out[22] = ((w9 >> 40) | (w10 << 24)) & mask;
1723 out[23] = (w10 >> 4) & mask;
1724 out[24] = (w10 >> 32) & mask;
1725 out[25] = ((w10 >> 60) | (w11 << 4)) & mask;
1726 out[26] = (w11 >> 24) & mask;
1727 out[27] = ((w11 >> 52) | (w12 << 12)) & mask;
1728 out[28] = (w12 >> 16) & mask;
1729 out[29] = ((w12 >> 44) | (w13 << 20)) & mask;
1730 out[30] = (w13 >> 8) & mask;
1731 out[31] = w13 >> 36;
1732
1733 return in;
1734 }
1735
1736 inline const uint8_t* unpack29_64(const uint8_t* in, uint64_t* out) {
1737 const uint64_t mask = 536870911ULL;
1738 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1739 w0 = arrow::bit_util::FromLittleEndian(w0);
1740 in += 8;
1741 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1742 w1 = arrow::bit_util::FromLittleEndian(w1);
1743 in += 8;
1744 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1745 w2 = arrow::bit_util::FromLittleEndian(w2);
1746 in += 8;
1747 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1748 w3 = arrow::bit_util::FromLittleEndian(w3);
1749 in += 8;
1750 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1751 w4 = arrow::bit_util::FromLittleEndian(w4);
1752 in += 8;
1753 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1754 w5 = arrow::bit_util::FromLittleEndian(w5);
1755 in += 8;
1756 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1757 w6 = arrow::bit_util::FromLittleEndian(w6);
1758 in += 8;
1759 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1760 w7 = arrow::bit_util::FromLittleEndian(w7);
1761 in += 8;
1762 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1763 w8 = arrow::bit_util::FromLittleEndian(w8);
1764 in += 8;
1765 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1766 w9 = arrow::bit_util::FromLittleEndian(w9);
1767 in += 8;
1768 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1769 w10 = arrow::bit_util::FromLittleEndian(w10);
1770 in += 8;
1771 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1772 w11 = arrow::bit_util::FromLittleEndian(w11);
1773 in += 8;
1774 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1775 w12 = arrow::bit_util::FromLittleEndian(w12);
1776 in += 8;
1777 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
1778 w13 = arrow::bit_util::FromLittleEndian(w13);
1779 in += 8;
1780 uint64_t w14 = util::SafeLoadAs<uint32_t>(in);
1781 w14 = arrow::bit_util::FromLittleEndian(w14);
1782 in += 4;
1783 out[0] = (w0)&mask;
1784 out[1] = (w0 >> 29) & mask;
1785 out[2] = ((w0 >> 58) | (w1 << 6)) & mask;
1786 out[3] = (w1 >> 23) & mask;
1787 out[4] = ((w1 >> 52) | (w2 << 12)) & mask;
1788 out[5] = (w2 >> 17) & mask;
1789 out[6] = ((w2 >> 46) | (w3 << 18)) & mask;
1790 out[7] = (w3 >> 11) & mask;
1791 out[8] = ((w3 >> 40) | (w4 << 24)) & mask;
1792 out[9] = (w4 >> 5) & mask;
1793 out[10] = (w4 >> 34) & mask;
1794 out[11] = ((w4 >> 63) | (w5 << 1)) & mask;
1795 out[12] = (w5 >> 28) & mask;
1796 out[13] = ((w5 >> 57) | (w6 << 7)) & mask;
1797 out[14] = (w6 >> 22) & mask;
1798 out[15] = ((w6 >> 51) | (w7 << 13)) & mask;
1799 out[16] = (w7 >> 16) & mask;
1800 out[17] = ((w7 >> 45) | (w8 << 19)) & mask;
1801 out[18] = (w8 >> 10) & mask;
1802 out[19] = ((w8 >> 39) | (w9 << 25)) & mask;
1803 out[20] = (w9 >> 4) & mask;
1804 out[21] = (w9 >> 33) & mask;
1805 out[22] = ((w9 >> 62) | (w10 << 2)) & mask;
1806 out[23] = (w10 >> 27) & mask;
1807 out[24] = ((w10 >> 56) | (w11 << 8)) & mask;
1808 out[25] = (w11 >> 21) & mask;
1809 out[26] = ((w11 >> 50) | (w12 << 14)) & mask;
1810 out[27] = (w12 >> 15) & mask;
1811 out[28] = ((w12 >> 44) | (w13 << 20)) & mask;
1812 out[29] = (w13 >> 9) & mask;
1813 out[30] = ((w13 >> 38) | (w14 << 26)) & mask;
1814 out[31] = (w14 >> 3) & mask;
1815
1816 return in;
1817 }
1818
1819 inline const uint8_t* unpack30_64(const uint8_t* in, uint64_t* out) {
1820 const uint64_t mask = 1073741823ULL;
1821 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1822 w0 = arrow::bit_util::FromLittleEndian(w0);
1823 in += 8;
1824 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1825 w1 = arrow::bit_util::FromLittleEndian(w1);
1826 in += 8;
1827 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1828 w2 = arrow::bit_util::FromLittleEndian(w2);
1829 in += 8;
1830 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1831 w3 = arrow::bit_util::FromLittleEndian(w3);
1832 in += 8;
1833 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1834 w4 = arrow::bit_util::FromLittleEndian(w4);
1835 in += 8;
1836 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1837 w5 = arrow::bit_util::FromLittleEndian(w5);
1838 in += 8;
1839 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1840 w6 = arrow::bit_util::FromLittleEndian(w6);
1841 in += 8;
1842 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1843 w7 = arrow::bit_util::FromLittleEndian(w7);
1844 in += 8;
1845 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1846 w8 = arrow::bit_util::FromLittleEndian(w8);
1847 in += 8;
1848 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1849 w9 = arrow::bit_util::FromLittleEndian(w9);
1850 in += 8;
1851 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1852 w10 = arrow::bit_util::FromLittleEndian(w10);
1853 in += 8;
1854 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1855 w11 = arrow::bit_util::FromLittleEndian(w11);
1856 in += 8;
1857 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1858 w12 = arrow::bit_util::FromLittleEndian(w12);
1859 in += 8;
1860 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
1861 w13 = arrow::bit_util::FromLittleEndian(w13);
1862 in += 8;
1863 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
1864 w14 = arrow::bit_util::FromLittleEndian(w14);
1865 in += 8;
1866 out[0] = (w0)&mask;
1867 out[1] = (w0 >> 30) & mask;
1868 out[2] = ((w0 >> 60) | (w1 << 4)) & mask;
1869 out[3] = (w1 >> 26) & mask;
1870 out[4] = ((w1 >> 56) | (w2 << 8)) & mask;
1871 out[5] = (w2 >> 22) & mask;
1872 out[6] = ((w2 >> 52) | (w3 << 12)) & mask;
1873 out[7] = (w3 >> 18) & mask;
1874 out[8] = ((w3 >> 48) | (w4 << 16)) & mask;
1875 out[9] = (w4 >> 14) & mask;
1876 out[10] = ((w4 >> 44) | (w5 << 20)) & mask;
1877 out[11] = (w5 >> 10) & mask;
1878 out[12] = ((w5 >> 40) | (w6 << 24)) & mask;
1879 out[13] = (w6 >> 6) & mask;
1880 out[14] = ((w6 >> 36) | (w7 << 28)) & mask;
1881 out[15] = (w7 >> 2) & mask;
1882 out[16] = (w7 >> 32) & mask;
1883 out[17] = ((w7 >> 62) | (w8 << 2)) & mask;
1884 out[18] = (w8 >> 28) & mask;
1885 out[19] = ((w8 >> 58) | (w9 << 6)) & mask;
1886 out[20] = (w9 >> 24) & mask;
1887 out[21] = ((w9 >> 54) | (w10 << 10)) & mask;
1888 out[22] = (w10 >> 20) & mask;
1889 out[23] = ((w10 >> 50) | (w11 << 14)) & mask;
1890 out[24] = (w11 >> 16) & mask;
1891 out[25] = ((w11 >> 46) | (w12 << 18)) & mask;
1892 out[26] = (w12 >> 12) & mask;
1893 out[27] = ((w12 >> 42) | (w13 << 22)) & mask;
1894 out[28] = (w13 >> 8) & mask;
1895 out[29] = ((w13 >> 38) | (w14 << 26)) & mask;
1896 out[30] = (w14 >> 4) & mask;
1897 out[31] = w14 >> 34;
1898
1899 return in;
1900 }
1901
1902 inline const uint8_t* unpack31_64(const uint8_t* in, uint64_t* out) {
1903 const uint64_t mask = 2147483647ULL;
1904 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1905 w0 = arrow::bit_util::FromLittleEndian(w0);
1906 in += 8;
1907 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1908 w1 = arrow::bit_util::FromLittleEndian(w1);
1909 in += 8;
1910 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1911 w2 = arrow::bit_util::FromLittleEndian(w2);
1912 in += 8;
1913 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
1914 w3 = arrow::bit_util::FromLittleEndian(w3);
1915 in += 8;
1916 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
1917 w4 = arrow::bit_util::FromLittleEndian(w4);
1918 in += 8;
1919 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
1920 w5 = arrow::bit_util::FromLittleEndian(w5);
1921 in += 8;
1922 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
1923 w6 = arrow::bit_util::FromLittleEndian(w6);
1924 in += 8;
1925 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
1926 w7 = arrow::bit_util::FromLittleEndian(w7);
1927 in += 8;
1928 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
1929 w8 = arrow::bit_util::FromLittleEndian(w8);
1930 in += 8;
1931 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
1932 w9 = arrow::bit_util::FromLittleEndian(w9);
1933 in += 8;
1934 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
1935 w10 = arrow::bit_util::FromLittleEndian(w10);
1936 in += 8;
1937 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
1938 w11 = arrow::bit_util::FromLittleEndian(w11);
1939 in += 8;
1940 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
1941 w12 = arrow::bit_util::FromLittleEndian(w12);
1942 in += 8;
1943 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
1944 w13 = arrow::bit_util::FromLittleEndian(w13);
1945 in += 8;
1946 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
1947 w14 = arrow::bit_util::FromLittleEndian(w14);
1948 in += 8;
1949 uint64_t w15 = util::SafeLoadAs<uint32_t>(in);
1950 w15 = arrow::bit_util::FromLittleEndian(w15);
1951 in += 4;
1952 out[0] = (w0)&mask;
1953 out[1] = (w0 >> 31) & mask;
1954 out[2] = ((w0 >> 62) | (w1 << 2)) & mask;
1955 out[3] = (w1 >> 29) & mask;
1956 out[4] = ((w1 >> 60) | (w2 << 4)) & mask;
1957 out[5] = (w2 >> 27) & mask;
1958 out[6] = ((w2 >> 58) | (w3 << 6)) & mask;
1959 out[7] = (w3 >> 25) & mask;
1960 out[8] = ((w3 >> 56) | (w4 << 8)) & mask;
1961 out[9] = (w4 >> 23) & mask;
1962 out[10] = ((w4 >> 54) | (w5 << 10)) & mask;
1963 out[11] = (w5 >> 21) & mask;
1964 out[12] = ((w5 >> 52) | (w6 << 12)) & mask;
1965 out[13] = (w6 >> 19) & mask;
1966 out[14] = ((w6 >> 50) | (w7 << 14)) & mask;
1967 out[15] = (w7 >> 17) & mask;
1968 out[16] = ((w7 >> 48) | (w8 << 16)) & mask;
1969 out[17] = (w8 >> 15) & mask;
1970 out[18] = ((w8 >> 46) | (w9 << 18)) & mask;
1971 out[19] = (w9 >> 13) & mask;
1972 out[20] = ((w9 >> 44) | (w10 << 20)) & mask;
1973 out[21] = (w10 >> 11) & mask;
1974 out[22] = ((w10 >> 42) | (w11 << 22)) & mask;
1975 out[23] = (w11 >> 9) & mask;
1976 out[24] = ((w11 >> 40) | (w12 << 24)) & mask;
1977 out[25] = (w12 >> 7) & mask;
1978 out[26] = ((w12 >> 38) | (w13 << 26)) & mask;
1979 out[27] = (w13 >> 5) & mask;
1980 out[28] = ((w13 >> 36) | (w14 << 28)) & mask;
1981 out[29] = (w14 >> 3) & mask;
1982 out[30] = ((w14 >> 34) | (w15 << 30)) & mask;
1983 out[31] = (w15 >> 1) & mask;
1984
1985 return in;
1986 }
1987
1988 inline const uint8_t* unpack32_64(const uint8_t* in, uint64_t* out) {
1989 const uint64_t mask = 4294967295ULL;
1990 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
1991 w0 = arrow::bit_util::FromLittleEndian(w0);
1992 in += 8;
1993 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
1994 w1 = arrow::bit_util::FromLittleEndian(w1);
1995 in += 8;
1996 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
1997 w2 = arrow::bit_util::FromLittleEndian(w2);
1998 in += 8;
1999 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2000 w3 = arrow::bit_util::FromLittleEndian(w3);
2001 in += 8;
2002 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2003 w4 = arrow::bit_util::FromLittleEndian(w4);
2004 in += 8;
2005 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2006 w5 = arrow::bit_util::FromLittleEndian(w5);
2007 in += 8;
2008 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2009 w6 = arrow::bit_util::FromLittleEndian(w6);
2010 in += 8;
2011 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2012 w7 = arrow::bit_util::FromLittleEndian(w7);
2013 in += 8;
2014 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2015 w8 = arrow::bit_util::FromLittleEndian(w8);
2016 in += 8;
2017 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2018 w9 = arrow::bit_util::FromLittleEndian(w9);
2019 in += 8;
2020 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2021 w10 = arrow::bit_util::FromLittleEndian(w10);
2022 in += 8;
2023 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2024 w11 = arrow::bit_util::FromLittleEndian(w11);
2025 in += 8;
2026 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2027 w12 = arrow::bit_util::FromLittleEndian(w12);
2028 in += 8;
2029 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2030 w13 = arrow::bit_util::FromLittleEndian(w13);
2031 in += 8;
2032 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2033 w14 = arrow::bit_util::FromLittleEndian(w14);
2034 in += 8;
2035 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2036 w15 = arrow::bit_util::FromLittleEndian(w15);
2037 in += 8;
2038 out[0] = (w0)&mask;
2039 out[1] = w0 >> 32;
2040 out[2] = (w1)&mask;
2041 out[3] = w1 >> 32;
2042 out[4] = (w2)&mask;
2043 out[5] = w2 >> 32;
2044 out[6] = (w3)&mask;
2045 out[7] = w3 >> 32;
2046 out[8] = (w4)&mask;
2047 out[9] = w4 >> 32;
2048 out[10] = (w5)&mask;
2049 out[11] = w5 >> 32;
2050 out[12] = (w6)&mask;
2051 out[13] = w6 >> 32;
2052 out[14] = (w7)&mask;
2053 out[15] = w7 >> 32;
2054 out[16] = (w8)&mask;
2055 out[17] = w8 >> 32;
2056 out[18] = (w9)&mask;
2057 out[19] = w9 >> 32;
2058 out[20] = (w10)&mask;
2059 out[21] = w10 >> 32;
2060 out[22] = (w11)&mask;
2061 out[23] = w11 >> 32;
2062 out[24] = (w12)&mask;
2063 out[25] = w12 >> 32;
2064 out[26] = (w13)&mask;
2065 out[27] = w13 >> 32;
2066 out[28] = (w14)&mask;
2067 out[29] = w14 >> 32;
2068 out[30] = (w15)&mask;
2069 out[31] = w15 >> 32;
2070
2071 return in;
2072 }
2073
2074 inline const uint8_t* unpack33_64(const uint8_t* in, uint64_t* out) {
2075 const uint64_t mask = 8589934591ULL;
2076 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2077 w0 = arrow::bit_util::FromLittleEndian(w0);
2078 in += 8;
2079 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2080 w1 = arrow::bit_util::FromLittleEndian(w1);
2081 in += 8;
2082 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2083 w2 = arrow::bit_util::FromLittleEndian(w2);
2084 in += 8;
2085 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2086 w3 = arrow::bit_util::FromLittleEndian(w3);
2087 in += 8;
2088 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2089 w4 = arrow::bit_util::FromLittleEndian(w4);
2090 in += 8;
2091 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2092 w5 = arrow::bit_util::FromLittleEndian(w5);
2093 in += 8;
2094 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2095 w6 = arrow::bit_util::FromLittleEndian(w6);
2096 in += 8;
2097 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2098 w7 = arrow::bit_util::FromLittleEndian(w7);
2099 in += 8;
2100 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2101 w8 = arrow::bit_util::FromLittleEndian(w8);
2102 in += 8;
2103 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2104 w9 = arrow::bit_util::FromLittleEndian(w9);
2105 in += 8;
2106 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2107 w10 = arrow::bit_util::FromLittleEndian(w10);
2108 in += 8;
2109 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2110 w11 = arrow::bit_util::FromLittleEndian(w11);
2111 in += 8;
2112 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2113 w12 = arrow::bit_util::FromLittleEndian(w12);
2114 in += 8;
2115 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2116 w13 = arrow::bit_util::FromLittleEndian(w13);
2117 in += 8;
2118 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2119 w14 = arrow::bit_util::FromLittleEndian(w14);
2120 in += 8;
2121 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2122 w15 = arrow::bit_util::FromLittleEndian(w15);
2123 in += 8;
2124 uint64_t w16 = util::SafeLoadAs<uint32_t>(in);
2125 w16 = arrow::bit_util::FromLittleEndian(w16);
2126 in += 4;
2127 out[0] = (w0)&mask;
2128 out[1] = ((w0 >> 33) | (w1 << 31)) & mask;
2129 out[2] = (w1 >> 2) & mask;
2130 out[3] = ((w1 >> 35) | (w2 << 29)) & mask;
2131 out[4] = (w2 >> 4) & mask;
2132 out[5] = ((w2 >> 37) | (w3 << 27)) & mask;
2133 out[6] = (w3 >> 6) & mask;
2134 out[7] = ((w3 >> 39) | (w4 << 25)) & mask;
2135 out[8] = (w4 >> 8) & mask;
2136 out[9] = ((w4 >> 41) | (w5 << 23)) & mask;
2137 out[10] = (w5 >> 10) & mask;
2138 out[11] = ((w5 >> 43) | (w6 << 21)) & mask;
2139 out[12] = (w6 >> 12) & mask;
2140 out[13] = ((w6 >> 45) | (w7 << 19)) & mask;
2141 out[14] = (w7 >> 14) & mask;
2142 out[15] = ((w7 >> 47) | (w8 << 17)) & mask;
2143 out[16] = (w8 >> 16) & mask;
2144 out[17] = ((w8 >> 49) | (w9 << 15)) & mask;
2145 out[18] = (w9 >> 18) & mask;
2146 out[19] = ((w9 >> 51) | (w10 << 13)) & mask;
2147 out[20] = (w10 >> 20) & mask;
2148 out[21] = ((w10 >> 53) | (w11 << 11)) & mask;
2149 out[22] = (w11 >> 22) & mask;
2150 out[23] = ((w11 >> 55) | (w12 << 9)) & mask;
2151 out[24] = (w12 >> 24) & mask;
2152 out[25] = ((w12 >> 57) | (w13 << 7)) & mask;
2153 out[26] = (w13 >> 26) & mask;
2154 out[27] = ((w13 >> 59) | (w14 << 5)) & mask;
2155 out[28] = (w14 >> 28) & mask;
2156 out[29] = ((w14 >> 61) | (w15 << 3)) & mask;
2157 out[30] = (w15 >> 30) & mask;
2158 out[31] = ((w15 >> 63) | (w16 << 1)) & mask;
2159
2160 return in;
2161 }
2162
2163 inline const uint8_t* unpack34_64(const uint8_t* in, uint64_t* out) {
2164 const uint64_t mask = 17179869183ULL;
2165 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2166 w0 = arrow::bit_util::FromLittleEndian(w0);
2167 in += 8;
2168 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2169 w1 = arrow::bit_util::FromLittleEndian(w1);
2170 in += 8;
2171 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2172 w2 = arrow::bit_util::FromLittleEndian(w2);
2173 in += 8;
2174 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2175 w3 = arrow::bit_util::FromLittleEndian(w3);
2176 in += 8;
2177 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2178 w4 = arrow::bit_util::FromLittleEndian(w4);
2179 in += 8;
2180 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2181 w5 = arrow::bit_util::FromLittleEndian(w5);
2182 in += 8;
2183 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2184 w6 = arrow::bit_util::FromLittleEndian(w6);
2185 in += 8;
2186 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2187 w7 = arrow::bit_util::FromLittleEndian(w7);
2188 in += 8;
2189 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2190 w8 = arrow::bit_util::FromLittleEndian(w8);
2191 in += 8;
2192 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2193 w9 = arrow::bit_util::FromLittleEndian(w9);
2194 in += 8;
2195 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2196 w10 = arrow::bit_util::FromLittleEndian(w10);
2197 in += 8;
2198 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2199 w11 = arrow::bit_util::FromLittleEndian(w11);
2200 in += 8;
2201 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2202 w12 = arrow::bit_util::FromLittleEndian(w12);
2203 in += 8;
2204 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2205 w13 = arrow::bit_util::FromLittleEndian(w13);
2206 in += 8;
2207 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2208 w14 = arrow::bit_util::FromLittleEndian(w14);
2209 in += 8;
2210 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2211 w15 = arrow::bit_util::FromLittleEndian(w15);
2212 in += 8;
2213 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2214 w16 = arrow::bit_util::FromLittleEndian(w16);
2215 in += 8;
2216 out[0] = (w0)&mask;
2217 out[1] = ((w0 >> 34) | (w1 << 30)) & mask;
2218 out[2] = (w1 >> 4) & mask;
2219 out[3] = ((w1 >> 38) | (w2 << 26)) & mask;
2220 out[4] = (w2 >> 8) & mask;
2221 out[5] = ((w2 >> 42) | (w3 << 22)) & mask;
2222 out[6] = (w3 >> 12) & mask;
2223 out[7] = ((w3 >> 46) | (w4 << 18)) & mask;
2224 out[8] = (w4 >> 16) & mask;
2225 out[9] = ((w4 >> 50) | (w5 << 14)) & mask;
2226 out[10] = (w5 >> 20) & mask;
2227 out[11] = ((w5 >> 54) | (w6 << 10)) & mask;
2228 out[12] = (w6 >> 24) & mask;
2229 out[13] = ((w6 >> 58) | (w7 << 6)) & mask;
2230 out[14] = (w7 >> 28) & mask;
2231 out[15] = ((w7 >> 62) | (w8 << 2)) & mask;
2232 out[16] = ((w8 >> 32) | (w9 << 32)) & mask;
2233 out[17] = (w9 >> 2) & mask;
2234 out[18] = ((w9 >> 36) | (w10 << 28)) & mask;
2235 out[19] = (w10 >> 6) & mask;
2236 out[20] = ((w10 >> 40) | (w11 << 24)) & mask;
2237 out[21] = (w11 >> 10) & mask;
2238 out[22] = ((w11 >> 44) | (w12 << 20)) & mask;
2239 out[23] = (w12 >> 14) & mask;
2240 out[24] = ((w12 >> 48) | (w13 << 16)) & mask;
2241 out[25] = (w13 >> 18) & mask;
2242 out[26] = ((w13 >> 52) | (w14 << 12)) & mask;
2243 out[27] = (w14 >> 22) & mask;
2244 out[28] = ((w14 >> 56) | (w15 << 8)) & mask;
2245 out[29] = (w15 >> 26) & mask;
2246 out[30] = ((w15 >> 60) | (w16 << 4)) & mask;
2247 out[31] = w16 >> 30;
2248
2249 return in;
2250 }
2251
2252 inline const uint8_t* unpack35_64(const uint8_t* in, uint64_t* out) {
2253 const uint64_t mask = 34359738367ULL;
2254 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2255 w0 = arrow::bit_util::FromLittleEndian(w0);
2256 in += 8;
2257 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2258 w1 = arrow::bit_util::FromLittleEndian(w1);
2259 in += 8;
2260 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2261 w2 = arrow::bit_util::FromLittleEndian(w2);
2262 in += 8;
2263 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2264 w3 = arrow::bit_util::FromLittleEndian(w3);
2265 in += 8;
2266 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2267 w4 = arrow::bit_util::FromLittleEndian(w4);
2268 in += 8;
2269 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2270 w5 = arrow::bit_util::FromLittleEndian(w5);
2271 in += 8;
2272 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2273 w6 = arrow::bit_util::FromLittleEndian(w6);
2274 in += 8;
2275 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2276 w7 = arrow::bit_util::FromLittleEndian(w7);
2277 in += 8;
2278 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2279 w8 = arrow::bit_util::FromLittleEndian(w8);
2280 in += 8;
2281 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2282 w9 = arrow::bit_util::FromLittleEndian(w9);
2283 in += 8;
2284 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2285 w10 = arrow::bit_util::FromLittleEndian(w10);
2286 in += 8;
2287 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2288 w11 = arrow::bit_util::FromLittleEndian(w11);
2289 in += 8;
2290 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2291 w12 = arrow::bit_util::FromLittleEndian(w12);
2292 in += 8;
2293 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2294 w13 = arrow::bit_util::FromLittleEndian(w13);
2295 in += 8;
2296 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2297 w14 = arrow::bit_util::FromLittleEndian(w14);
2298 in += 8;
2299 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2300 w15 = arrow::bit_util::FromLittleEndian(w15);
2301 in += 8;
2302 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2303 w16 = arrow::bit_util::FromLittleEndian(w16);
2304 in += 8;
2305 uint64_t w17 = util::SafeLoadAs<uint32_t>(in);
2306 w17 = arrow::bit_util::FromLittleEndian(w17);
2307 in += 4;
2308 out[0] = (w0)&mask;
2309 out[1] = ((w0 >> 35) | (w1 << 29)) & mask;
2310 out[2] = (w1 >> 6) & mask;
2311 out[3] = ((w1 >> 41) | (w2 << 23)) & mask;
2312 out[4] = (w2 >> 12) & mask;
2313 out[5] = ((w2 >> 47) | (w3 << 17)) & mask;
2314 out[6] = (w3 >> 18) & mask;
2315 out[7] = ((w3 >> 53) | (w4 << 11)) & mask;
2316 out[8] = (w4 >> 24) & mask;
2317 out[9] = ((w4 >> 59) | (w5 << 5)) & mask;
2318 out[10] = ((w5 >> 30) | (w6 << 34)) & mask;
2319 out[11] = (w6 >> 1) & mask;
2320 out[12] = ((w6 >> 36) | (w7 << 28)) & mask;
2321 out[13] = (w7 >> 7) & mask;
2322 out[14] = ((w7 >> 42) | (w8 << 22)) & mask;
2323 out[15] = (w8 >> 13) & mask;
2324 out[16] = ((w8 >> 48) | (w9 << 16)) & mask;
2325 out[17] = (w9 >> 19) & mask;
2326 out[18] = ((w9 >> 54) | (w10 << 10)) & mask;
2327 out[19] = (w10 >> 25) & mask;
2328 out[20] = ((w10 >> 60) | (w11 << 4)) & mask;
2329 out[21] = ((w11 >> 31) | (w12 << 33)) & mask;
2330 out[22] = (w12 >> 2) & mask;
2331 out[23] = ((w12 >> 37) | (w13 << 27)) & mask;
2332 out[24] = (w13 >> 8) & mask;
2333 out[25] = ((w13 >> 43) | (w14 << 21)) & mask;
2334 out[26] = (w14 >> 14) & mask;
2335 out[27] = ((w14 >> 49) | (w15 << 15)) & mask;
2336 out[28] = (w15 >> 20) & mask;
2337 out[29] = ((w15 >> 55) | (w16 << 9)) & mask;
2338 out[30] = (w16 >> 26) & mask;
2339 out[31] = ((w16 >> 61) | (w17 << 3)) & mask;
2340
2341 return in;
2342 }
2343
2344 inline const uint8_t* unpack36_64(const uint8_t* in, uint64_t* out) {
2345 const uint64_t mask = 68719476735ULL;
2346 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2347 w0 = arrow::bit_util::FromLittleEndian(w0);
2348 in += 8;
2349 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2350 w1 = arrow::bit_util::FromLittleEndian(w1);
2351 in += 8;
2352 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2353 w2 = arrow::bit_util::FromLittleEndian(w2);
2354 in += 8;
2355 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2356 w3 = arrow::bit_util::FromLittleEndian(w3);
2357 in += 8;
2358 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2359 w4 = arrow::bit_util::FromLittleEndian(w4);
2360 in += 8;
2361 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2362 w5 = arrow::bit_util::FromLittleEndian(w5);
2363 in += 8;
2364 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2365 w6 = arrow::bit_util::FromLittleEndian(w6);
2366 in += 8;
2367 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2368 w7 = arrow::bit_util::FromLittleEndian(w7);
2369 in += 8;
2370 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2371 w8 = arrow::bit_util::FromLittleEndian(w8);
2372 in += 8;
2373 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2374 w9 = arrow::bit_util::FromLittleEndian(w9);
2375 in += 8;
2376 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2377 w10 = arrow::bit_util::FromLittleEndian(w10);
2378 in += 8;
2379 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2380 w11 = arrow::bit_util::FromLittleEndian(w11);
2381 in += 8;
2382 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2383 w12 = arrow::bit_util::FromLittleEndian(w12);
2384 in += 8;
2385 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2386 w13 = arrow::bit_util::FromLittleEndian(w13);
2387 in += 8;
2388 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2389 w14 = arrow::bit_util::FromLittleEndian(w14);
2390 in += 8;
2391 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2392 w15 = arrow::bit_util::FromLittleEndian(w15);
2393 in += 8;
2394 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2395 w16 = arrow::bit_util::FromLittleEndian(w16);
2396 in += 8;
2397 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2398 w17 = arrow::bit_util::FromLittleEndian(w17);
2399 in += 8;
2400 out[0] = (w0)&mask;
2401 out[1] = ((w0 >> 36) | (w1 << 28)) & mask;
2402 out[2] = (w1 >> 8) & mask;
2403 out[3] = ((w1 >> 44) | (w2 << 20)) & mask;
2404 out[4] = (w2 >> 16) & mask;
2405 out[5] = ((w2 >> 52) | (w3 << 12)) & mask;
2406 out[6] = (w3 >> 24) & mask;
2407 out[7] = ((w3 >> 60) | (w4 << 4)) & mask;
2408 out[8] = ((w4 >> 32) | (w5 << 32)) & mask;
2409 out[9] = (w5 >> 4) & mask;
2410 out[10] = ((w5 >> 40) | (w6 << 24)) & mask;
2411 out[11] = (w6 >> 12) & mask;
2412 out[12] = ((w6 >> 48) | (w7 << 16)) & mask;
2413 out[13] = (w7 >> 20) & mask;
2414 out[14] = ((w7 >> 56) | (w8 << 8)) & mask;
2415 out[15] = w8 >> 28;
2416 out[16] = (w9)&mask;
2417 out[17] = ((w9 >> 36) | (w10 << 28)) & mask;
2418 out[18] = (w10 >> 8) & mask;
2419 out[19] = ((w10 >> 44) | (w11 << 20)) & mask;
2420 out[20] = (w11 >> 16) & mask;
2421 out[21] = ((w11 >> 52) | (w12 << 12)) & mask;
2422 out[22] = (w12 >> 24) & mask;
2423 out[23] = ((w12 >> 60) | (w13 << 4)) & mask;
2424 out[24] = ((w13 >> 32) | (w14 << 32)) & mask;
2425 out[25] = (w14 >> 4) & mask;
2426 out[26] = ((w14 >> 40) | (w15 << 24)) & mask;
2427 out[27] = (w15 >> 12) & mask;
2428 out[28] = ((w15 >> 48) | (w16 << 16)) & mask;
2429 out[29] = (w16 >> 20) & mask;
2430 out[30] = ((w16 >> 56) | (w17 << 8)) & mask;
2431 out[31] = w17 >> 28;
2432
2433 return in;
2434 }
2435
2436 inline const uint8_t* unpack37_64(const uint8_t* in, uint64_t* out) {
2437 const uint64_t mask = 137438953471ULL;
2438 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2439 w0 = arrow::bit_util::FromLittleEndian(w0);
2440 in += 8;
2441 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2442 w1 = arrow::bit_util::FromLittleEndian(w1);
2443 in += 8;
2444 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2445 w2 = arrow::bit_util::FromLittleEndian(w2);
2446 in += 8;
2447 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2448 w3 = arrow::bit_util::FromLittleEndian(w3);
2449 in += 8;
2450 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2451 w4 = arrow::bit_util::FromLittleEndian(w4);
2452 in += 8;
2453 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2454 w5 = arrow::bit_util::FromLittleEndian(w5);
2455 in += 8;
2456 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2457 w6 = arrow::bit_util::FromLittleEndian(w6);
2458 in += 8;
2459 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2460 w7 = arrow::bit_util::FromLittleEndian(w7);
2461 in += 8;
2462 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2463 w8 = arrow::bit_util::FromLittleEndian(w8);
2464 in += 8;
2465 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2466 w9 = arrow::bit_util::FromLittleEndian(w9);
2467 in += 8;
2468 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2469 w10 = arrow::bit_util::FromLittleEndian(w10);
2470 in += 8;
2471 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2472 w11 = arrow::bit_util::FromLittleEndian(w11);
2473 in += 8;
2474 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2475 w12 = arrow::bit_util::FromLittleEndian(w12);
2476 in += 8;
2477 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2478 w13 = arrow::bit_util::FromLittleEndian(w13);
2479 in += 8;
2480 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2481 w14 = arrow::bit_util::FromLittleEndian(w14);
2482 in += 8;
2483 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2484 w15 = arrow::bit_util::FromLittleEndian(w15);
2485 in += 8;
2486 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2487 w16 = arrow::bit_util::FromLittleEndian(w16);
2488 in += 8;
2489 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2490 w17 = arrow::bit_util::FromLittleEndian(w17);
2491 in += 8;
2492 uint64_t w18 = util::SafeLoadAs<uint32_t>(in);
2493 w18 = arrow::bit_util::FromLittleEndian(w18);
2494 in += 4;
2495 out[0] = (w0)&mask;
2496 out[1] = ((w0 >> 37) | (w1 << 27)) & mask;
2497 out[2] = (w1 >> 10) & mask;
2498 out[3] = ((w1 >> 47) | (w2 << 17)) & mask;
2499 out[4] = (w2 >> 20) & mask;
2500 out[5] = ((w2 >> 57) | (w3 << 7)) & mask;
2501 out[6] = ((w3 >> 30) | (w4 << 34)) & mask;
2502 out[7] = (w4 >> 3) & mask;
2503 out[8] = ((w4 >> 40) | (w5 << 24)) & mask;
2504 out[9] = (w5 >> 13) & mask;
2505 out[10] = ((w5 >> 50) | (w6 << 14)) & mask;
2506 out[11] = (w6 >> 23) & mask;
2507 out[12] = ((w6 >> 60) | (w7 << 4)) & mask;
2508 out[13] = ((w7 >> 33) | (w8 << 31)) & mask;
2509 out[14] = (w8 >> 6) & mask;
2510 out[15] = ((w8 >> 43) | (w9 << 21)) & mask;
2511 out[16] = (w9 >> 16) & mask;
2512 out[17] = ((w9 >> 53) | (w10 << 11)) & mask;
2513 out[18] = (w10 >> 26) & mask;
2514 out[19] = ((w10 >> 63) | (w11 << 1)) & mask;
2515 out[20] = ((w11 >> 36) | (w12 << 28)) & mask;
2516 out[21] = (w12 >> 9) & mask;
2517 out[22] = ((w12 >> 46) | (w13 << 18)) & mask;
2518 out[23] = (w13 >> 19) & mask;
2519 out[24] = ((w13 >> 56) | (w14 << 8)) & mask;
2520 out[25] = ((w14 >> 29) | (w15 << 35)) & mask;
2521 out[26] = (w15 >> 2) & mask;
2522 out[27] = ((w15 >> 39) | (w16 << 25)) & mask;
2523 out[28] = (w16 >> 12) & mask;
2524 out[29] = ((w16 >> 49) | (w17 << 15)) & mask;
2525 out[30] = (w17 >> 22) & mask;
2526 out[31] = ((w17 >> 59) | (w18 << 5)) & mask;
2527
2528 return in;
2529 }
2530
2531 inline const uint8_t* unpack38_64(const uint8_t* in, uint64_t* out) {
2532 const uint64_t mask = 274877906943ULL;
2533 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2534 w0 = arrow::bit_util::FromLittleEndian(w0);
2535 in += 8;
2536 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2537 w1 = arrow::bit_util::FromLittleEndian(w1);
2538 in += 8;
2539 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2540 w2 = arrow::bit_util::FromLittleEndian(w2);
2541 in += 8;
2542 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2543 w3 = arrow::bit_util::FromLittleEndian(w3);
2544 in += 8;
2545 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2546 w4 = arrow::bit_util::FromLittleEndian(w4);
2547 in += 8;
2548 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2549 w5 = arrow::bit_util::FromLittleEndian(w5);
2550 in += 8;
2551 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2552 w6 = arrow::bit_util::FromLittleEndian(w6);
2553 in += 8;
2554 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2555 w7 = arrow::bit_util::FromLittleEndian(w7);
2556 in += 8;
2557 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2558 w8 = arrow::bit_util::FromLittleEndian(w8);
2559 in += 8;
2560 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2561 w9 = arrow::bit_util::FromLittleEndian(w9);
2562 in += 8;
2563 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2564 w10 = arrow::bit_util::FromLittleEndian(w10);
2565 in += 8;
2566 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2567 w11 = arrow::bit_util::FromLittleEndian(w11);
2568 in += 8;
2569 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2570 w12 = arrow::bit_util::FromLittleEndian(w12);
2571 in += 8;
2572 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2573 w13 = arrow::bit_util::FromLittleEndian(w13);
2574 in += 8;
2575 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2576 w14 = arrow::bit_util::FromLittleEndian(w14);
2577 in += 8;
2578 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2579 w15 = arrow::bit_util::FromLittleEndian(w15);
2580 in += 8;
2581 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2582 w16 = arrow::bit_util::FromLittleEndian(w16);
2583 in += 8;
2584 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2585 w17 = arrow::bit_util::FromLittleEndian(w17);
2586 in += 8;
2587 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
2588 w18 = arrow::bit_util::FromLittleEndian(w18);
2589 in += 8;
2590 out[0] = (w0)&mask;
2591 out[1] = ((w0 >> 38) | (w1 << 26)) & mask;
2592 out[2] = (w1 >> 12) & mask;
2593 out[3] = ((w1 >> 50) | (w2 << 14)) & mask;
2594 out[4] = (w2 >> 24) & mask;
2595 out[5] = ((w2 >> 62) | (w3 << 2)) & mask;
2596 out[6] = ((w3 >> 36) | (w4 << 28)) & mask;
2597 out[7] = (w4 >> 10) & mask;
2598 out[8] = ((w4 >> 48) | (w5 << 16)) & mask;
2599 out[9] = (w5 >> 22) & mask;
2600 out[10] = ((w5 >> 60) | (w6 << 4)) & mask;
2601 out[11] = ((w6 >> 34) | (w7 << 30)) & mask;
2602 out[12] = (w7 >> 8) & mask;
2603 out[13] = ((w7 >> 46) | (w8 << 18)) & mask;
2604 out[14] = (w8 >> 20) & mask;
2605 out[15] = ((w8 >> 58) | (w9 << 6)) & mask;
2606 out[16] = ((w9 >> 32) | (w10 << 32)) & mask;
2607 out[17] = (w10 >> 6) & mask;
2608 out[18] = ((w10 >> 44) | (w11 << 20)) & mask;
2609 out[19] = (w11 >> 18) & mask;
2610 out[20] = ((w11 >> 56) | (w12 << 8)) & mask;
2611 out[21] = ((w12 >> 30) | (w13 << 34)) & mask;
2612 out[22] = (w13 >> 4) & mask;
2613 out[23] = ((w13 >> 42) | (w14 << 22)) & mask;
2614 out[24] = (w14 >> 16) & mask;
2615 out[25] = ((w14 >> 54) | (w15 << 10)) & mask;
2616 out[26] = ((w15 >> 28) | (w16 << 36)) & mask;
2617 out[27] = (w16 >> 2) & mask;
2618 out[28] = ((w16 >> 40) | (w17 << 24)) & mask;
2619 out[29] = (w17 >> 14) & mask;
2620 out[30] = ((w17 >> 52) | (w18 << 12)) & mask;
2621 out[31] = w18 >> 26;
2622
2623 return in;
2624 }
2625
2626 inline const uint8_t* unpack39_64(const uint8_t* in, uint64_t* out) {
2627 const uint64_t mask = 549755813887ULL;
2628 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2629 w0 = arrow::bit_util::FromLittleEndian(w0);
2630 in += 8;
2631 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2632 w1 = arrow::bit_util::FromLittleEndian(w1);
2633 in += 8;
2634 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2635 w2 = arrow::bit_util::FromLittleEndian(w2);
2636 in += 8;
2637 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2638 w3 = arrow::bit_util::FromLittleEndian(w3);
2639 in += 8;
2640 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2641 w4 = arrow::bit_util::FromLittleEndian(w4);
2642 in += 8;
2643 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2644 w5 = arrow::bit_util::FromLittleEndian(w5);
2645 in += 8;
2646 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2647 w6 = arrow::bit_util::FromLittleEndian(w6);
2648 in += 8;
2649 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2650 w7 = arrow::bit_util::FromLittleEndian(w7);
2651 in += 8;
2652 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2653 w8 = arrow::bit_util::FromLittleEndian(w8);
2654 in += 8;
2655 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2656 w9 = arrow::bit_util::FromLittleEndian(w9);
2657 in += 8;
2658 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2659 w10 = arrow::bit_util::FromLittleEndian(w10);
2660 in += 8;
2661 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2662 w11 = arrow::bit_util::FromLittleEndian(w11);
2663 in += 8;
2664 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2665 w12 = arrow::bit_util::FromLittleEndian(w12);
2666 in += 8;
2667 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2668 w13 = arrow::bit_util::FromLittleEndian(w13);
2669 in += 8;
2670 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2671 w14 = arrow::bit_util::FromLittleEndian(w14);
2672 in += 8;
2673 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2674 w15 = arrow::bit_util::FromLittleEndian(w15);
2675 in += 8;
2676 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2677 w16 = arrow::bit_util::FromLittleEndian(w16);
2678 in += 8;
2679 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2680 w17 = arrow::bit_util::FromLittleEndian(w17);
2681 in += 8;
2682 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
2683 w18 = arrow::bit_util::FromLittleEndian(w18);
2684 in += 8;
2685 uint64_t w19 = util::SafeLoadAs<uint32_t>(in);
2686 w19 = arrow::bit_util::FromLittleEndian(w19);
2687 in += 4;
2688 out[0] = (w0)&mask;
2689 out[1] = ((w0 >> 39) | (w1 << 25)) & mask;
2690 out[2] = (w1 >> 14) & mask;
2691 out[3] = ((w1 >> 53) | (w2 << 11)) & mask;
2692 out[4] = ((w2 >> 28) | (w3 << 36)) & mask;
2693 out[5] = (w3 >> 3) & mask;
2694 out[6] = ((w3 >> 42) | (w4 << 22)) & mask;
2695 out[7] = (w4 >> 17) & mask;
2696 out[8] = ((w4 >> 56) | (w5 << 8)) & mask;
2697 out[9] = ((w5 >> 31) | (w6 << 33)) & mask;
2698 out[10] = (w6 >> 6) & mask;
2699 out[11] = ((w6 >> 45) | (w7 << 19)) & mask;
2700 out[12] = (w7 >> 20) & mask;
2701 out[13] = ((w7 >> 59) | (w8 << 5)) & mask;
2702 out[14] = ((w8 >> 34) | (w9 << 30)) & mask;
2703 out[15] = (w9 >> 9) & mask;
2704 out[16] = ((w9 >> 48) | (w10 << 16)) & mask;
2705 out[17] = (w10 >> 23) & mask;
2706 out[18] = ((w10 >> 62) | (w11 << 2)) & mask;
2707 out[19] = ((w11 >> 37) | (w12 << 27)) & mask;
2708 out[20] = (w12 >> 12) & mask;
2709 out[21] = ((w12 >> 51) | (w13 << 13)) & mask;
2710 out[22] = ((w13 >> 26) | (w14 << 38)) & mask;
2711 out[23] = (w14 >> 1) & mask;
2712 out[24] = ((w14 >> 40) | (w15 << 24)) & mask;
2713 out[25] = (w15 >> 15) & mask;
2714 out[26] = ((w15 >> 54) | (w16 << 10)) & mask;
2715 out[27] = ((w16 >> 29) | (w17 << 35)) & mask;
2716 out[28] = (w17 >> 4) & mask;
2717 out[29] = ((w17 >> 43) | (w18 << 21)) & mask;
2718 out[30] = (w18 >> 18) & mask;
2719 out[31] = ((w18 >> 57) | (w19 << 7)) & mask;
2720
2721 return in;
2722 }
2723
2724 inline const uint8_t* unpack40_64(const uint8_t* in, uint64_t* out) {
2725 const uint64_t mask = 1099511627775ULL;
2726 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2727 w0 = arrow::bit_util::FromLittleEndian(w0);
2728 in += 8;
2729 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2730 w1 = arrow::bit_util::FromLittleEndian(w1);
2731 in += 8;
2732 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2733 w2 = arrow::bit_util::FromLittleEndian(w2);
2734 in += 8;
2735 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2736 w3 = arrow::bit_util::FromLittleEndian(w3);
2737 in += 8;
2738 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2739 w4 = arrow::bit_util::FromLittleEndian(w4);
2740 in += 8;
2741 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2742 w5 = arrow::bit_util::FromLittleEndian(w5);
2743 in += 8;
2744 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2745 w6 = arrow::bit_util::FromLittleEndian(w6);
2746 in += 8;
2747 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2748 w7 = arrow::bit_util::FromLittleEndian(w7);
2749 in += 8;
2750 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2751 w8 = arrow::bit_util::FromLittleEndian(w8);
2752 in += 8;
2753 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2754 w9 = arrow::bit_util::FromLittleEndian(w9);
2755 in += 8;
2756 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2757 w10 = arrow::bit_util::FromLittleEndian(w10);
2758 in += 8;
2759 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2760 w11 = arrow::bit_util::FromLittleEndian(w11);
2761 in += 8;
2762 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2763 w12 = arrow::bit_util::FromLittleEndian(w12);
2764 in += 8;
2765 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2766 w13 = arrow::bit_util::FromLittleEndian(w13);
2767 in += 8;
2768 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2769 w14 = arrow::bit_util::FromLittleEndian(w14);
2770 in += 8;
2771 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2772 w15 = arrow::bit_util::FromLittleEndian(w15);
2773 in += 8;
2774 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2775 w16 = arrow::bit_util::FromLittleEndian(w16);
2776 in += 8;
2777 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2778 w17 = arrow::bit_util::FromLittleEndian(w17);
2779 in += 8;
2780 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
2781 w18 = arrow::bit_util::FromLittleEndian(w18);
2782 in += 8;
2783 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
2784 w19 = arrow::bit_util::FromLittleEndian(w19);
2785 in += 8;
2786 out[0] = (w0)&mask;
2787 out[1] = ((w0 >> 40) | (w1 << 24)) & mask;
2788 out[2] = (w1 >> 16) & mask;
2789 out[3] = ((w1 >> 56) | (w2 << 8)) & mask;
2790 out[4] = ((w2 >> 32) | (w3 << 32)) & mask;
2791 out[5] = (w3 >> 8) & mask;
2792 out[6] = ((w3 >> 48) | (w4 << 16)) & mask;
2793 out[7] = w4 >> 24;
2794 out[8] = (w5)&mask;
2795 out[9] = ((w5 >> 40) | (w6 << 24)) & mask;
2796 out[10] = (w6 >> 16) & mask;
2797 out[11] = ((w6 >> 56) | (w7 << 8)) & mask;
2798 out[12] = ((w7 >> 32) | (w8 << 32)) & mask;
2799 out[13] = (w8 >> 8) & mask;
2800 out[14] = ((w8 >> 48) | (w9 << 16)) & mask;
2801 out[15] = w9 >> 24;
2802 out[16] = (w10)&mask;
2803 out[17] = ((w10 >> 40) | (w11 << 24)) & mask;
2804 out[18] = (w11 >> 16) & mask;
2805 out[19] = ((w11 >> 56) | (w12 << 8)) & mask;
2806 out[20] = ((w12 >> 32) | (w13 << 32)) & mask;
2807 out[21] = (w13 >> 8) & mask;
2808 out[22] = ((w13 >> 48) | (w14 << 16)) & mask;
2809 out[23] = w14 >> 24;
2810 out[24] = (w15)&mask;
2811 out[25] = ((w15 >> 40) | (w16 << 24)) & mask;
2812 out[26] = (w16 >> 16) & mask;
2813 out[27] = ((w16 >> 56) | (w17 << 8)) & mask;
2814 out[28] = ((w17 >> 32) | (w18 << 32)) & mask;
2815 out[29] = (w18 >> 8) & mask;
2816 out[30] = ((w18 >> 48) | (w19 << 16)) & mask;
2817 out[31] = w19 >> 24;
2818
2819 return in;
2820 }
2821
2822 inline const uint8_t* unpack41_64(const uint8_t* in, uint64_t* out) {
2823 const uint64_t mask = 2199023255551ULL;
2824 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2825 w0 = arrow::bit_util::FromLittleEndian(w0);
2826 in += 8;
2827 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2828 w1 = arrow::bit_util::FromLittleEndian(w1);
2829 in += 8;
2830 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2831 w2 = arrow::bit_util::FromLittleEndian(w2);
2832 in += 8;
2833 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2834 w3 = arrow::bit_util::FromLittleEndian(w3);
2835 in += 8;
2836 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2837 w4 = arrow::bit_util::FromLittleEndian(w4);
2838 in += 8;
2839 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2840 w5 = arrow::bit_util::FromLittleEndian(w5);
2841 in += 8;
2842 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2843 w6 = arrow::bit_util::FromLittleEndian(w6);
2844 in += 8;
2845 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2846 w7 = arrow::bit_util::FromLittleEndian(w7);
2847 in += 8;
2848 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2849 w8 = arrow::bit_util::FromLittleEndian(w8);
2850 in += 8;
2851 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2852 w9 = arrow::bit_util::FromLittleEndian(w9);
2853 in += 8;
2854 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2855 w10 = arrow::bit_util::FromLittleEndian(w10);
2856 in += 8;
2857 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2858 w11 = arrow::bit_util::FromLittleEndian(w11);
2859 in += 8;
2860 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2861 w12 = arrow::bit_util::FromLittleEndian(w12);
2862 in += 8;
2863 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2864 w13 = arrow::bit_util::FromLittleEndian(w13);
2865 in += 8;
2866 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2867 w14 = arrow::bit_util::FromLittleEndian(w14);
2868 in += 8;
2869 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2870 w15 = arrow::bit_util::FromLittleEndian(w15);
2871 in += 8;
2872 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2873 w16 = arrow::bit_util::FromLittleEndian(w16);
2874 in += 8;
2875 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2876 w17 = arrow::bit_util::FromLittleEndian(w17);
2877 in += 8;
2878 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
2879 w18 = arrow::bit_util::FromLittleEndian(w18);
2880 in += 8;
2881 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
2882 w19 = arrow::bit_util::FromLittleEndian(w19);
2883 in += 8;
2884 uint64_t w20 = util::SafeLoadAs<uint32_t>(in);
2885 w20 = arrow::bit_util::FromLittleEndian(w20);
2886 in += 4;
2887 out[0] = (w0)&mask;
2888 out[1] = ((w0 >> 41) | (w1 << 23)) & mask;
2889 out[2] = (w1 >> 18) & mask;
2890 out[3] = ((w1 >> 59) | (w2 << 5)) & mask;
2891 out[4] = ((w2 >> 36) | (w3 << 28)) & mask;
2892 out[5] = (w3 >> 13) & mask;
2893 out[6] = ((w3 >> 54) | (w4 << 10)) & mask;
2894 out[7] = ((w4 >> 31) | (w5 << 33)) & mask;
2895 out[8] = (w5 >> 8) & mask;
2896 out[9] = ((w5 >> 49) | (w6 << 15)) & mask;
2897 out[10] = ((w6 >> 26) | (w7 << 38)) & mask;
2898 out[11] = (w7 >> 3) & mask;
2899 out[12] = ((w7 >> 44) | (w8 << 20)) & mask;
2900 out[13] = (w8 >> 21) & mask;
2901 out[14] = ((w8 >> 62) | (w9 << 2)) & mask;
2902 out[15] = ((w9 >> 39) | (w10 << 25)) & mask;
2903 out[16] = (w10 >> 16) & mask;
2904 out[17] = ((w10 >> 57) | (w11 << 7)) & mask;
2905 out[18] = ((w11 >> 34) | (w12 << 30)) & mask;
2906 out[19] = (w12 >> 11) & mask;
2907 out[20] = ((w12 >> 52) | (w13 << 12)) & mask;
2908 out[21] = ((w13 >> 29) | (w14 << 35)) & mask;
2909 out[22] = (w14 >> 6) & mask;
2910 out[23] = ((w14 >> 47) | (w15 << 17)) & mask;
2911 out[24] = ((w15 >> 24) | (w16 << 40)) & mask;
2912 out[25] = (w16 >> 1) & mask;
2913 out[26] = ((w16 >> 42) | (w17 << 22)) & mask;
2914 out[27] = (w17 >> 19) & mask;
2915 out[28] = ((w17 >> 60) | (w18 << 4)) & mask;
2916 out[29] = ((w18 >> 37) | (w19 << 27)) & mask;
2917 out[30] = (w19 >> 14) & mask;
2918 out[31] = ((w19 >> 55) | (w20 << 9)) & mask;
2919
2920 return in;
2921 }
2922
2923 inline const uint8_t* unpack42_64(const uint8_t* in, uint64_t* out) {
2924 const uint64_t mask = 4398046511103ULL;
2925 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
2926 w0 = arrow::bit_util::FromLittleEndian(w0);
2927 in += 8;
2928 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
2929 w1 = arrow::bit_util::FromLittleEndian(w1);
2930 in += 8;
2931 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
2932 w2 = arrow::bit_util::FromLittleEndian(w2);
2933 in += 8;
2934 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
2935 w3 = arrow::bit_util::FromLittleEndian(w3);
2936 in += 8;
2937 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
2938 w4 = arrow::bit_util::FromLittleEndian(w4);
2939 in += 8;
2940 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
2941 w5 = arrow::bit_util::FromLittleEndian(w5);
2942 in += 8;
2943 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
2944 w6 = arrow::bit_util::FromLittleEndian(w6);
2945 in += 8;
2946 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
2947 w7 = arrow::bit_util::FromLittleEndian(w7);
2948 in += 8;
2949 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
2950 w8 = arrow::bit_util::FromLittleEndian(w8);
2951 in += 8;
2952 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
2953 w9 = arrow::bit_util::FromLittleEndian(w9);
2954 in += 8;
2955 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
2956 w10 = arrow::bit_util::FromLittleEndian(w10);
2957 in += 8;
2958 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
2959 w11 = arrow::bit_util::FromLittleEndian(w11);
2960 in += 8;
2961 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
2962 w12 = arrow::bit_util::FromLittleEndian(w12);
2963 in += 8;
2964 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
2965 w13 = arrow::bit_util::FromLittleEndian(w13);
2966 in += 8;
2967 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
2968 w14 = arrow::bit_util::FromLittleEndian(w14);
2969 in += 8;
2970 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
2971 w15 = arrow::bit_util::FromLittleEndian(w15);
2972 in += 8;
2973 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
2974 w16 = arrow::bit_util::FromLittleEndian(w16);
2975 in += 8;
2976 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
2977 w17 = arrow::bit_util::FromLittleEndian(w17);
2978 in += 8;
2979 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
2980 w18 = arrow::bit_util::FromLittleEndian(w18);
2981 in += 8;
2982 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
2983 w19 = arrow::bit_util::FromLittleEndian(w19);
2984 in += 8;
2985 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
2986 w20 = arrow::bit_util::FromLittleEndian(w20);
2987 in += 8;
2988 out[0] = (w0)&mask;
2989 out[1] = ((w0 >> 42) | (w1 << 22)) & mask;
2990 out[2] = (w1 >> 20) & mask;
2991 out[3] = ((w1 >> 62) | (w2 << 2)) & mask;
2992 out[4] = ((w2 >> 40) | (w3 << 24)) & mask;
2993 out[5] = (w3 >> 18) & mask;
2994 out[6] = ((w3 >> 60) | (w4 << 4)) & mask;
2995 out[7] = ((w4 >> 38) | (w5 << 26)) & mask;
2996 out[8] = (w5 >> 16) & mask;
2997 out[9] = ((w5 >> 58) | (w6 << 6)) & mask;
2998 out[10] = ((w6 >> 36) | (w7 << 28)) & mask;
2999 out[11] = (w7 >> 14) & mask;
3000 out[12] = ((w7 >> 56) | (w8 << 8)) & mask;
3001 out[13] = ((w8 >> 34) | (w9 << 30)) & mask;
3002 out[14] = (w9 >> 12) & mask;
3003 out[15] = ((w9 >> 54) | (w10 << 10)) & mask;
3004 out[16] = ((w10 >> 32) | (w11 << 32)) & mask;
3005 out[17] = (w11 >> 10) & mask;
3006 out[18] = ((w11 >> 52) | (w12 << 12)) & mask;
3007 out[19] = ((w12 >> 30) | (w13 << 34)) & mask;
3008 out[20] = (w13 >> 8) & mask;
3009 out[21] = ((w13 >> 50) | (w14 << 14)) & mask;
3010 out[22] = ((w14 >> 28) | (w15 << 36)) & mask;
3011 out[23] = (w15 >> 6) & mask;
3012 out[24] = ((w15 >> 48) | (w16 << 16)) & mask;
3013 out[25] = ((w16 >> 26) | (w17 << 38)) & mask;
3014 out[26] = (w17 >> 4) & mask;
3015 out[27] = ((w17 >> 46) | (w18 << 18)) & mask;
3016 out[28] = ((w18 >> 24) | (w19 << 40)) & mask;
3017 out[29] = (w19 >> 2) & mask;
3018 out[30] = ((w19 >> 44) | (w20 << 20)) & mask;
3019 out[31] = w20 >> 22;
3020
3021 return in;
3022 }
3023
3024 inline const uint8_t* unpack43_64(const uint8_t* in, uint64_t* out) {
3025 const uint64_t mask = 8796093022207ULL;
3026 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3027 w0 = arrow::bit_util::FromLittleEndian(w0);
3028 in += 8;
3029 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3030 w1 = arrow::bit_util::FromLittleEndian(w1);
3031 in += 8;
3032 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3033 w2 = arrow::bit_util::FromLittleEndian(w2);
3034 in += 8;
3035 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3036 w3 = arrow::bit_util::FromLittleEndian(w3);
3037 in += 8;
3038 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3039 w4 = arrow::bit_util::FromLittleEndian(w4);
3040 in += 8;
3041 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3042 w5 = arrow::bit_util::FromLittleEndian(w5);
3043 in += 8;
3044 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3045 w6 = arrow::bit_util::FromLittleEndian(w6);
3046 in += 8;
3047 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3048 w7 = arrow::bit_util::FromLittleEndian(w7);
3049 in += 8;
3050 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3051 w8 = arrow::bit_util::FromLittleEndian(w8);
3052 in += 8;
3053 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3054 w9 = arrow::bit_util::FromLittleEndian(w9);
3055 in += 8;
3056 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3057 w10 = arrow::bit_util::FromLittleEndian(w10);
3058 in += 8;
3059 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3060 w11 = arrow::bit_util::FromLittleEndian(w11);
3061 in += 8;
3062 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3063 w12 = arrow::bit_util::FromLittleEndian(w12);
3064 in += 8;
3065 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3066 w13 = arrow::bit_util::FromLittleEndian(w13);
3067 in += 8;
3068 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3069 w14 = arrow::bit_util::FromLittleEndian(w14);
3070 in += 8;
3071 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3072 w15 = arrow::bit_util::FromLittleEndian(w15);
3073 in += 8;
3074 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3075 w16 = arrow::bit_util::FromLittleEndian(w16);
3076 in += 8;
3077 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3078 w17 = arrow::bit_util::FromLittleEndian(w17);
3079 in += 8;
3080 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3081 w18 = arrow::bit_util::FromLittleEndian(w18);
3082 in += 8;
3083 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3084 w19 = arrow::bit_util::FromLittleEndian(w19);
3085 in += 8;
3086 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3087 w20 = arrow::bit_util::FromLittleEndian(w20);
3088 in += 8;
3089 uint64_t w21 = util::SafeLoadAs<uint32_t>(in);
3090 w21 = arrow::bit_util::FromLittleEndian(w21);
3091 in += 4;
3092 out[0] = (w0)&mask;
3093 out[1] = ((w0 >> 43) | (w1 << 21)) & mask;
3094 out[2] = ((w1 >> 22) | (w2 << 42)) & mask;
3095 out[3] = (w2 >> 1) & mask;
3096 out[4] = ((w2 >> 44) | (w3 << 20)) & mask;
3097 out[5] = ((w3 >> 23) | (w4 << 41)) & mask;
3098 out[6] = (w4 >> 2) & mask;
3099 out[7] = ((w4 >> 45) | (w5 << 19)) & mask;
3100 out[8] = ((w5 >> 24) | (w6 << 40)) & mask;
3101 out[9] = (w6 >> 3) & mask;
3102 out[10] = ((w6 >> 46) | (w7 << 18)) & mask;
3103 out[11] = ((w7 >> 25) | (w8 << 39)) & mask;
3104 out[12] = (w8 >> 4) & mask;
3105 out[13] = ((w8 >> 47) | (w9 << 17)) & mask;
3106 out[14] = ((w9 >> 26) | (w10 << 38)) & mask;
3107 out[15] = (w10 >> 5) & mask;
3108 out[16] = ((w10 >> 48) | (w11 << 16)) & mask;
3109 out[17] = ((w11 >> 27) | (w12 << 37)) & mask;
3110 out[18] = (w12 >> 6) & mask;
3111 out[19] = ((w12 >> 49) | (w13 << 15)) & mask;
3112 out[20] = ((w13 >> 28) | (w14 << 36)) & mask;
3113 out[21] = (w14 >> 7) & mask;
3114 out[22] = ((w14 >> 50) | (w15 << 14)) & mask;
3115 out[23] = ((w15 >> 29) | (w16 << 35)) & mask;
3116 out[24] = (w16 >> 8) & mask;
3117 out[25] = ((w16 >> 51) | (w17 << 13)) & mask;
3118 out[26] = ((w17 >> 30) | (w18 << 34)) & mask;
3119 out[27] = (w18 >> 9) & mask;
3120 out[28] = ((w18 >> 52) | (w19 << 12)) & mask;
3121 out[29] = ((w19 >> 31) | (w20 << 33)) & mask;
3122 out[30] = (w20 >> 10) & mask;
3123 out[31] = ((w20 >> 53) | (w21 << 11)) & mask;
3124
3125 return in;
3126 }
3127
3128 inline const uint8_t* unpack44_64(const uint8_t* in, uint64_t* out) {
3129 const uint64_t mask = 17592186044415ULL;
3130 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3131 w0 = arrow::bit_util::FromLittleEndian(w0);
3132 in += 8;
3133 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3134 w1 = arrow::bit_util::FromLittleEndian(w1);
3135 in += 8;
3136 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3137 w2 = arrow::bit_util::FromLittleEndian(w2);
3138 in += 8;
3139 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3140 w3 = arrow::bit_util::FromLittleEndian(w3);
3141 in += 8;
3142 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3143 w4 = arrow::bit_util::FromLittleEndian(w4);
3144 in += 8;
3145 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3146 w5 = arrow::bit_util::FromLittleEndian(w5);
3147 in += 8;
3148 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3149 w6 = arrow::bit_util::FromLittleEndian(w6);
3150 in += 8;
3151 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3152 w7 = arrow::bit_util::FromLittleEndian(w7);
3153 in += 8;
3154 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3155 w8 = arrow::bit_util::FromLittleEndian(w8);
3156 in += 8;
3157 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3158 w9 = arrow::bit_util::FromLittleEndian(w9);
3159 in += 8;
3160 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3161 w10 = arrow::bit_util::FromLittleEndian(w10);
3162 in += 8;
3163 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3164 w11 = arrow::bit_util::FromLittleEndian(w11);
3165 in += 8;
3166 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3167 w12 = arrow::bit_util::FromLittleEndian(w12);
3168 in += 8;
3169 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3170 w13 = arrow::bit_util::FromLittleEndian(w13);
3171 in += 8;
3172 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3173 w14 = arrow::bit_util::FromLittleEndian(w14);
3174 in += 8;
3175 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3176 w15 = arrow::bit_util::FromLittleEndian(w15);
3177 in += 8;
3178 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3179 w16 = arrow::bit_util::FromLittleEndian(w16);
3180 in += 8;
3181 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3182 w17 = arrow::bit_util::FromLittleEndian(w17);
3183 in += 8;
3184 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3185 w18 = arrow::bit_util::FromLittleEndian(w18);
3186 in += 8;
3187 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3188 w19 = arrow::bit_util::FromLittleEndian(w19);
3189 in += 8;
3190 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3191 w20 = arrow::bit_util::FromLittleEndian(w20);
3192 in += 8;
3193 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3194 w21 = arrow::bit_util::FromLittleEndian(w21);
3195 in += 8;
3196 out[0] = (w0)&mask;
3197 out[1] = ((w0 >> 44) | (w1 << 20)) & mask;
3198 out[2] = ((w1 >> 24) | (w2 << 40)) & mask;
3199 out[3] = (w2 >> 4) & mask;
3200 out[4] = ((w2 >> 48) | (w3 << 16)) & mask;
3201 out[5] = ((w3 >> 28) | (w4 << 36)) & mask;
3202 out[6] = (w4 >> 8) & mask;
3203 out[7] = ((w4 >> 52) | (w5 << 12)) & mask;
3204 out[8] = ((w5 >> 32) | (w6 << 32)) & mask;
3205 out[9] = (w6 >> 12) & mask;
3206 out[10] = ((w6 >> 56) | (w7 << 8)) & mask;
3207 out[11] = ((w7 >> 36) | (w8 << 28)) & mask;
3208 out[12] = (w8 >> 16) & mask;
3209 out[13] = ((w8 >> 60) | (w9 << 4)) & mask;
3210 out[14] = ((w9 >> 40) | (w10 << 24)) & mask;
3211 out[15] = w10 >> 20;
3212 out[16] = (w11)&mask;
3213 out[17] = ((w11 >> 44) | (w12 << 20)) & mask;
3214 out[18] = ((w12 >> 24) | (w13 << 40)) & mask;
3215 out[19] = (w13 >> 4) & mask;
3216 out[20] = ((w13 >> 48) | (w14 << 16)) & mask;
3217 out[21] = ((w14 >> 28) | (w15 << 36)) & mask;
3218 out[22] = (w15 >> 8) & mask;
3219 out[23] = ((w15 >> 52) | (w16 << 12)) & mask;
3220 out[24] = ((w16 >> 32) | (w17 << 32)) & mask;
3221 out[25] = (w17 >> 12) & mask;
3222 out[26] = ((w17 >> 56) | (w18 << 8)) & mask;
3223 out[27] = ((w18 >> 36) | (w19 << 28)) & mask;
3224 out[28] = (w19 >> 16) & mask;
3225 out[29] = ((w19 >> 60) | (w20 << 4)) & mask;
3226 out[30] = ((w20 >> 40) | (w21 << 24)) & mask;
3227 out[31] = w21 >> 20;
3228
3229 return in;
3230 }
3231
3232 inline const uint8_t* unpack45_64(const uint8_t* in, uint64_t* out) {
3233 const uint64_t mask = 35184372088831ULL;
3234 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3235 w0 = arrow::bit_util::FromLittleEndian(w0);
3236 in += 8;
3237 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3238 w1 = arrow::bit_util::FromLittleEndian(w1);
3239 in += 8;
3240 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3241 w2 = arrow::bit_util::FromLittleEndian(w2);
3242 in += 8;
3243 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3244 w3 = arrow::bit_util::FromLittleEndian(w3);
3245 in += 8;
3246 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3247 w4 = arrow::bit_util::FromLittleEndian(w4);
3248 in += 8;
3249 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3250 w5 = arrow::bit_util::FromLittleEndian(w5);
3251 in += 8;
3252 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3253 w6 = arrow::bit_util::FromLittleEndian(w6);
3254 in += 8;
3255 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3256 w7 = arrow::bit_util::FromLittleEndian(w7);
3257 in += 8;
3258 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3259 w8 = arrow::bit_util::FromLittleEndian(w8);
3260 in += 8;
3261 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3262 w9 = arrow::bit_util::FromLittleEndian(w9);
3263 in += 8;
3264 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3265 w10 = arrow::bit_util::FromLittleEndian(w10);
3266 in += 8;
3267 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3268 w11 = arrow::bit_util::FromLittleEndian(w11);
3269 in += 8;
3270 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3271 w12 = arrow::bit_util::FromLittleEndian(w12);
3272 in += 8;
3273 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3274 w13 = arrow::bit_util::FromLittleEndian(w13);
3275 in += 8;
3276 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3277 w14 = arrow::bit_util::FromLittleEndian(w14);
3278 in += 8;
3279 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3280 w15 = arrow::bit_util::FromLittleEndian(w15);
3281 in += 8;
3282 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3283 w16 = arrow::bit_util::FromLittleEndian(w16);
3284 in += 8;
3285 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3286 w17 = arrow::bit_util::FromLittleEndian(w17);
3287 in += 8;
3288 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3289 w18 = arrow::bit_util::FromLittleEndian(w18);
3290 in += 8;
3291 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3292 w19 = arrow::bit_util::FromLittleEndian(w19);
3293 in += 8;
3294 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3295 w20 = arrow::bit_util::FromLittleEndian(w20);
3296 in += 8;
3297 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3298 w21 = arrow::bit_util::FromLittleEndian(w21);
3299 in += 8;
3300 uint64_t w22 = util::SafeLoadAs<uint32_t>(in);
3301 w22 = arrow::bit_util::FromLittleEndian(w22);
3302 in += 4;
3303 out[0] = (w0)&mask;
3304 out[1] = ((w0 >> 45) | (w1 << 19)) & mask;
3305 out[2] = ((w1 >> 26) | (w2 << 38)) & mask;
3306 out[3] = (w2 >> 7) & mask;
3307 out[4] = ((w2 >> 52) | (w3 << 12)) & mask;
3308 out[5] = ((w3 >> 33) | (w4 << 31)) & mask;
3309 out[6] = (w4 >> 14) & mask;
3310 out[7] = ((w4 >> 59) | (w5 << 5)) & mask;
3311 out[8] = ((w5 >> 40) | (w6 << 24)) & mask;
3312 out[9] = ((w6 >> 21) | (w7 << 43)) & mask;
3313 out[10] = (w7 >> 2) & mask;
3314 out[11] = ((w7 >> 47) | (w8 << 17)) & mask;
3315 out[12] = ((w8 >> 28) | (w9 << 36)) & mask;
3316 out[13] = (w9 >> 9) & mask;
3317 out[14] = ((w9 >> 54) | (w10 << 10)) & mask;
3318 out[15] = ((w10 >> 35) | (w11 << 29)) & mask;
3319 out[16] = (w11 >> 16) & mask;
3320 out[17] = ((w11 >> 61) | (w12 << 3)) & mask;
3321 out[18] = ((w12 >> 42) | (w13 << 22)) & mask;
3322 out[19] = ((w13 >> 23) | (w14 << 41)) & mask;
3323 out[20] = (w14 >> 4) & mask;
3324 out[21] = ((w14 >> 49) | (w15 << 15)) & mask;
3325 out[22] = ((w15 >> 30) | (w16 << 34)) & mask;
3326 out[23] = (w16 >> 11) & mask;
3327 out[24] = ((w16 >> 56) | (w17 << 8)) & mask;
3328 out[25] = ((w17 >> 37) | (w18 << 27)) & mask;
3329 out[26] = (w18 >> 18) & mask;
3330 out[27] = ((w18 >> 63) | (w19 << 1)) & mask;
3331 out[28] = ((w19 >> 44) | (w20 << 20)) & mask;
3332 out[29] = ((w20 >> 25) | (w21 << 39)) & mask;
3333 out[30] = (w21 >> 6) & mask;
3334 out[31] = ((w21 >> 51) | (w22 << 13)) & mask;
3335
3336 return in;
3337 }
3338
3339 inline const uint8_t* unpack46_64(const uint8_t* in, uint64_t* out) {
3340 const uint64_t mask = 70368744177663ULL;
3341 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3342 w0 = arrow::bit_util::FromLittleEndian(w0);
3343 in += 8;
3344 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3345 w1 = arrow::bit_util::FromLittleEndian(w1);
3346 in += 8;
3347 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3348 w2 = arrow::bit_util::FromLittleEndian(w2);
3349 in += 8;
3350 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3351 w3 = arrow::bit_util::FromLittleEndian(w3);
3352 in += 8;
3353 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3354 w4 = arrow::bit_util::FromLittleEndian(w4);
3355 in += 8;
3356 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3357 w5 = arrow::bit_util::FromLittleEndian(w5);
3358 in += 8;
3359 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3360 w6 = arrow::bit_util::FromLittleEndian(w6);
3361 in += 8;
3362 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3363 w7 = arrow::bit_util::FromLittleEndian(w7);
3364 in += 8;
3365 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3366 w8 = arrow::bit_util::FromLittleEndian(w8);
3367 in += 8;
3368 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3369 w9 = arrow::bit_util::FromLittleEndian(w9);
3370 in += 8;
3371 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3372 w10 = arrow::bit_util::FromLittleEndian(w10);
3373 in += 8;
3374 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3375 w11 = arrow::bit_util::FromLittleEndian(w11);
3376 in += 8;
3377 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3378 w12 = arrow::bit_util::FromLittleEndian(w12);
3379 in += 8;
3380 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3381 w13 = arrow::bit_util::FromLittleEndian(w13);
3382 in += 8;
3383 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3384 w14 = arrow::bit_util::FromLittleEndian(w14);
3385 in += 8;
3386 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3387 w15 = arrow::bit_util::FromLittleEndian(w15);
3388 in += 8;
3389 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3390 w16 = arrow::bit_util::FromLittleEndian(w16);
3391 in += 8;
3392 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3393 w17 = arrow::bit_util::FromLittleEndian(w17);
3394 in += 8;
3395 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3396 w18 = arrow::bit_util::FromLittleEndian(w18);
3397 in += 8;
3398 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3399 w19 = arrow::bit_util::FromLittleEndian(w19);
3400 in += 8;
3401 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3402 w20 = arrow::bit_util::FromLittleEndian(w20);
3403 in += 8;
3404 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3405 w21 = arrow::bit_util::FromLittleEndian(w21);
3406 in += 8;
3407 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3408 w22 = arrow::bit_util::FromLittleEndian(w22);
3409 in += 8;
3410 out[0] = (w0)&mask;
3411 out[1] = ((w0 >> 46) | (w1 << 18)) & mask;
3412 out[2] = ((w1 >> 28) | (w2 << 36)) & mask;
3413 out[3] = (w2 >> 10) & mask;
3414 out[4] = ((w2 >> 56) | (w3 << 8)) & mask;
3415 out[5] = ((w3 >> 38) | (w4 << 26)) & mask;
3416 out[6] = ((w4 >> 20) | (w5 << 44)) & mask;
3417 out[7] = (w5 >> 2) & mask;
3418 out[8] = ((w5 >> 48) | (w6 << 16)) & mask;
3419 out[9] = ((w6 >> 30) | (w7 << 34)) & mask;
3420 out[10] = (w7 >> 12) & mask;
3421 out[11] = ((w7 >> 58) | (w8 << 6)) & mask;
3422 out[12] = ((w8 >> 40) | (w9 << 24)) & mask;
3423 out[13] = ((w9 >> 22) | (w10 << 42)) & mask;
3424 out[14] = (w10 >> 4) & mask;
3425 out[15] = ((w10 >> 50) | (w11 << 14)) & mask;
3426 out[16] = ((w11 >> 32) | (w12 << 32)) & mask;
3427 out[17] = (w12 >> 14) & mask;
3428 out[18] = ((w12 >> 60) | (w13 << 4)) & mask;
3429 out[19] = ((w13 >> 42) | (w14 << 22)) & mask;
3430 out[20] = ((w14 >> 24) | (w15 << 40)) & mask;
3431 out[21] = (w15 >> 6) & mask;
3432 out[22] = ((w15 >> 52) | (w16 << 12)) & mask;
3433 out[23] = ((w16 >> 34) | (w17 << 30)) & mask;
3434 out[24] = (w17 >> 16) & mask;
3435 out[25] = ((w17 >> 62) | (w18 << 2)) & mask;
3436 out[26] = ((w18 >> 44) | (w19 << 20)) & mask;
3437 out[27] = ((w19 >> 26) | (w20 << 38)) & mask;
3438 out[28] = (w20 >> 8) & mask;
3439 out[29] = ((w20 >> 54) | (w21 << 10)) & mask;
3440 out[30] = ((w21 >> 36) | (w22 << 28)) & mask;
3441 out[31] = w22 >> 18;
3442
3443 return in;
3444 }
3445
3446 inline const uint8_t* unpack47_64(const uint8_t* in, uint64_t* out) {
3447 const uint64_t mask = 140737488355327ULL;
3448 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3449 w0 = arrow::bit_util::FromLittleEndian(w0);
3450 in += 8;
3451 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3452 w1 = arrow::bit_util::FromLittleEndian(w1);
3453 in += 8;
3454 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3455 w2 = arrow::bit_util::FromLittleEndian(w2);
3456 in += 8;
3457 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3458 w3 = arrow::bit_util::FromLittleEndian(w3);
3459 in += 8;
3460 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3461 w4 = arrow::bit_util::FromLittleEndian(w4);
3462 in += 8;
3463 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3464 w5 = arrow::bit_util::FromLittleEndian(w5);
3465 in += 8;
3466 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3467 w6 = arrow::bit_util::FromLittleEndian(w6);
3468 in += 8;
3469 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3470 w7 = arrow::bit_util::FromLittleEndian(w7);
3471 in += 8;
3472 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3473 w8 = arrow::bit_util::FromLittleEndian(w8);
3474 in += 8;
3475 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3476 w9 = arrow::bit_util::FromLittleEndian(w9);
3477 in += 8;
3478 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3479 w10 = arrow::bit_util::FromLittleEndian(w10);
3480 in += 8;
3481 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3482 w11 = arrow::bit_util::FromLittleEndian(w11);
3483 in += 8;
3484 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3485 w12 = arrow::bit_util::FromLittleEndian(w12);
3486 in += 8;
3487 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3488 w13 = arrow::bit_util::FromLittleEndian(w13);
3489 in += 8;
3490 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3491 w14 = arrow::bit_util::FromLittleEndian(w14);
3492 in += 8;
3493 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3494 w15 = arrow::bit_util::FromLittleEndian(w15);
3495 in += 8;
3496 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3497 w16 = arrow::bit_util::FromLittleEndian(w16);
3498 in += 8;
3499 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3500 w17 = arrow::bit_util::FromLittleEndian(w17);
3501 in += 8;
3502 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3503 w18 = arrow::bit_util::FromLittleEndian(w18);
3504 in += 8;
3505 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3506 w19 = arrow::bit_util::FromLittleEndian(w19);
3507 in += 8;
3508 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3509 w20 = arrow::bit_util::FromLittleEndian(w20);
3510 in += 8;
3511 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3512 w21 = arrow::bit_util::FromLittleEndian(w21);
3513 in += 8;
3514 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3515 w22 = arrow::bit_util::FromLittleEndian(w22);
3516 in += 8;
3517 uint64_t w23 = util::SafeLoadAs<uint32_t>(in);
3518 w23 = arrow::bit_util::FromLittleEndian(w23);
3519 in += 4;
3520 out[0] = (w0)&mask;
3521 out[1] = ((w0 >> 47) | (w1 << 17)) & mask;
3522 out[2] = ((w1 >> 30) | (w2 << 34)) & mask;
3523 out[3] = (w2 >> 13) & mask;
3524 out[4] = ((w2 >> 60) | (w3 << 4)) & mask;
3525 out[5] = ((w3 >> 43) | (w4 << 21)) & mask;
3526 out[6] = ((w4 >> 26) | (w5 << 38)) & mask;
3527 out[7] = (w5 >> 9) & mask;
3528 out[8] = ((w5 >> 56) | (w6 << 8)) & mask;
3529 out[9] = ((w6 >> 39) | (w7 << 25)) & mask;
3530 out[10] = ((w7 >> 22) | (w8 << 42)) & mask;
3531 out[11] = (w8 >> 5) & mask;
3532 out[12] = ((w8 >> 52) | (w9 << 12)) & mask;
3533 out[13] = ((w9 >> 35) | (w10 << 29)) & mask;
3534 out[14] = ((w10 >> 18) | (w11 << 46)) & mask;
3535 out[15] = (w11 >> 1) & mask;
3536 out[16] = ((w11 >> 48) | (w12 << 16)) & mask;
3537 out[17] = ((w12 >> 31) | (w13 << 33)) & mask;
3538 out[18] = (w13 >> 14) & mask;
3539 out[19] = ((w13 >> 61) | (w14 << 3)) & mask;
3540 out[20] = ((w14 >> 44) | (w15 << 20)) & mask;
3541 out[21] = ((w15 >> 27) | (w16 << 37)) & mask;
3542 out[22] = (w16 >> 10) & mask;
3543 out[23] = ((w16 >> 57) | (w17 << 7)) & mask;
3544 out[24] = ((w17 >> 40) | (w18 << 24)) & mask;
3545 out[25] = ((w18 >> 23) | (w19 << 41)) & mask;
3546 out[26] = (w19 >> 6) & mask;
3547 out[27] = ((w19 >> 53) | (w20 << 11)) & mask;
3548 out[28] = ((w20 >> 36) | (w21 << 28)) & mask;
3549 out[29] = ((w21 >> 19) | (w22 << 45)) & mask;
3550 out[30] = (w22 >> 2) & mask;
3551 out[31] = ((w22 >> 49) | (w23 << 15)) & mask;
3552
3553 return in;
3554 }
3555
3556 inline const uint8_t* unpack48_64(const uint8_t* in, uint64_t* out) {
3557 const uint64_t mask = 281474976710655ULL;
3558 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3559 w0 = arrow::bit_util::FromLittleEndian(w0);
3560 in += 8;
3561 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3562 w1 = arrow::bit_util::FromLittleEndian(w1);
3563 in += 8;
3564 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3565 w2 = arrow::bit_util::FromLittleEndian(w2);
3566 in += 8;
3567 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3568 w3 = arrow::bit_util::FromLittleEndian(w3);
3569 in += 8;
3570 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3571 w4 = arrow::bit_util::FromLittleEndian(w4);
3572 in += 8;
3573 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3574 w5 = arrow::bit_util::FromLittleEndian(w5);
3575 in += 8;
3576 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3577 w6 = arrow::bit_util::FromLittleEndian(w6);
3578 in += 8;
3579 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3580 w7 = arrow::bit_util::FromLittleEndian(w7);
3581 in += 8;
3582 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3583 w8 = arrow::bit_util::FromLittleEndian(w8);
3584 in += 8;
3585 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3586 w9 = arrow::bit_util::FromLittleEndian(w9);
3587 in += 8;
3588 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3589 w10 = arrow::bit_util::FromLittleEndian(w10);
3590 in += 8;
3591 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3592 w11 = arrow::bit_util::FromLittleEndian(w11);
3593 in += 8;
3594 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3595 w12 = arrow::bit_util::FromLittleEndian(w12);
3596 in += 8;
3597 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3598 w13 = arrow::bit_util::FromLittleEndian(w13);
3599 in += 8;
3600 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3601 w14 = arrow::bit_util::FromLittleEndian(w14);
3602 in += 8;
3603 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3604 w15 = arrow::bit_util::FromLittleEndian(w15);
3605 in += 8;
3606 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3607 w16 = arrow::bit_util::FromLittleEndian(w16);
3608 in += 8;
3609 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3610 w17 = arrow::bit_util::FromLittleEndian(w17);
3611 in += 8;
3612 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3613 w18 = arrow::bit_util::FromLittleEndian(w18);
3614 in += 8;
3615 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3616 w19 = arrow::bit_util::FromLittleEndian(w19);
3617 in += 8;
3618 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3619 w20 = arrow::bit_util::FromLittleEndian(w20);
3620 in += 8;
3621 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3622 w21 = arrow::bit_util::FromLittleEndian(w21);
3623 in += 8;
3624 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3625 w22 = arrow::bit_util::FromLittleEndian(w22);
3626 in += 8;
3627 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
3628 w23 = arrow::bit_util::FromLittleEndian(w23);
3629 in += 8;
3630 out[0] = (w0)&mask;
3631 out[1] = ((w0 >> 48) | (w1 << 16)) & mask;
3632 out[2] = ((w1 >> 32) | (w2 << 32)) & mask;
3633 out[3] = w2 >> 16;
3634 out[4] = (w3)&mask;
3635 out[5] = ((w3 >> 48) | (w4 << 16)) & mask;
3636 out[6] = ((w4 >> 32) | (w5 << 32)) & mask;
3637 out[7] = w5 >> 16;
3638 out[8] = (w6)&mask;
3639 out[9] = ((w6 >> 48) | (w7 << 16)) & mask;
3640 out[10] = ((w7 >> 32) | (w8 << 32)) & mask;
3641 out[11] = w8 >> 16;
3642 out[12] = (w9)&mask;
3643 out[13] = ((w9 >> 48) | (w10 << 16)) & mask;
3644 out[14] = ((w10 >> 32) | (w11 << 32)) & mask;
3645 out[15] = w11 >> 16;
3646 out[16] = (w12)&mask;
3647 out[17] = ((w12 >> 48) | (w13 << 16)) & mask;
3648 out[18] = ((w13 >> 32) | (w14 << 32)) & mask;
3649 out[19] = w14 >> 16;
3650 out[20] = (w15)&mask;
3651 out[21] = ((w15 >> 48) | (w16 << 16)) & mask;
3652 out[22] = ((w16 >> 32) | (w17 << 32)) & mask;
3653 out[23] = w17 >> 16;
3654 out[24] = (w18)&mask;
3655 out[25] = ((w18 >> 48) | (w19 << 16)) & mask;
3656 out[26] = ((w19 >> 32) | (w20 << 32)) & mask;
3657 out[27] = w20 >> 16;
3658 out[28] = (w21)&mask;
3659 out[29] = ((w21 >> 48) | (w22 << 16)) & mask;
3660 out[30] = ((w22 >> 32) | (w23 << 32)) & mask;
3661 out[31] = w23 >> 16;
3662
3663 return in;
3664 }
3665
3666 inline const uint8_t* unpack49_64(const uint8_t* in, uint64_t* out) {
3667 const uint64_t mask = 562949953421311ULL;
3668 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3669 w0 = arrow::bit_util::FromLittleEndian(w0);
3670 in += 8;
3671 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3672 w1 = arrow::bit_util::FromLittleEndian(w1);
3673 in += 8;
3674 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3675 w2 = arrow::bit_util::FromLittleEndian(w2);
3676 in += 8;
3677 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3678 w3 = arrow::bit_util::FromLittleEndian(w3);
3679 in += 8;
3680 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3681 w4 = arrow::bit_util::FromLittleEndian(w4);
3682 in += 8;
3683 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3684 w5 = arrow::bit_util::FromLittleEndian(w5);
3685 in += 8;
3686 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3687 w6 = arrow::bit_util::FromLittleEndian(w6);
3688 in += 8;
3689 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3690 w7 = arrow::bit_util::FromLittleEndian(w7);
3691 in += 8;
3692 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3693 w8 = arrow::bit_util::FromLittleEndian(w8);
3694 in += 8;
3695 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3696 w9 = arrow::bit_util::FromLittleEndian(w9);
3697 in += 8;
3698 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3699 w10 = arrow::bit_util::FromLittleEndian(w10);
3700 in += 8;
3701 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3702 w11 = arrow::bit_util::FromLittleEndian(w11);
3703 in += 8;
3704 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3705 w12 = arrow::bit_util::FromLittleEndian(w12);
3706 in += 8;
3707 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3708 w13 = arrow::bit_util::FromLittleEndian(w13);
3709 in += 8;
3710 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3711 w14 = arrow::bit_util::FromLittleEndian(w14);
3712 in += 8;
3713 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3714 w15 = arrow::bit_util::FromLittleEndian(w15);
3715 in += 8;
3716 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3717 w16 = arrow::bit_util::FromLittleEndian(w16);
3718 in += 8;
3719 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3720 w17 = arrow::bit_util::FromLittleEndian(w17);
3721 in += 8;
3722 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3723 w18 = arrow::bit_util::FromLittleEndian(w18);
3724 in += 8;
3725 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3726 w19 = arrow::bit_util::FromLittleEndian(w19);
3727 in += 8;
3728 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3729 w20 = arrow::bit_util::FromLittleEndian(w20);
3730 in += 8;
3731 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3732 w21 = arrow::bit_util::FromLittleEndian(w21);
3733 in += 8;
3734 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3735 w22 = arrow::bit_util::FromLittleEndian(w22);
3736 in += 8;
3737 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
3738 w23 = arrow::bit_util::FromLittleEndian(w23);
3739 in += 8;
3740 uint64_t w24 = util::SafeLoadAs<uint32_t>(in);
3741 w24 = arrow::bit_util::FromLittleEndian(w24);
3742 in += 4;
3743 out[0] = (w0)&mask;
3744 out[1] = ((w0 >> 49) | (w1 << 15)) & mask;
3745 out[2] = ((w1 >> 34) | (w2 << 30)) & mask;
3746 out[3] = ((w2 >> 19) | (w3 << 45)) & mask;
3747 out[4] = (w3 >> 4) & mask;
3748 out[5] = ((w3 >> 53) | (w4 << 11)) & mask;
3749 out[6] = ((w4 >> 38) | (w5 << 26)) & mask;
3750 out[7] = ((w5 >> 23) | (w6 << 41)) & mask;
3751 out[8] = (w6 >> 8) & mask;
3752 out[9] = ((w6 >> 57) | (w7 << 7)) & mask;
3753 out[10] = ((w7 >> 42) | (w8 << 22)) & mask;
3754 out[11] = ((w8 >> 27) | (w9 << 37)) & mask;
3755 out[12] = (w9 >> 12) & mask;
3756 out[13] = ((w9 >> 61) | (w10 << 3)) & mask;
3757 out[14] = ((w10 >> 46) | (w11 << 18)) & mask;
3758 out[15] = ((w11 >> 31) | (w12 << 33)) & mask;
3759 out[16] = ((w12 >> 16) | (w13 << 48)) & mask;
3760 out[17] = (w13 >> 1) & mask;
3761 out[18] = ((w13 >> 50) | (w14 << 14)) & mask;
3762 out[19] = ((w14 >> 35) | (w15 << 29)) & mask;
3763 out[20] = ((w15 >> 20) | (w16 << 44)) & mask;
3764 out[21] = (w16 >> 5) & mask;
3765 out[22] = ((w16 >> 54) | (w17 << 10)) & mask;
3766 out[23] = ((w17 >> 39) | (w18 << 25)) & mask;
3767 out[24] = ((w18 >> 24) | (w19 << 40)) & mask;
3768 out[25] = (w19 >> 9) & mask;
3769 out[26] = ((w19 >> 58) | (w20 << 6)) & mask;
3770 out[27] = ((w20 >> 43) | (w21 << 21)) & mask;
3771 out[28] = ((w21 >> 28) | (w22 << 36)) & mask;
3772 out[29] = (w22 >> 13) & mask;
3773 out[30] = ((w22 >> 62) | (w23 << 2)) & mask;
3774 out[31] = ((w23 >> 47) | (w24 << 17)) & mask;
3775
3776 return in;
3777 }
3778
3779 inline const uint8_t* unpack50_64(const uint8_t* in, uint64_t* out) {
3780 const uint64_t mask = 1125899906842623ULL;
3781 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3782 w0 = arrow::bit_util::FromLittleEndian(w0);
3783 in += 8;
3784 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3785 w1 = arrow::bit_util::FromLittleEndian(w1);
3786 in += 8;
3787 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3788 w2 = arrow::bit_util::FromLittleEndian(w2);
3789 in += 8;
3790 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3791 w3 = arrow::bit_util::FromLittleEndian(w3);
3792 in += 8;
3793 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3794 w4 = arrow::bit_util::FromLittleEndian(w4);
3795 in += 8;
3796 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3797 w5 = arrow::bit_util::FromLittleEndian(w5);
3798 in += 8;
3799 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3800 w6 = arrow::bit_util::FromLittleEndian(w6);
3801 in += 8;
3802 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3803 w7 = arrow::bit_util::FromLittleEndian(w7);
3804 in += 8;
3805 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3806 w8 = arrow::bit_util::FromLittleEndian(w8);
3807 in += 8;
3808 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3809 w9 = arrow::bit_util::FromLittleEndian(w9);
3810 in += 8;
3811 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3812 w10 = arrow::bit_util::FromLittleEndian(w10);
3813 in += 8;
3814 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3815 w11 = arrow::bit_util::FromLittleEndian(w11);
3816 in += 8;
3817 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3818 w12 = arrow::bit_util::FromLittleEndian(w12);
3819 in += 8;
3820 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3821 w13 = arrow::bit_util::FromLittleEndian(w13);
3822 in += 8;
3823 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3824 w14 = arrow::bit_util::FromLittleEndian(w14);
3825 in += 8;
3826 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3827 w15 = arrow::bit_util::FromLittleEndian(w15);
3828 in += 8;
3829 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3830 w16 = arrow::bit_util::FromLittleEndian(w16);
3831 in += 8;
3832 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3833 w17 = arrow::bit_util::FromLittleEndian(w17);
3834 in += 8;
3835 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3836 w18 = arrow::bit_util::FromLittleEndian(w18);
3837 in += 8;
3838 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3839 w19 = arrow::bit_util::FromLittleEndian(w19);
3840 in += 8;
3841 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3842 w20 = arrow::bit_util::FromLittleEndian(w20);
3843 in += 8;
3844 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3845 w21 = arrow::bit_util::FromLittleEndian(w21);
3846 in += 8;
3847 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3848 w22 = arrow::bit_util::FromLittleEndian(w22);
3849 in += 8;
3850 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
3851 w23 = arrow::bit_util::FromLittleEndian(w23);
3852 in += 8;
3853 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
3854 w24 = arrow::bit_util::FromLittleEndian(w24);
3855 in += 8;
3856 out[0] = (w0)&mask;
3857 out[1] = ((w0 >> 50) | (w1 << 14)) & mask;
3858 out[2] = ((w1 >> 36) | (w2 << 28)) & mask;
3859 out[3] = ((w2 >> 22) | (w3 << 42)) & mask;
3860 out[4] = (w3 >> 8) & mask;
3861 out[5] = ((w3 >> 58) | (w4 << 6)) & mask;
3862 out[6] = ((w4 >> 44) | (w5 << 20)) & mask;
3863 out[7] = ((w5 >> 30) | (w6 << 34)) & mask;
3864 out[8] = ((w6 >> 16) | (w7 << 48)) & mask;
3865 out[9] = (w7 >> 2) & mask;
3866 out[10] = ((w7 >> 52) | (w8 << 12)) & mask;
3867 out[11] = ((w8 >> 38) | (w9 << 26)) & mask;
3868 out[12] = ((w9 >> 24) | (w10 << 40)) & mask;
3869 out[13] = (w10 >> 10) & mask;
3870 out[14] = ((w10 >> 60) | (w11 << 4)) & mask;
3871 out[15] = ((w11 >> 46) | (w12 << 18)) & mask;
3872 out[16] = ((w12 >> 32) | (w13 << 32)) & mask;
3873 out[17] = ((w13 >> 18) | (w14 << 46)) & mask;
3874 out[18] = (w14 >> 4) & mask;
3875 out[19] = ((w14 >> 54) | (w15 << 10)) & mask;
3876 out[20] = ((w15 >> 40) | (w16 << 24)) & mask;
3877 out[21] = ((w16 >> 26) | (w17 << 38)) & mask;
3878 out[22] = (w17 >> 12) & mask;
3879 out[23] = ((w17 >> 62) | (w18 << 2)) & mask;
3880 out[24] = ((w18 >> 48) | (w19 << 16)) & mask;
3881 out[25] = ((w19 >> 34) | (w20 << 30)) & mask;
3882 out[26] = ((w20 >> 20) | (w21 << 44)) & mask;
3883 out[27] = (w21 >> 6) & mask;
3884 out[28] = ((w21 >> 56) | (w22 << 8)) & mask;
3885 out[29] = ((w22 >> 42) | (w23 << 22)) & mask;
3886 out[30] = ((w23 >> 28) | (w24 << 36)) & mask;
3887 out[31] = w24 >> 14;
3888
3889 return in;
3890 }
3891
3892 inline const uint8_t* unpack51_64(const uint8_t* in, uint64_t* out) {
3893 const uint64_t mask = 2251799813685247ULL;
3894 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
3895 w0 = arrow::bit_util::FromLittleEndian(w0);
3896 in += 8;
3897 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
3898 w1 = arrow::bit_util::FromLittleEndian(w1);
3899 in += 8;
3900 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
3901 w2 = arrow::bit_util::FromLittleEndian(w2);
3902 in += 8;
3903 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
3904 w3 = arrow::bit_util::FromLittleEndian(w3);
3905 in += 8;
3906 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
3907 w4 = arrow::bit_util::FromLittleEndian(w4);
3908 in += 8;
3909 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
3910 w5 = arrow::bit_util::FromLittleEndian(w5);
3911 in += 8;
3912 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
3913 w6 = arrow::bit_util::FromLittleEndian(w6);
3914 in += 8;
3915 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
3916 w7 = arrow::bit_util::FromLittleEndian(w7);
3917 in += 8;
3918 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
3919 w8 = arrow::bit_util::FromLittleEndian(w8);
3920 in += 8;
3921 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
3922 w9 = arrow::bit_util::FromLittleEndian(w9);
3923 in += 8;
3924 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
3925 w10 = arrow::bit_util::FromLittleEndian(w10);
3926 in += 8;
3927 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
3928 w11 = arrow::bit_util::FromLittleEndian(w11);
3929 in += 8;
3930 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
3931 w12 = arrow::bit_util::FromLittleEndian(w12);
3932 in += 8;
3933 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
3934 w13 = arrow::bit_util::FromLittleEndian(w13);
3935 in += 8;
3936 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
3937 w14 = arrow::bit_util::FromLittleEndian(w14);
3938 in += 8;
3939 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
3940 w15 = arrow::bit_util::FromLittleEndian(w15);
3941 in += 8;
3942 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
3943 w16 = arrow::bit_util::FromLittleEndian(w16);
3944 in += 8;
3945 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
3946 w17 = arrow::bit_util::FromLittleEndian(w17);
3947 in += 8;
3948 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
3949 w18 = arrow::bit_util::FromLittleEndian(w18);
3950 in += 8;
3951 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
3952 w19 = arrow::bit_util::FromLittleEndian(w19);
3953 in += 8;
3954 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
3955 w20 = arrow::bit_util::FromLittleEndian(w20);
3956 in += 8;
3957 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
3958 w21 = arrow::bit_util::FromLittleEndian(w21);
3959 in += 8;
3960 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
3961 w22 = arrow::bit_util::FromLittleEndian(w22);
3962 in += 8;
3963 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
3964 w23 = arrow::bit_util::FromLittleEndian(w23);
3965 in += 8;
3966 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
3967 w24 = arrow::bit_util::FromLittleEndian(w24);
3968 in += 8;
3969 uint64_t w25 = util::SafeLoadAs<uint32_t>(in);
3970 w25 = arrow::bit_util::FromLittleEndian(w25);
3971 in += 4;
3972 out[0] = (w0)&mask;
3973 out[1] = ((w0 >> 51) | (w1 << 13)) & mask;
3974 out[2] = ((w1 >> 38) | (w2 << 26)) & mask;
3975 out[3] = ((w2 >> 25) | (w3 << 39)) & mask;
3976 out[4] = (w3 >> 12) & mask;
3977 out[5] = ((w3 >> 63) | (w4 << 1)) & mask;
3978 out[6] = ((w4 >> 50) | (w5 << 14)) & mask;
3979 out[7] = ((w5 >> 37) | (w6 << 27)) & mask;
3980 out[8] = ((w6 >> 24) | (w7 << 40)) & mask;
3981 out[9] = (w7 >> 11) & mask;
3982 out[10] = ((w7 >> 62) | (w8 << 2)) & mask;
3983 out[11] = ((w8 >> 49) | (w9 << 15)) & mask;
3984 out[12] = ((w9 >> 36) | (w10 << 28)) & mask;
3985 out[13] = ((w10 >> 23) | (w11 << 41)) & mask;
3986 out[14] = (w11 >> 10) & mask;
3987 out[15] = ((w11 >> 61) | (w12 << 3)) & mask;
3988 out[16] = ((w12 >> 48) | (w13 << 16)) & mask;
3989 out[17] = ((w13 >> 35) | (w14 << 29)) & mask;
3990 out[18] = ((w14 >> 22) | (w15 << 42)) & mask;
3991 out[19] = (w15 >> 9) & mask;
3992 out[20] = ((w15 >> 60) | (w16 << 4)) & mask;
3993 out[21] = ((w16 >> 47) | (w17 << 17)) & mask;
3994 out[22] = ((w17 >> 34) | (w18 << 30)) & mask;
3995 out[23] = ((w18 >> 21) | (w19 << 43)) & mask;
3996 out[24] = (w19 >> 8) & mask;
3997 out[25] = ((w19 >> 59) | (w20 << 5)) & mask;
3998 out[26] = ((w20 >> 46) | (w21 << 18)) & mask;
3999 out[27] = ((w21 >> 33) | (w22 << 31)) & mask;
4000 out[28] = ((w22 >> 20) | (w23 << 44)) & mask;
4001 out[29] = (w23 >> 7) & mask;
4002 out[30] = ((w23 >> 58) | (w24 << 6)) & mask;
4003 out[31] = ((w24 >> 45) | (w25 << 19)) & mask;
4004
4005 return in;
4006 }
4007
4008 inline const uint8_t* unpack52_64(const uint8_t* in, uint64_t* out) {
4009 const uint64_t mask = 4503599627370495ULL;
4010 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4011 w0 = arrow::bit_util::FromLittleEndian(w0);
4012 in += 8;
4013 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4014 w1 = arrow::bit_util::FromLittleEndian(w1);
4015 in += 8;
4016 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4017 w2 = arrow::bit_util::FromLittleEndian(w2);
4018 in += 8;
4019 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4020 w3 = arrow::bit_util::FromLittleEndian(w3);
4021 in += 8;
4022 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4023 w4 = arrow::bit_util::FromLittleEndian(w4);
4024 in += 8;
4025 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4026 w5 = arrow::bit_util::FromLittleEndian(w5);
4027 in += 8;
4028 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4029 w6 = arrow::bit_util::FromLittleEndian(w6);
4030 in += 8;
4031 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4032 w7 = arrow::bit_util::FromLittleEndian(w7);
4033 in += 8;
4034 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4035 w8 = arrow::bit_util::FromLittleEndian(w8);
4036 in += 8;
4037 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4038 w9 = arrow::bit_util::FromLittleEndian(w9);
4039 in += 8;
4040 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4041 w10 = arrow::bit_util::FromLittleEndian(w10);
4042 in += 8;
4043 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4044 w11 = arrow::bit_util::FromLittleEndian(w11);
4045 in += 8;
4046 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4047 w12 = arrow::bit_util::FromLittleEndian(w12);
4048 in += 8;
4049 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4050 w13 = arrow::bit_util::FromLittleEndian(w13);
4051 in += 8;
4052 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4053 w14 = arrow::bit_util::FromLittleEndian(w14);
4054 in += 8;
4055 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4056 w15 = arrow::bit_util::FromLittleEndian(w15);
4057 in += 8;
4058 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4059 w16 = arrow::bit_util::FromLittleEndian(w16);
4060 in += 8;
4061 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4062 w17 = arrow::bit_util::FromLittleEndian(w17);
4063 in += 8;
4064 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4065 w18 = arrow::bit_util::FromLittleEndian(w18);
4066 in += 8;
4067 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4068 w19 = arrow::bit_util::FromLittleEndian(w19);
4069 in += 8;
4070 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4071 w20 = arrow::bit_util::FromLittleEndian(w20);
4072 in += 8;
4073 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4074 w21 = arrow::bit_util::FromLittleEndian(w21);
4075 in += 8;
4076 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4077 w22 = arrow::bit_util::FromLittleEndian(w22);
4078 in += 8;
4079 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4080 w23 = arrow::bit_util::FromLittleEndian(w23);
4081 in += 8;
4082 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4083 w24 = arrow::bit_util::FromLittleEndian(w24);
4084 in += 8;
4085 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4086 w25 = arrow::bit_util::FromLittleEndian(w25);
4087 in += 8;
4088 out[0] = (w0)&mask;
4089 out[1] = ((w0 >> 52) | (w1 << 12)) & mask;
4090 out[2] = ((w1 >> 40) | (w2 << 24)) & mask;
4091 out[3] = ((w2 >> 28) | (w3 << 36)) & mask;
4092 out[4] = ((w3 >> 16) | (w4 << 48)) & mask;
4093 out[5] = (w4 >> 4) & mask;
4094 out[6] = ((w4 >> 56) | (w5 << 8)) & mask;
4095 out[7] = ((w5 >> 44) | (w6 << 20)) & mask;
4096 out[8] = ((w6 >> 32) | (w7 << 32)) & mask;
4097 out[9] = ((w7 >> 20) | (w8 << 44)) & mask;
4098 out[10] = (w8 >> 8) & mask;
4099 out[11] = ((w8 >> 60) | (w9 << 4)) & mask;
4100 out[12] = ((w9 >> 48) | (w10 << 16)) & mask;
4101 out[13] = ((w10 >> 36) | (w11 << 28)) & mask;
4102 out[14] = ((w11 >> 24) | (w12 << 40)) & mask;
4103 out[15] = w12 >> 12;
4104 out[16] = (w13)&mask;
4105 out[17] = ((w13 >> 52) | (w14 << 12)) & mask;
4106 out[18] = ((w14 >> 40) | (w15 << 24)) & mask;
4107 out[19] = ((w15 >> 28) | (w16 << 36)) & mask;
4108 out[20] = ((w16 >> 16) | (w17 << 48)) & mask;
4109 out[21] = (w17 >> 4) & mask;
4110 out[22] = ((w17 >> 56) | (w18 << 8)) & mask;
4111 out[23] = ((w18 >> 44) | (w19 << 20)) & mask;
4112 out[24] = ((w19 >> 32) | (w20 << 32)) & mask;
4113 out[25] = ((w20 >> 20) | (w21 << 44)) & mask;
4114 out[26] = (w21 >> 8) & mask;
4115 out[27] = ((w21 >> 60) | (w22 << 4)) & mask;
4116 out[28] = ((w22 >> 48) | (w23 << 16)) & mask;
4117 out[29] = ((w23 >> 36) | (w24 << 28)) & mask;
4118 out[30] = ((w24 >> 24) | (w25 << 40)) & mask;
4119 out[31] = w25 >> 12;
4120
4121 return in;
4122 }
4123
4124 inline const uint8_t* unpack53_64(const uint8_t* in, uint64_t* out) {
4125 const uint64_t mask = 9007199254740991ULL;
4126 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4127 w0 = arrow::bit_util::FromLittleEndian(w0);
4128 in += 8;
4129 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4130 w1 = arrow::bit_util::FromLittleEndian(w1);
4131 in += 8;
4132 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4133 w2 = arrow::bit_util::FromLittleEndian(w2);
4134 in += 8;
4135 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4136 w3 = arrow::bit_util::FromLittleEndian(w3);
4137 in += 8;
4138 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4139 w4 = arrow::bit_util::FromLittleEndian(w4);
4140 in += 8;
4141 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4142 w5 = arrow::bit_util::FromLittleEndian(w5);
4143 in += 8;
4144 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4145 w6 = arrow::bit_util::FromLittleEndian(w6);
4146 in += 8;
4147 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4148 w7 = arrow::bit_util::FromLittleEndian(w7);
4149 in += 8;
4150 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4151 w8 = arrow::bit_util::FromLittleEndian(w8);
4152 in += 8;
4153 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4154 w9 = arrow::bit_util::FromLittleEndian(w9);
4155 in += 8;
4156 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4157 w10 = arrow::bit_util::FromLittleEndian(w10);
4158 in += 8;
4159 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4160 w11 = arrow::bit_util::FromLittleEndian(w11);
4161 in += 8;
4162 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4163 w12 = arrow::bit_util::FromLittleEndian(w12);
4164 in += 8;
4165 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4166 w13 = arrow::bit_util::FromLittleEndian(w13);
4167 in += 8;
4168 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4169 w14 = arrow::bit_util::FromLittleEndian(w14);
4170 in += 8;
4171 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4172 w15 = arrow::bit_util::FromLittleEndian(w15);
4173 in += 8;
4174 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4175 w16 = arrow::bit_util::FromLittleEndian(w16);
4176 in += 8;
4177 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4178 w17 = arrow::bit_util::FromLittleEndian(w17);
4179 in += 8;
4180 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4181 w18 = arrow::bit_util::FromLittleEndian(w18);
4182 in += 8;
4183 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4184 w19 = arrow::bit_util::FromLittleEndian(w19);
4185 in += 8;
4186 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4187 w20 = arrow::bit_util::FromLittleEndian(w20);
4188 in += 8;
4189 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4190 w21 = arrow::bit_util::FromLittleEndian(w21);
4191 in += 8;
4192 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4193 w22 = arrow::bit_util::FromLittleEndian(w22);
4194 in += 8;
4195 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4196 w23 = arrow::bit_util::FromLittleEndian(w23);
4197 in += 8;
4198 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4199 w24 = arrow::bit_util::FromLittleEndian(w24);
4200 in += 8;
4201 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4202 w25 = arrow::bit_util::FromLittleEndian(w25);
4203 in += 8;
4204 uint64_t w26 = util::SafeLoadAs<uint32_t>(in);
4205 w26 = arrow::bit_util::FromLittleEndian(w26);
4206 in += 4;
4207 out[0] = (w0)&mask;
4208 out[1] = ((w0 >> 53) | (w1 << 11)) & mask;
4209 out[2] = ((w1 >> 42) | (w2 << 22)) & mask;
4210 out[3] = ((w2 >> 31) | (w3 << 33)) & mask;
4211 out[4] = ((w3 >> 20) | (w4 << 44)) & mask;
4212 out[5] = (w4 >> 9) & mask;
4213 out[6] = ((w4 >> 62) | (w5 << 2)) & mask;
4214 out[7] = ((w5 >> 51) | (w6 << 13)) & mask;
4215 out[8] = ((w6 >> 40) | (w7 << 24)) & mask;
4216 out[9] = ((w7 >> 29) | (w8 << 35)) & mask;
4217 out[10] = ((w8 >> 18) | (w9 << 46)) & mask;
4218 out[11] = (w9 >> 7) & mask;
4219 out[12] = ((w9 >> 60) | (w10 << 4)) & mask;
4220 out[13] = ((w10 >> 49) | (w11 << 15)) & mask;
4221 out[14] = ((w11 >> 38) | (w12 << 26)) & mask;
4222 out[15] = ((w12 >> 27) | (w13 << 37)) & mask;
4223 out[16] = ((w13 >> 16) | (w14 << 48)) & mask;
4224 out[17] = (w14 >> 5) & mask;
4225 out[18] = ((w14 >> 58) | (w15 << 6)) & mask;
4226 out[19] = ((w15 >> 47) | (w16 << 17)) & mask;
4227 out[20] = ((w16 >> 36) | (w17 << 28)) & mask;
4228 out[21] = ((w17 >> 25) | (w18 << 39)) & mask;
4229 out[22] = ((w18 >> 14) | (w19 << 50)) & mask;
4230 out[23] = (w19 >> 3) & mask;
4231 out[24] = ((w19 >> 56) | (w20 << 8)) & mask;
4232 out[25] = ((w20 >> 45) | (w21 << 19)) & mask;
4233 out[26] = ((w21 >> 34) | (w22 << 30)) & mask;
4234 out[27] = ((w22 >> 23) | (w23 << 41)) & mask;
4235 out[28] = ((w23 >> 12) | (w24 << 52)) & mask;
4236 out[29] = (w24 >> 1) & mask;
4237 out[30] = ((w24 >> 54) | (w25 << 10)) & mask;
4238 out[31] = ((w25 >> 43) | (w26 << 21)) & mask;
4239
4240 return in;
4241 }
4242
4243 inline const uint8_t* unpack54_64(const uint8_t* in, uint64_t* out) {
4244 const uint64_t mask = 18014398509481983ULL;
4245 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4246 w0 = arrow::bit_util::FromLittleEndian(w0);
4247 in += 8;
4248 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4249 w1 = arrow::bit_util::FromLittleEndian(w1);
4250 in += 8;
4251 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4252 w2 = arrow::bit_util::FromLittleEndian(w2);
4253 in += 8;
4254 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4255 w3 = arrow::bit_util::FromLittleEndian(w3);
4256 in += 8;
4257 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4258 w4 = arrow::bit_util::FromLittleEndian(w4);
4259 in += 8;
4260 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4261 w5 = arrow::bit_util::FromLittleEndian(w5);
4262 in += 8;
4263 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4264 w6 = arrow::bit_util::FromLittleEndian(w6);
4265 in += 8;
4266 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4267 w7 = arrow::bit_util::FromLittleEndian(w7);
4268 in += 8;
4269 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4270 w8 = arrow::bit_util::FromLittleEndian(w8);
4271 in += 8;
4272 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4273 w9 = arrow::bit_util::FromLittleEndian(w9);
4274 in += 8;
4275 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4276 w10 = arrow::bit_util::FromLittleEndian(w10);
4277 in += 8;
4278 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4279 w11 = arrow::bit_util::FromLittleEndian(w11);
4280 in += 8;
4281 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4282 w12 = arrow::bit_util::FromLittleEndian(w12);
4283 in += 8;
4284 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4285 w13 = arrow::bit_util::FromLittleEndian(w13);
4286 in += 8;
4287 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4288 w14 = arrow::bit_util::FromLittleEndian(w14);
4289 in += 8;
4290 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4291 w15 = arrow::bit_util::FromLittleEndian(w15);
4292 in += 8;
4293 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4294 w16 = arrow::bit_util::FromLittleEndian(w16);
4295 in += 8;
4296 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4297 w17 = arrow::bit_util::FromLittleEndian(w17);
4298 in += 8;
4299 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4300 w18 = arrow::bit_util::FromLittleEndian(w18);
4301 in += 8;
4302 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4303 w19 = arrow::bit_util::FromLittleEndian(w19);
4304 in += 8;
4305 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4306 w20 = arrow::bit_util::FromLittleEndian(w20);
4307 in += 8;
4308 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4309 w21 = arrow::bit_util::FromLittleEndian(w21);
4310 in += 8;
4311 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4312 w22 = arrow::bit_util::FromLittleEndian(w22);
4313 in += 8;
4314 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4315 w23 = arrow::bit_util::FromLittleEndian(w23);
4316 in += 8;
4317 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4318 w24 = arrow::bit_util::FromLittleEndian(w24);
4319 in += 8;
4320 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4321 w25 = arrow::bit_util::FromLittleEndian(w25);
4322 in += 8;
4323 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4324 w26 = arrow::bit_util::FromLittleEndian(w26);
4325 in += 8;
4326 out[0] = (w0)&mask;
4327 out[1] = ((w0 >> 54) | (w1 << 10)) & mask;
4328 out[2] = ((w1 >> 44) | (w2 << 20)) & mask;
4329 out[3] = ((w2 >> 34) | (w3 << 30)) & mask;
4330 out[4] = ((w3 >> 24) | (w4 << 40)) & mask;
4331 out[5] = ((w4 >> 14) | (w5 << 50)) & mask;
4332 out[6] = (w5 >> 4) & mask;
4333 out[7] = ((w5 >> 58) | (w6 << 6)) & mask;
4334 out[8] = ((w6 >> 48) | (w7 << 16)) & mask;
4335 out[9] = ((w7 >> 38) | (w8 << 26)) & mask;
4336 out[10] = ((w8 >> 28) | (w9 << 36)) & mask;
4337 out[11] = ((w9 >> 18) | (w10 << 46)) & mask;
4338 out[12] = (w10 >> 8) & mask;
4339 out[13] = ((w10 >> 62) | (w11 << 2)) & mask;
4340 out[14] = ((w11 >> 52) | (w12 << 12)) & mask;
4341 out[15] = ((w12 >> 42) | (w13 << 22)) & mask;
4342 out[16] = ((w13 >> 32) | (w14 << 32)) & mask;
4343 out[17] = ((w14 >> 22) | (w15 << 42)) & mask;
4344 out[18] = ((w15 >> 12) | (w16 << 52)) & mask;
4345 out[19] = (w16 >> 2) & mask;
4346 out[20] = ((w16 >> 56) | (w17 << 8)) & mask;
4347 out[21] = ((w17 >> 46) | (w18 << 18)) & mask;
4348 out[22] = ((w18 >> 36) | (w19 << 28)) & mask;
4349 out[23] = ((w19 >> 26) | (w20 << 38)) & mask;
4350 out[24] = ((w20 >> 16) | (w21 << 48)) & mask;
4351 out[25] = (w21 >> 6) & mask;
4352 out[26] = ((w21 >> 60) | (w22 << 4)) & mask;
4353 out[27] = ((w22 >> 50) | (w23 << 14)) & mask;
4354 out[28] = ((w23 >> 40) | (w24 << 24)) & mask;
4355 out[29] = ((w24 >> 30) | (w25 << 34)) & mask;
4356 out[30] = ((w25 >> 20) | (w26 << 44)) & mask;
4357 out[31] = w26 >> 10;
4358
4359 return in;
4360 }
4361
4362 inline const uint8_t* unpack55_64(const uint8_t* in, uint64_t* out) {
4363 const uint64_t mask = 36028797018963967ULL;
4364 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4365 w0 = arrow::bit_util::FromLittleEndian(w0);
4366 in += 8;
4367 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4368 w1 = arrow::bit_util::FromLittleEndian(w1);
4369 in += 8;
4370 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4371 w2 = arrow::bit_util::FromLittleEndian(w2);
4372 in += 8;
4373 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4374 w3 = arrow::bit_util::FromLittleEndian(w3);
4375 in += 8;
4376 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4377 w4 = arrow::bit_util::FromLittleEndian(w4);
4378 in += 8;
4379 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4380 w5 = arrow::bit_util::FromLittleEndian(w5);
4381 in += 8;
4382 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4383 w6 = arrow::bit_util::FromLittleEndian(w6);
4384 in += 8;
4385 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4386 w7 = arrow::bit_util::FromLittleEndian(w7);
4387 in += 8;
4388 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4389 w8 = arrow::bit_util::FromLittleEndian(w8);
4390 in += 8;
4391 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4392 w9 = arrow::bit_util::FromLittleEndian(w9);
4393 in += 8;
4394 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4395 w10 = arrow::bit_util::FromLittleEndian(w10);
4396 in += 8;
4397 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4398 w11 = arrow::bit_util::FromLittleEndian(w11);
4399 in += 8;
4400 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4401 w12 = arrow::bit_util::FromLittleEndian(w12);
4402 in += 8;
4403 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4404 w13 = arrow::bit_util::FromLittleEndian(w13);
4405 in += 8;
4406 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4407 w14 = arrow::bit_util::FromLittleEndian(w14);
4408 in += 8;
4409 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4410 w15 = arrow::bit_util::FromLittleEndian(w15);
4411 in += 8;
4412 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4413 w16 = arrow::bit_util::FromLittleEndian(w16);
4414 in += 8;
4415 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4416 w17 = arrow::bit_util::FromLittleEndian(w17);
4417 in += 8;
4418 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4419 w18 = arrow::bit_util::FromLittleEndian(w18);
4420 in += 8;
4421 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4422 w19 = arrow::bit_util::FromLittleEndian(w19);
4423 in += 8;
4424 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4425 w20 = arrow::bit_util::FromLittleEndian(w20);
4426 in += 8;
4427 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4428 w21 = arrow::bit_util::FromLittleEndian(w21);
4429 in += 8;
4430 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4431 w22 = arrow::bit_util::FromLittleEndian(w22);
4432 in += 8;
4433 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4434 w23 = arrow::bit_util::FromLittleEndian(w23);
4435 in += 8;
4436 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4437 w24 = arrow::bit_util::FromLittleEndian(w24);
4438 in += 8;
4439 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4440 w25 = arrow::bit_util::FromLittleEndian(w25);
4441 in += 8;
4442 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4443 w26 = arrow::bit_util::FromLittleEndian(w26);
4444 in += 8;
4445 uint64_t w27 = util::SafeLoadAs<uint32_t>(in);
4446 w27 = arrow::bit_util::FromLittleEndian(w27);
4447 in += 4;
4448 out[0] = (w0)&mask;
4449 out[1] = ((w0 >> 55) | (w1 << 9)) & mask;
4450 out[2] = ((w1 >> 46) | (w2 << 18)) & mask;
4451 out[3] = ((w2 >> 37) | (w3 << 27)) & mask;
4452 out[4] = ((w3 >> 28) | (w4 << 36)) & mask;
4453 out[5] = ((w4 >> 19) | (w5 << 45)) & mask;
4454 out[6] = ((w5 >> 10) | (w6 << 54)) & mask;
4455 out[7] = (w6 >> 1) & mask;
4456 out[8] = ((w6 >> 56) | (w7 << 8)) & mask;
4457 out[9] = ((w7 >> 47) | (w8 << 17)) & mask;
4458 out[10] = ((w8 >> 38) | (w9 << 26)) & mask;
4459 out[11] = ((w9 >> 29) | (w10 << 35)) & mask;
4460 out[12] = ((w10 >> 20) | (w11 << 44)) & mask;
4461 out[13] = ((w11 >> 11) | (w12 << 53)) & mask;
4462 out[14] = (w12 >> 2) & mask;
4463 out[15] = ((w12 >> 57) | (w13 << 7)) & mask;
4464 out[16] = ((w13 >> 48) | (w14 << 16)) & mask;
4465 out[17] = ((w14 >> 39) | (w15 << 25)) & mask;
4466 out[18] = ((w15 >> 30) | (w16 << 34)) & mask;
4467 out[19] = ((w16 >> 21) | (w17 << 43)) & mask;
4468 out[20] = ((w17 >> 12) | (w18 << 52)) & mask;
4469 out[21] = (w18 >> 3) & mask;
4470 out[22] = ((w18 >> 58) | (w19 << 6)) & mask;
4471 out[23] = ((w19 >> 49) | (w20 << 15)) & mask;
4472 out[24] = ((w20 >> 40) | (w21 << 24)) & mask;
4473 out[25] = ((w21 >> 31) | (w22 << 33)) & mask;
4474 out[26] = ((w22 >> 22) | (w23 << 42)) & mask;
4475 out[27] = ((w23 >> 13) | (w24 << 51)) & mask;
4476 out[28] = (w24 >> 4) & mask;
4477 out[29] = ((w24 >> 59) | (w25 << 5)) & mask;
4478 out[30] = ((w25 >> 50) | (w26 << 14)) & mask;
4479 out[31] = ((w26 >> 41) | (w27 << 23)) & mask;
4480
4481 return in;
4482 }
4483
4484 inline const uint8_t* unpack56_64(const uint8_t* in, uint64_t* out) {
4485 const uint64_t mask = 72057594037927935ULL;
4486 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4487 w0 = arrow::bit_util::FromLittleEndian(w0);
4488 in += 8;
4489 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4490 w1 = arrow::bit_util::FromLittleEndian(w1);
4491 in += 8;
4492 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4493 w2 = arrow::bit_util::FromLittleEndian(w2);
4494 in += 8;
4495 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4496 w3 = arrow::bit_util::FromLittleEndian(w3);
4497 in += 8;
4498 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4499 w4 = arrow::bit_util::FromLittleEndian(w4);
4500 in += 8;
4501 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4502 w5 = arrow::bit_util::FromLittleEndian(w5);
4503 in += 8;
4504 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4505 w6 = arrow::bit_util::FromLittleEndian(w6);
4506 in += 8;
4507 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4508 w7 = arrow::bit_util::FromLittleEndian(w7);
4509 in += 8;
4510 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4511 w8 = arrow::bit_util::FromLittleEndian(w8);
4512 in += 8;
4513 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4514 w9 = arrow::bit_util::FromLittleEndian(w9);
4515 in += 8;
4516 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4517 w10 = arrow::bit_util::FromLittleEndian(w10);
4518 in += 8;
4519 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4520 w11 = arrow::bit_util::FromLittleEndian(w11);
4521 in += 8;
4522 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4523 w12 = arrow::bit_util::FromLittleEndian(w12);
4524 in += 8;
4525 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4526 w13 = arrow::bit_util::FromLittleEndian(w13);
4527 in += 8;
4528 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4529 w14 = arrow::bit_util::FromLittleEndian(w14);
4530 in += 8;
4531 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4532 w15 = arrow::bit_util::FromLittleEndian(w15);
4533 in += 8;
4534 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4535 w16 = arrow::bit_util::FromLittleEndian(w16);
4536 in += 8;
4537 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4538 w17 = arrow::bit_util::FromLittleEndian(w17);
4539 in += 8;
4540 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4541 w18 = arrow::bit_util::FromLittleEndian(w18);
4542 in += 8;
4543 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4544 w19 = arrow::bit_util::FromLittleEndian(w19);
4545 in += 8;
4546 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4547 w20 = arrow::bit_util::FromLittleEndian(w20);
4548 in += 8;
4549 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4550 w21 = arrow::bit_util::FromLittleEndian(w21);
4551 in += 8;
4552 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4553 w22 = arrow::bit_util::FromLittleEndian(w22);
4554 in += 8;
4555 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4556 w23 = arrow::bit_util::FromLittleEndian(w23);
4557 in += 8;
4558 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4559 w24 = arrow::bit_util::FromLittleEndian(w24);
4560 in += 8;
4561 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4562 w25 = arrow::bit_util::FromLittleEndian(w25);
4563 in += 8;
4564 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4565 w26 = arrow::bit_util::FromLittleEndian(w26);
4566 in += 8;
4567 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
4568 w27 = arrow::bit_util::FromLittleEndian(w27);
4569 in += 8;
4570 out[0] = (w0)&mask;
4571 out[1] = ((w0 >> 56) | (w1 << 8)) & mask;
4572 out[2] = ((w1 >> 48) | (w2 << 16)) & mask;
4573 out[3] = ((w2 >> 40) | (w3 << 24)) & mask;
4574 out[4] = ((w3 >> 32) | (w4 << 32)) & mask;
4575 out[5] = ((w4 >> 24) | (w5 << 40)) & mask;
4576 out[6] = ((w5 >> 16) | (w6 << 48)) & mask;
4577 out[7] = w6 >> 8;
4578 out[8] = (w7)&mask;
4579 out[9] = ((w7 >> 56) | (w8 << 8)) & mask;
4580 out[10] = ((w8 >> 48) | (w9 << 16)) & mask;
4581 out[11] = ((w9 >> 40) | (w10 << 24)) & mask;
4582 out[12] = ((w10 >> 32) | (w11 << 32)) & mask;
4583 out[13] = ((w11 >> 24) | (w12 << 40)) & mask;
4584 out[14] = ((w12 >> 16) | (w13 << 48)) & mask;
4585 out[15] = w13 >> 8;
4586 out[16] = (w14)&mask;
4587 out[17] = ((w14 >> 56) | (w15 << 8)) & mask;
4588 out[18] = ((w15 >> 48) | (w16 << 16)) & mask;
4589 out[19] = ((w16 >> 40) | (w17 << 24)) & mask;
4590 out[20] = ((w17 >> 32) | (w18 << 32)) & mask;
4591 out[21] = ((w18 >> 24) | (w19 << 40)) & mask;
4592 out[22] = ((w19 >> 16) | (w20 << 48)) & mask;
4593 out[23] = w20 >> 8;
4594 out[24] = (w21)&mask;
4595 out[25] = ((w21 >> 56) | (w22 << 8)) & mask;
4596 out[26] = ((w22 >> 48) | (w23 << 16)) & mask;
4597 out[27] = ((w23 >> 40) | (w24 << 24)) & mask;
4598 out[28] = ((w24 >> 32) | (w25 << 32)) & mask;
4599 out[29] = ((w25 >> 24) | (w26 << 40)) & mask;
4600 out[30] = ((w26 >> 16) | (w27 << 48)) & mask;
4601 out[31] = w27 >> 8;
4602
4603 return in;
4604 }
4605
4606 inline const uint8_t* unpack57_64(const uint8_t* in, uint64_t* out) {
4607 const uint64_t mask = 144115188075855871ULL;
4608 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4609 w0 = arrow::bit_util::FromLittleEndian(w0);
4610 in += 8;
4611 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4612 w1 = arrow::bit_util::FromLittleEndian(w1);
4613 in += 8;
4614 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4615 w2 = arrow::bit_util::FromLittleEndian(w2);
4616 in += 8;
4617 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4618 w3 = arrow::bit_util::FromLittleEndian(w3);
4619 in += 8;
4620 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4621 w4 = arrow::bit_util::FromLittleEndian(w4);
4622 in += 8;
4623 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4624 w5 = arrow::bit_util::FromLittleEndian(w5);
4625 in += 8;
4626 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4627 w6 = arrow::bit_util::FromLittleEndian(w6);
4628 in += 8;
4629 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4630 w7 = arrow::bit_util::FromLittleEndian(w7);
4631 in += 8;
4632 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4633 w8 = arrow::bit_util::FromLittleEndian(w8);
4634 in += 8;
4635 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4636 w9 = arrow::bit_util::FromLittleEndian(w9);
4637 in += 8;
4638 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4639 w10 = arrow::bit_util::FromLittleEndian(w10);
4640 in += 8;
4641 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4642 w11 = arrow::bit_util::FromLittleEndian(w11);
4643 in += 8;
4644 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4645 w12 = arrow::bit_util::FromLittleEndian(w12);
4646 in += 8;
4647 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4648 w13 = arrow::bit_util::FromLittleEndian(w13);
4649 in += 8;
4650 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4651 w14 = arrow::bit_util::FromLittleEndian(w14);
4652 in += 8;
4653 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4654 w15 = arrow::bit_util::FromLittleEndian(w15);
4655 in += 8;
4656 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4657 w16 = arrow::bit_util::FromLittleEndian(w16);
4658 in += 8;
4659 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4660 w17 = arrow::bit_util::FromLittleEndian(w17);
4661 in += 8;
4662 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4663 w18 = arrow::bit_util::FromLittleEndian(w18);
4664 in += 8;
4665 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4666 w19 = arrow::bit_util::FromLittleEndian(w19);
4667 in += 8;
4668 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4669 w20 = arrow::bit_util::FromLittleEndian(w20);
4670 in += 8;
4671 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4672 w21 = arrow::bit_util::FromLittleEndian(w21);
4673 in += 8;
4674 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4675 w22 = arrow::bit_util::FromLittleEndian(w22);
4676 in += 8;
4677 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4678 w23 = arrow::bit_util::FromLittleEndian(w23);
4679 in += 8;
4680 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4681 w24 = arrow::bit_util::FromLittleEndian(w24);
4682 in += 8;
4683 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4684 w25 = arrow::bit_util::FromLittleEndian(w25);
4685 in += 8;
4686 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4687 w26 = arrow::bit_util::FromLittleEndian(w26);
4688 in += 8;
4689 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
4690 w27 = arrow::bit_util::FromLittleEndian(w27);
4691 in += 8;
4692 uint64_t w28 = util::SafeLoadAs<uint32_t>(in);
4693 w28 = arrow::bit_util::FromLittleEndian(w28);
4694 in += 4;
4695 out[0] = (w0)&mask;
4696 out[1] = ((w0 >> 57) | (w1 << 7)) & mask;
4697 out[2] = ((w1 >> 50) | (w2 << 14)) & mask;
4698 out[3] = ((w2 >> 43) | (w3 << 21)) & mask;
4699 out[4] = ((w3 >> 36) | (w4 << 28)) & mask;
4700 out[5] = ((w4 >> 29) | (w5 << 35)) & mask;
4701 out[6] = ((w5 >> 22) | (w6 << 42)) & mask;
4702 out[7] = ((w6 >> 15) | (w7 << 49)) & mask;
4703 out[8] = ((w7 >> 8) | (w8 << 56)) & mask;
4704 out[9] = (w8 >> 1) & mask;
4705 out[10] = ((w8 >> 58) | (w9 << 6)) & mask;
4706 out[11] = ((w9 >> 51) | (w10 << 13)) & mask;
4707 out[12] = ((w10 >> 44) | (w11 << 20)) & mask;
4708 out[13] = ((w11 >> 37) | (w12 << 27)) & mask;
4709 out[14] = ((w12 >> 30) | (w13 << 34)) & mask;
4710 out[15] = ((w13 >> 23) | (w14 << 41)) & mask;
4711 out[16] = ((w14 >> 16) | (w15 << 48)) & mask;
4712 out[17] = ((w15 >> 9) | (w16 << 55)) & mask;
4713 out[18] = (w16 >> 2) & mask;
4714 out[19] = ((w16 >> 59) | (w17 << 5)) & mask;
4715 out[20] = ((w17 >> 52) | (w18 << 12)) & mask;
4716 out[21] = ((w18 >> 45) | (w19 << 19)) & mask;
4717 out[22] = ((w19 >> 38) | (w20 << 26)) & mask;
4718 out[23] = ((w20 >> 31) | (w21 << 33)) & mask;
4719 out[24] = ((w21 >> 24) | (w22 << 40)) & mask;
4720 out[25] = ((w22 >> 17) | (w23 << 47)) & mask;
4721 out[26] = ((w23 >> 10) | (w24 << 54)) & mask;
4722 out[27] = (w24 >> 3) & mask;
4723 out[28] = ((w24 >> 60) | (w25 << 4)) & mask;
4724 out[29] = ((w25 >> 53) | (w26 << 11)) & mask;
4725 out[30] = ((w26 >> 46) | (w27 << 18)) & mask;
4726 out[31] = ((w27 >> 39) | (w28 << 25)) & mask;
4727
4728 return in;
4729 }
4730
4731 inline const uint8_t* unpack58_64(const uint8_t* in, uint64_t* out) {
4732 const uint64_t mask = 288230376151711743ULL;
4733 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4734 w0 = arrow::bit_util::FromLittleEndian(w0);
4735 in += 8;
4736 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4737 w1 = arrow::bit_util::FromLittleEndian(w1);
4738 in += 8;
4739 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4740 w2 = arrow::bit_util::FromLittleEndian(w2);
4741 in += 8;
4742 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4743 w3 = arrow::bit_util::FromLittleEndian(w3);
4744 in += 8;
4745 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4746 w4 = arrow::bit_util::FromLittleEndian(w4);
4747 in += 8;
4748 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4749 w5 = arrow::bit_util::FromLittleEndian(w5);
4750 in += 8;
4751 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4752 w6 = arrow::bit_util::FromLittleEndian(w6);
4753 in += 8;
4754 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4755 w7 = arrow::bit_util::FromLittleEndian(w7);
4756 in += 8;
4757 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4758 w8 = arrow::bit_util::FromLittleEndian(w8);
4759 in += 8;
4760 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4761 w9 = arrow::bit_util::FromLittleEndian(w9);
4762 in += 8;
4763 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4764 w10 = arrow::bit_util::FromLittleEndian(w10);
4765 in += 8;
4766 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4767 w11 = arrow::bit_util::FromLittleEndian(w11);
4768 in += 8;
4769 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4770 w12 = arrow::bit_util::FromLittleEndian(w12);
4771 in += 8;
4772 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4773 w13 = arrow::bit_util::FromLittleEndian(w13);
4774 in += 8;
4775 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4776 w14 = arrow::bit_util::FromLittleEndian(w14);
4777 in += 8;
4778 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4779 w15 = arrow::bit_util::FromLittleEndian(w15);
4780 in += 8;
4781 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4782 w16 = arrow::bit_util::FromLittleEndian(w16);
4783 in += 8;
4784 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4785 w17 = arrow::bit_util::FromLittleEndian(w17);
4786 in += 8;
4787 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4788 w18 = arrow::bit_util::FromLittleEndian(w18);
4789 in += 8;
4790 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4791 w19 = arrow::bit_util::FromLittleEndian(w19);
4792 in += 8;
4793 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4794 w20 = arrow::bit_util::FromLittleEndian(w20);
4795 in += 8;
4796 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4797 w21 = arrow::bit_util::FromLittleEndian(w21);
4798 in += 8;
4799 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4800 w22 = arrow::bit_util::FromLittleEndian(w22);
4801 in += 8;
4802 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4803 w23 = arrow::bit_util::FromLittleEndian(w23);
4804 in += 8;
4805 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4806 w24 = arrow::bit_util::FromLittleEndian(w24);
4807 in += 8;
4808 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4809 w25 = arrow::bit_util::FromLittleEndian(w25);
4810 in += 8;
4811 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4812 w26 = arrow::bit_util::FromLittleEndian(w26);
4813 in += 8;
4814 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
4815 w27 = arrow::bit_util::FromLittleEndian(w27);
4816 in += 8;
4817 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
4818 w28 = arrow::bit_util::FromLittleEndian(w28);
4819 in += 8;
4820 out[0] = (w0)&mask;
4821 out[1] = ((w0 >> 58) | (w1 << 6)) & mask;
4822 out[2] = ((w1 >> 52) | (w2 << 12)) & mask;
4823 out[3] = ((w2 >> 46) | (w3 << 18)) & mask;
4824 out[4] = ((w3 >> 40) | (w4 << 24)) & mask;
4825 out[5] = ((w4 >> 34) | (w5 << 30)) & mask;
4826 out[6] = ((w5 >> 28) | (w6 << 36)) & mask;
4827 out[7] = ((w6 >> 22) | (w7 << 42)) & mask;
4828 out[8] = ((w7 >> 16) | (w8 << 48)) & mask;
4829 out[9] = ((w8 >> 10) | (w9 << 54)) & mask;
4830 out[10] = (w9 >> 4) & mask;
4831 out[11] = ((w9 >> 62) | (w10 << 2)) & mask;
4832 out[12] = ((w10 >> 56) | (w11 << 8)) & mask;
4833 out[13] = ((w11 >> 50) | (w12 << 14)) & mask;
4834 out[14] = ((w12 >> 44) | (w13 << 20)) & mask;
4835 out[15] = ((w13 >> 38) | (w14 << 26)) & mask;
4836 out[16] = ((w14 >> 32) | (w15 << 32)) & mask;
4837 out[17] = ((w15 >> 26) | (w16 << 38)) & mask;
4838 out[18] = ((w16 >> 20) | (w17 << 44)) & mask;
4839 out[19] = ((w17 >> 14) | (w18 << 50)) & mask;
4840 out[20] = ((w18 >> 8) | (w19 << 56)) & mask;
4841 out[21] = (w19 >> 2) & mask;
4842 out[22] = ((w19 >> 60) | (w20 << 4)) & mask;
4843 out[23] = ((w20 >> 54) | (w21 << 10)) & mask;
4844 out[24] = ((w21 >> 48) | (w22 << 16)) & mask;
4845 out[25] = ((w22 >> 42) | (w23 << 22)) & mask;
4846 out[26] = ((w23 >> 36) | (w24 << 28)) & mask;
4847 out[27] = ((w24 >> 30) | (w25 << 34)) & mask;
4848 out[28] = ((w25 >> 24) | (w26 << 40)) & mask;
4849 out[29] = ((w26 >> 18) | (w27 << 46)) & mask;
4850 out[30] = ((w27 >> 12) | (w28 << 52)) & mask;
4851 out[31] = w28 >> 6;
4852
4853 return in;
4854 }
4855
4856 inline const uint8_t* unpack59_64(const uint8_t* in, uint64_t* out) {
4857 const uint64_t mask = 576460752303423487ULL;
4858 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4859 w0 = arrow::bit_util::FromLittleEndian(w0);
4860 in += 8;
4861 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4862 w1 = arrow::bit_util::FromLittleEndian(w1);
4863 in += 8;
4864 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4865 w2 = arrow::bit_util::FromLittleEndian(w2);
4866 in += 8;
4867 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4868 w3 = arrow::bit_util::FromLittleEndian(w3);
4869 in += 8;
4870 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4871 w4 = arrow::bit_util::FromLittleEndian(w4);
4872 in += 8;
4873 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
4874 w5 = arrow::bit_util::FromLittleEndian(w5);
4875 in += 8;
4876 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
4877 w6 = arrow::bit_util::FromLittleEndian(w6);
4878 in += 8;
4879 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
4880 w7 = arrow::bit_util::FromLittleEndian(w7);
4881 in += 8;
4882 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
4883 w8 = arrow::bit_util::FromLittleEndian(w8);
4884 in += 8;
4885 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
4886 w9 = arrow::bit_util::FromLittleEndian(w9);
4887 in += 8;
4888 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
4889 w10 = arrow::bit_util::FromLittleEndian(w10);
4890 in += 8;
4891 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
4892 w11 = arrow::bit_util::FromLittleEndian(w11);
4893 in += 8;
4894 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
4895 w12 = arrow::bit_util::FromLittleEndian(w12);
4896 in += 8;
4897 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
4898 w13 = arrow::bit_util::FromLittleEndian(w13);
4899 in += 8;
4900 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
4901 w14 = arrow::bit_util::FromLittleEndian(w14);
4902 in += 8;
4903 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
4904 w15 = arrow::bit_util::FromLittleEndian(w15);
4905 in += 8;
4906 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
4907 w16 = arrow::bit_util::FromLittleEndian(w16);
4908 in += 8;
4909 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
4910 w17 = arrow::bit_util::FromLittleEndian(w17);
4911 in += 8;
4912 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
4913 w18 = arrow::bit_util::FromLittleEndian(w18);
4914 in += 8;
4915 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
4916 w19 = arrow::bit_util::FromLittleEndian(w19);
4917 in += 8;
4918 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
4919 w20 = arrow::bit_util::FromLittleEndian(w20);
4920 in += 8;
4921 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
4922 w21 = arrow::bit_util::FromLittleEndian(w21);
4923 in += 8;
4924 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
4925 w22 = arrow::bit_util::FromLittleEndian(w22);
4926 in += 8;
4927 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
4928 w23 = arrow::bit_util::FromLittleEndian(w23);
4929 in += 8;
4930 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
4931 w24 = arrow::bit_util::FromLittleEndian(w24);
4932 in += 8;
4933 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
4934 w25 = arrow::bit_util::FromLittleEndian(w25);
4935 in += 8;
4936 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
4937 w26 = arrow::bit_util::FromLittleEndian(w26);
4938 in += 8;
4939 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
4940 w27 = arrow::bit_util::FromLittleEndian(w27);
4941 in += 8;
4942 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
4943 w28 = arrow::bit_util::FromLittleEndian(w28);
4944 in += 8;
4945 uint64_t w29 = util::SafeLoadAs<uint32_t>(in);
4946 w29 = arrow::bit_util::FromLittleEndian(w29);
4947 in += 4;
4948 out[0] = (w0)&mask;
4949 out[1] = ((w0 >> 59) | (w1 << 5)) & mask;
4950 out[2] = ((w1 >> 54) | (w2 << 10)) & mask;
4951 out[3] = ((w2 >> 49) | (w3 << 15)) & mask;
4952 out[4] = ((w3 >> 44) | (w4 << 20)) & mask;
4953 out[5] = ((w4 >> 39) | (w5 << 25)) & mask;
4954 out[6] = ((w5 >> 34) | (w6 << 30)) & mask;
4955 out[7] = ((w6 >> 29) | (w7 << 35)) & mask;
4956 out[8] = ((w7 >> 24) | (w8 << 40)) & mask;
4957 out[9] = ((w8 >> 19) | (w9 << 45)) & mask;
4958 out[10] = ((w9 >> 14) | (w10 << 50)) & mask;
4959 out[11] = ((w10 >> 9) | (w11 << 55)) & mask;
4960 out[12] = (w11 >> 4) & mask;
4961 out[13] = ((w11 >> 63) | (w12 << 1)) & mask;
4962 out[14] = ((w12 >> 58) | (w13 << 6)) & mask;
4963 out[15] = ((w13 >> 53) | (w14 << 11)) & mask;
4964 out[16] = ((w14 >> 48) | (w15 << 16)) & mask;
4965 out[17] = ((w15 >> 43) | (w16 << 21)) & mask;
4966 out[18] = ((w16 >> 38) | (w17 << 26)) & mask;
4967 out[19] = ((w17 >> 33) | (w18 << 31)) & mask;
4968 out[20] = ((w18 >> 28) | (w19 << 36)) & mask;
4969 out[21] = ((w19 >> 23) | (w20 << 41)) & mask;
4970 out[22] = ((w20 >> 18) | (w21 << 46)) & mask;
4971 out[23] = ((w21 >> 13) | (w22 << 51)) & mask;
4972 out[24] = ((w22 >> 8) | (w23 << 56)) & mask;
4973 out[25] = (w23 >> 3) & mask;
4974 out[26] = ((w23 >> 62) | (w24 << 2)) & mask;
4975 out[27] = ((w24 >> 57) | (w25 << 7)) & mask;
4976 out[28] = ((w25 >> 52) | (w26 << 12)) & mask;
4977 out[29] = ((w26 >> 47) | (w27 << 17)) & mask;
4978 out[30] = ((w27 >> 42) | (w28 << 22)) & mask;
4979 out[31] = ((w28 >> 37) | (w29 << 27)) & mask;
4980
4981 return in;
4982 }
4983
4984 inline const uint8_t* unpack60_64(const uint8_t* in, uint64_t* out) {
4985 const uint64_t mask = 1152921504606846975ULL;
4986 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
4987 w0 = arrow::bit_util::FromLittleEndian(w0);
4988 in += 8;
4989 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
4990 w1 = arrow::bit_util::FromLittleEndian(w1);
4991 in += 8;
4992 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
4993 w2 = arrow::bit_util::FromLittleEndian(w2);
4994 in += 8;
4995 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
4996 w3 = arrow::bit_util::FromLittleEndian(w3);
4997 in += 8;
4998 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
4999 w4 = arrow::bit_util::FromLittleEndian(w4);
5000 in += 8;
5001 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
5002 w5 = arrow::bit_util::FromLittleEndian(w5);
5003 in += 8;
5004 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
5005 w6 = arrow::bit_util::FromLittleEndian(w6);
5006 in += 8;
5007 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
5008 w7 = arrow::bit_util::FromLittleEndian(w7);
5009 in += 8;
5010 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
5011 w8 = arrow::bit_util::FromLittleEndian(w8);
5012 in += 8;
5013 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
5014 w9 = arrow::bit_util::FromLittleEndian(w9);
5015 in += 8;
5016 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
5017 w10 = arrow::bit_util::FromLittleEndian(w10);
5018 in += 8;
5019 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
5020 w11 = arrow::bit_util::FromLittleEndian(w11);
5021 in += 8;
5022 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
5023 w12 = arrow::bit_util::FromLittleEndian(w12);
5024 in += 8;
5025 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
5026 w13 = arrow::bit_util::FromLittleEndian(w13);
5027 in += 8;
5028 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
5029 w14 = arrow::bit_util::FromLittleEndian(w14);
5030 in += 8;
5031 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
5032 w15 = arrow::bit_util::FromLittleEndian(w15);
5033 in += 8;
5034 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
5035 w16 = arrow::bit_util::FromLittleEndian(w16);
5036 in += 8;
5037 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
5038 w17 = arrow::bit_util::FromLittleEndian(w17);
5039 in += 8;
5040 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
5041 w18 = arrow::bit_util::FromLittleEndian(w18);
5042 in += 8;
5043 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
5044 w19 = arrow::bit_util::FromLittleEndian(w19);
5045 in += 8;
5046 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
5047 w20 = arrow::bit_util::FromLittleEndian(w20);
5048 in += 8;
5049 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
5050 w21 = arrow::bit_util::FromLittleEndian(w21);
5051 in += 8;
5052 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
5053 w22 = arrow::bit_util::FromLittleEndian(w22);
5054 in += 8;
5055 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
5056 w23 = arrow::bit_util::FromLittleEndian(w23);
5057 in += 8;
5058 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
5059 w24 = arrow::bit_util::FromLittleEndian(w24);
5060 in += 8;
5061 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
5062 w25 = arrow::bit_util::FromLittleEndian(w25);
5063 in += 8;
5064 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
5065 w26 = arrow::bit_util::FromLittleEndian(w26);
5066 in += 8;
5067 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
5068 w27 = arrow::bit_util::FromLittleEndian(w27);
5069 in += 8;
5070 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
5071 w28 = arrow::bit_util::FromLittleEndian(w28);
5072 in += 8;
5073 uint64_t w29 = util::SafeLoadAs<uint64_t>(in);
5074 w29 = arrow::bit_util::FromLittleEndian(w29);
5075 in += 8;
5076 out[0] = (w0)&mask;
5077 out[1] = ((w0 >> 60) | (w1 << 4)) & mask;
5078 out[2] = ((w1 >> 56) | (w2 << 8)) & mask;
5079 out[3] = ((w2 >> 52) | (w3 << 12)) & mask;
5080 out[4] = ((w3 >> 48) | (w4 << 16)) & mask;
5081 out[5] = ((w4 >> 44) | (w5 << 20)) & mask;
5082 out[6] = ((w5 >> 40) | (w6 << 24)) & mask;
5083 out[7] = ((w6 >> 36) | (w7 << 28)) & mask;
5084 out[8] = ((w7 >> 32) | (w8 << 32)) & mask;
5085 out[9] = ((w8 >> 28) | (w9 << 36)) & mask;
5086 out[10] = ((w9 >> 24) | (w10 << 40)) & mask;
5087 out[11] = ((w10 >> 20) | (w11 << 44)) & mask;
5088 out[12] = ((w11 >> 16) | (w12 << 48)) & mask;
5089 out[13] = ((w12 >> 12) | (w13 << 52)) & mask;
5090 out[14] = ((w13 >> 8) | (w14 << 56)) & mask;
5091 out[15] = w14 >> 4;
5092 out[16] = (w15)&mask;
5093 out[17] = ((w15 >> 60) | (w16 << 4)) & mask;
5094 out[18] = ((w16 >> 56) | (w17 << 8)) & mask;
5095 out[19] = ((w17 >> 52) | (w18 << 12)) & mask;
5096 out[20] = ((w18 >> 48) | (w19 << 16)) & mask;
5097 out[21] = ((w19 >> 44) | (w20 << 20)) & mask;
5098 out[22] = ((w20 >> 40) | (w21 << 24)) & mask;
5099 out[23] = ((w21 >> 36) | (w22 << 28)) & mask;
5100 out[24] = ((w22 >> 32) | (w23 << 32)) & mask;
5101 out[25] = ((w23 >> 28) | (w24 << 36)) & mask;
5102 out[26] = ((w24 >> 24) | (w25 << 40)) & mask;
5103 out[27] = ((w25 >> 20) | (w26 << 44)) & mask;
5104 out[28] = ((w26 >> 16) | (w27 << 48)) & mask;
5105 out[29] = ((w27 >> 12) | (w28 << 52)) & mask;
5106 out[30] = ((w28 >> 8) | (w29 << 56)) & mask;
5107 out[31] = w29 >> 4;
5108
5109 return in;
5110 }
5111
5112 inline const uint8_t* unpack61_64(const uint8_t* in, uint64_t* out) {
5113 const uint64_t mask = 2305843009213693951ULL;
5114 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
5115 w0 = arrow::bit_util::FromLittleEndian(w0);
5116 in += 8;
5117 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
5118 w1 = arrow::bit_util::FromLittleEndian(w1);
5119 in += 8;
5120 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
5121 w2 = arrow::bit_util::FromLittleEndian(w2);
5122 in += 8;
5123 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
5124 w3 = arrow::bit_util::FromLittleEndian(w3);
5125 in += 8;
5126 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
5127 w4 = arrow::bit_util::FromLittleEndian(w4);
5128 in += 8;
5129 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
5130 w5 = arrow::bit_util::FromLittleEndian(w5);
5131 in += 8;
5132 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
5133 w6 = arrow::bit_util::FromLittleEndian(w6);
5134 in += 8;
5135 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
5136 w7 = arrow::bit_util::FromLittleEndian(w7);
5137 in += 8;
5138 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
5139 w8 = arrow::bit_util::FromLittleEndian(w8);
5140 in += 8;
5141 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
5142 w9 = arrow::bit_util::FromLittleEndian(w9);
5143 in += 8;
5144 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
5145 w10 = arrow::bit_util::FromLittleEndian(w10);
5146 in += 8;
5147 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
5148 w11 = arrow::bit_util::FromLittleEndian(w11);
5149 in += 8;
5150 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
5151 w12 = arrow::bit_util::FromLittleEndian(w12);
5152 in += 8;
5153 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
5154 w13 = arrow::bit_util::FromLittleEndian(w13);
5155 in += 8;
5156 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
5157 w14 = arrow::bit_util::FromLittleEndian(w14);
5158 in += 8;
5159 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
5160 w15 = arrow::bit_util::FromLittleEndian(w15);
5161 in += 8;
5162 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
5163 w16 = arrow::bit_util::FromLittleEndian(w16);
5164 in += 8;
5165 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
5166 w17 = arrow::bit_util::FromLittleEndian(w17);
5167 in += 8;
5168 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
5169 w18 = arrow::bit_util::FromLittleEndian(w18);
5170 in += 8;
5171 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
5172 w19 = arrow::bit_util::FromLittleEndian(w19);
5173 in += 8;
5174 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
5175 w20 = arrow::bit_util::FromLittleEndian(w20);
5176 in += 8;
5177 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
5178 w21 = arrow::bit_util::FromLittleEndian(w21);
5179 in += 8;
5180 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
5181 w22 = arrow::bit_util::FromLittleEndian(w22);
5182 in += 8;
5183 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
5184 w23 = arrow::bit_util::FromLittleEndian(w23);
5185 in += 8;
5186 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
5187 w24 = arrow::bit_util::FromLittleEndian(w24);
5188 in += 8;
5189 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
5190 w25 = arrow::bit_util::FromLittleEndian(w25);
5191 in += 8;
5192 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
5193 w26 = arrow::bit_util::FromLittleEndian(w26);
5194 in += 8;
5195 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
5196 w27 = arrow::bit_util::FromLittleEndian(w27);
5197 in += 8;
5198 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
5199 w28 = arrow::bit_util::FromLittleEndian(w28);
5200 in += 8;
5201 uint64_t w29 = util::SafeLoadAs<uint64_t>(in);
5202 w29 = arrow::bit_util::FromLittleEndian(w29);
5203 in += 8;
5204 uint64_t w30 = util::SafeLoadAs<uint32_t>(in);
5205 w30 = arrow::bit_util::FromLittleEndian(w30);
5206 in += 4;
5207 out[0] = (w0)&mask;
5208 out[1] = ((w0 >> 61) | (w1 << 3)) & mask;
5209 out[2] = ((w1 >> 58) | (w2 << 6)) & mask;
5210 out[3] = ((w2 >> 55) | (w3 << 9)) & mask;
5211 out[4] = ((w3 >> 52) | (w4 << 12)) & mask;
5212 out[5] = ((w4 >> 49) | (w5 << 15)) & mask;
5213 out[6] = ((w5 >> 46) | (w6 << 18)) & mask;
5214 out[7] = ((w6 >> 43) | (w7 << 21)) & mask;
5215 out[8] = ((w7 >> 40) | (w8 << 24)) & mask;
5216 out[9] = ((w8 >> 37) | (w9 << 27)) & mask;
5217 out[10] = ((w9 >> 34) | (w10 << 30)) & mask;
5218 out[11] = ((w10 >> 31) | (w11 << 33)) & mask;
5219 out[12] = ((w11 >> 28) | (w12 << 36)) & mask;
5220 out[13] = ((w12 >> 25) | (w13 << 39)) & mask;
5221 out[14] = ((w13 >> 22) | (w14 << 42)) & mask;
5222 out[15] = ((w14 >> 19) | (w15 << 45)) & mask;
5223 out[16] = ((w15 >> 16) | (w16 << 48)) & mask;
5224 out[17] = ((w16 >> 13) | (w17 << 51)) & mask;
5225 out[18] = ((w17 >> 10) | (w18 << 54)) & mask;
5226 out[19] = ((w18 >> 7) | (w19 << 57)) & mask;
5227 out[20] = ((w19 >> 4) | (w20 << 60)) & mask;
5228 out[21] = (w20 >> 1) & mask;
5229 out[22] = ((w20 >> 62) | (w21 << 2)) & mask;
5230 out[23] = ((w21 >> 59) | (w22 << 5)) & mask;
5231 out[24] = ((w22 >> 56) | (w23 << 8)) & mask;
5232 out[25] = ((w23 >> 53) | (w24 << 11)) & mask;
5233 out[26] = ((w24 >> 50) | (w25 << 14)) & mask;
5234 out[27] = ((w25 >> 47) | (w26 << 17)) & mask;
5235 out[28] = ((w26 >> 44) | (w27 << 20)) & mask;
5236 out[29] = ((w27 >> 41) | (w28 << 23)) & mask;
5237 out[30] = ((w28 >> 38) | (w29 << 26)) & mask;
5238 out[31] = ((w29 >> 35) | (w30 << 29)) & mask;
5239
5240 return in;
5241 }
5242
5243 inline const uint8_t* unpack62_64(const uint8_t* in, uint64_t* out) {
5244 const uint64_t mask = 4611686018427387903ULL;
5245 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
5246 w0 = arrow::bit_util::FromLittleEndian(w0);
5247 in += 8;
5248 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
5249 w1 = arrow::bit_util::FromLittleEndian(w1);
5250 in += 8;
5251 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
5252 w2 = arrow::bit_util::FromLittleEndian(w2);
5253 in += 8;
5254 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
5255 w3 = arrow::bit_util::FromLittleEndian(w3);
5256 in += 8;
5257 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
5258 w4 = arrow::bit_util::FromLittleEndian(w4);
5259 in += 8;
5260 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
5261 w5 = arrow::bit_util::FromLittleEndian(w5);
5262 in += 8;
5263 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
5264 w6 = arrow::bit_util::FromLittleEndian(w6);
5265 in += 8;
5266 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
5267 w7 = arrow::bit_util::FromLittleEndian(w7);
5268 in += 8;
5269 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
5270 w8 = arrow::bit_util::FromLittleEndian(w8);
5271 in += 8;
5272 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
5273 w9 = arrow::bit_util::FromLittleEndian(w9);
5274 in += 8;
5275 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
5276 w10 = arrow::bit_util::FromLittleEndian(w10);
5277 in += 8;
5278 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
5279 w11 = arrow::bit_util::FromLittleEndian(w11);
5280 in += 8;
5281 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
5282 w12 = arrow::bit_util::FromLittleEndian(w12);
5283 in += 8;
5284 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
5285 w13 = arrow::bit_util::FromLittleEndian(w13);
5286 in += 8;
5287 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
5288 w14 = arrow::bit_util::FromLittleEndian(w14);
5289 in += 8;
5290 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
5291 w15 = arrow::bit_util::FromLittleEndian(w15);
5292 in += 8;
5293 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
5294 w16 = arrow::bit_util::FromLittleEndian(w16);
5295 in += 8;
5296 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
5297 w17 = arrow::bit_util::FromLittleEndian(w17);
5298 in += 8;
5299 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
5300 w18 = arrow::bit_util::FromLittleEndian(w18);
5301 in += 8;
5302 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
5303 w19 = arrow::bit_util::FromLittleEndian(w19);
5304 in += 8;
5305 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
5306 w20 = arrow::bit_util::FromLittleEndian(w20);
5307 in += 8;
5308 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
5309 w21 = arrow::bit_util::FromLittleEndian(w21);
5310 in += 8;
5311 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
5312 w22 = arrow::bit_util::FromLittleEndian(w22);
5313 in += 8;
5314 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
5315 w23 = arrow::bit_util::FromLittleEndian(w23);
5316 in += 8;
5317 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
5318 w24 = arrow::bit_util::FromLittleEndian(w24);
5319 in += 8;
5320 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
5321 w25 = arrow::bit_util::FromLittleEndian(w25);
5322 in += 8;
5323 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
5324 w26 = arrow::bit_util::FromLittleEndian(w26);
5325 in += 8;
5326 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
5327 w27 = arrow::bit_util::FromLittleEndian(w27);
5328 in += 8;
5329 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
5330 w28 = arrow::bit_util::FromLittleEndian(w28);
5331 in += 8;
5332 uint64_t w29 = util::SafeLoadAs<uint64_t>(in);
5333 w29 = arrow::bit_util::FromLittleEndian(w29);
5334 in += 8;
5335 uint64_t w30 = util::SafeLoadAs<uint64_t>(in);
5336 w30 = arrow::bit_util::FromLittleEndian(w30);
5337 in += 8;
5338 out[0] = (w0)&mask;
5339 out[1] = ((w0 >> 62) | (w1 << 2)) & mask;
5340 out[2] = ((w1 >> 60) | (w2 << 4)) & mask;
5341 out[3] = ((w2 >> 58) | (w3 << 6)) & mask;
5342 out[4] = ((w3 >> 56) | (w4 << 8)) & mask;
5343 out[5] = ((w4 >> 54) | (w5 << 10)) & mask;
5344 out[6] = ((w5 >> 52) | (w6 << 12)) & mask;
5345 out[7] = ((w6 >> 50) | (w7 << 14)) & mask;
5346 out[8] = ((w7 >> 48) | (w8 << 16)) & mask;
5347 out[9] = ((w8 >> 46) | (w9 << 18)) & mask;
5348 out[10] = ((w9 >> 44) | (w10 << 20)) & mask;
5349 out[11] = ((w10 >> 42) | (w11 << 22)) & mask;
5350 out[12] = ((w11 >> 40) | (w12 << 24)) & mask;
5351 out[13] = ((w12 >> 38) | (w13 << 26)) & mask;
5352 out[14] = ((w13 >> 36) | (w14 << 28)) & mask;
5353 out[15] = ((w14 >> 34) | (w15 << 30)) & mask;
5354 out[16] = ((w15 >> 32) | (w16 << 32)) & mask;
5355 out[17] = ((w16 >> 30) | (w17 << 34)) & mask;
5356 out[18] = ((w17 >> 28) | (w18 << 36)) & mask;
5357 out[19] = ((w18 >> 26) | (w19 << 38)) & mask;
5358 out[20] = ((w19 >> 24) | (w20 << 40)) & mask;
5359 out[21] = ((w20 >> 22) | (w21 << 42)) & mask;
5360 out[22] = ((w21 >> 20) | (w22 << 44)) & mask;
5361 out[23] = ((w22 >> 18) | (w23 << 46)) & mask;
5362 out[24] = ((w23 >> 16) | (w24 << 48)) & mask;
5363 out[25] = ((w24 >> 14) | (w25 << 50)) & mask;
5364 out[26] = ((w25 >> 12) | (w26 << 52)) & mask;
5365 out[27] = ((w26 >> 10) | (w27 << 54)) & mask;
5366 out[28] = ((w27 >> 8) | (w28 << 56)) & mask;
5367 out[29] = ((w28 >> 6) | (w29 << 58)) & mask;
5368 out[30] = ((w29 >> 4) | (w30 << 60)) & mask;
5369 out[31] = w30 >> 2;
5370
5371 return in;
5372 }
5373
5374 inline const uint8_t* unpack63_64(const uint8_t* in, uint64_t* out) {
5375 const uint64_t mask = 9223372036854775807ULL;
5376 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
5377 w0 = arrow::bit_util::FromLittleEndian(w0);
5378 in += 8;
5379 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
5380 w1 = arrow::bit_util::FromLittleEndian(w1);
5381 in += 8;
5382 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
5383 w2 = arrow::bit_util::FromLittleEndian(w2);
5384 in += 8;
5385 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
5386 w3 = arrow::bit_util::FromLittleEndian(w3);
5387 in += 8;
5388 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
5389 w4 = arrow::bit_util::FromLittleEndian(w4);
5390 in += 8;
5391 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
5392 w5 = arrow::bit_util::FromLittleEndian(w5);
5393 in += 8;
5394 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
5395 w6 = arrow::bit_util::FromLittleEndian(w6);
5396 in += 8;
5397 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
5398 w7 = arrow::bit_util::FromLittleEndian(w7);
5399 in += 8;
5400 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
5401 w8 = arrow::bit_util::FromLittleEndian(w8);
5402 in += 8;
5403 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
5404 w9 = arrow::bit_util::FromLittleEndian(w9);
5405 in += 8;
5406 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
5407 w10 = arrow::bit_util::FromLittleEndian(w10);
5408 in += 8;
5409 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
5410 w11 = arrow::bit_util::FromLittleEndian(w11);
5411 in += 8;
5412 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
5413 w12 = arrow::bit_util::FromLittleEndian(w12);
5414 in += 8;
5415 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
5416 w13 = arrow::bit_util::FromLittleEndian(w13);
5417 in += 8;
5418 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
5419 w14 = arrow::bit_util::FromLittleEndian(w14);
5420 in += 8;
5421 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
5422 w15 = arrow::bit_util::FromLittleEndian(w15);
5423 in += 8;
5424 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
5425 w16 = arrow::bit_util::FromLittleEndian(w16);
5426 in += 8;
5427 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
5428 w17 = arrow::bit_util::FromLittleEndian(w17);
5429 in += 8;
5430 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
5431 w18 = arrow::bit_util::FromLittleEndian(w18);
5432 in += 8;
5433 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
5434 w19 = arrow::bit_util::FromLittleEndian(w19);
5435 in += 8;
5436 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
5437 w20 = arrow::bit_util::FromLittleEndian(w20);
5438 in += 8;
5439 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
5440 w21 = arrow::bit_util::FromLittleEndian(w21);
5441 in += 8;
5442 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
5443 w22 = arrow::bit_util::FromLittleEndian(w22);
5444 in += 8;
5445 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
5446 w23 = arrow::bit_util::FromLittleEndian(w23);
5447 in += 8;
5448 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
5449 w24 = arrow::bit_util::FromLittleEndian(w24);
5450 in += 8;
5451 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
5452 w25 = arrow::bit_util::FromLittleEndian(w25);
5453 in += 8;
5454 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
5455 w26 = arrow::bit_util::FromLittleEndian(w26);
5456 in += 8;
5457 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
5458 w27 = arrow::bit_util::FromLittleEndian(w27);
5459 in += 8;
5460 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
5461 w28 = arrow::bit_util::FromLittleEndian(w28);
5462 in += 8;
5463 uint64_t w29 = util::SafeLoadAs<uint64_t>(in);
5464 w29 = arrow::bit_util::FromLittleEndian(w29);
5465 in += 8;
5466 uint64_t w30 = util::SafeLoadAs<uint64_t>(in);
5467 w30 = arrow::bit_util::FromLittleEndian(w30);
5468 in += 8;
5469 uint64_t w31 = util::SafeLoadAs<uint32_t>(in);
5470 w31 = arrow::bit_util::FromLittleEndian(w31);
5471 in += 4;
5472 out[0] = (w0)&mask;
5473 out[1] = ((w0 >> 63) | (w1 << 1)) & mask;
5474 out[2] = ((w1 >> 62) | (w2 << 2)) & mask;
5475 out[3] = ((w2 >> 61) | (w3 << 3)) & mask;
5476 out[4] = ((w3 >> 60) | (w4 << 4)) & mask;
5477 out[5] = ((w4 >> 59) | (w5 << 5)) & mask;
5478 out[6] = ((w5 >> 58) | (w6 << 6)) & mask;
5479 out[7] = ((w6 >> 57) | (w7 << 7)) & mask;
5480 out[8] = ((w7 >> 56) | (w8 << 8)) & mask;
5481 out[9] = ((w8 >> 55) | (w9 << 9)) & mask;
5482 out[10] = ((w9 >> 54) | (w10 << 10)) & mask;
5483 out[11] = ((w10 >> 53) | (w11 << 11)) & mask;
5484 out[12] = ((w11 >> 52) | (w12 << 12)) & mask;
5485 out[13] = ((w12 >> 51) | (w13 << 13)) & mask;
5486 out[14] = ((w13 >> 50) | (w14 << 14)) & mask;
5487 out[15] = ((w14 >> 49) | (w15 << 15)) & mask;
5488 out[16] = ((w15 >> 48) | (w16 << 16)) & mask;
5489 out[17] = ((w16 >> 47) | (w17 << 17)) & mask;
5490 out[18] = ((w17 >> 46) | (w18 << 18)) & mask;
5491 out[19] = ((w18 >> 45) | (w19 << 19)) & mask;
5492 out[20] = ((w19 >> 44) | (w20 << 20)) & mask;
5493 out[21] = ((w20 >> 43) | (w21 << 21)) & mask;
5494 out[22] = ((w21 >> 42) | (w22 << 22)) & mask;
5495 out[23] = ((w22 >> 41) | (w23 << 23)) & mask;
5496 out[24] = ((w23 >> 40) | (w24 << 24)) & mask;
5497 out[25] = ((w24 >> 39) | (w25 << 25)) & mask;
5498 out[26] = ((w25 >> 38) | (w26 << 26)) & mask;
5499 out[27] = ((w26 >> 37) | (w27 << 27)) & mask;
5500 out[28] = ((w27 >> 36) | (w28 << 28)) & mask;
5501 out[29] = ((w28 >> 35) | (w29 << 29)) & mask;
5502 out[30] = ((w29 >> 34) | (w30 << 30)) & mask;
5503 out[31] = ((w30 >> 33) | (w31 << 31)) & mask;
5504
5505 return in;
5506 }
5507
5508 inline const uint8_t* unpack64_64(const uint8_t* in, uint64_t* out) {
5509 uint64_t w0 = util::SafeLoadAs<uint64_t>(in);
5510 w0 = arrow::bit_util::FromLittleEndian(w0);
5511 in += 8;
5512 uint64_t w1 = util::SafeLoadAs<uint64_t>(in);
5513 w1 = arrow::bit_util::FromLittleEndian(w1);
5514 in += 8;
5515 uint64_t w2 = util::SafeLoadAs<uint64_t>(in);
5516 w2 = arrow::bit_util::FromLittleEndian(w2);
5517 in += 8;
5518 uint64_t w3 = util::SafeLoadAs<uint64_t>(in);
5519 w3 = arrow::bit_util::FromLittleEndian(w3);
5520 in += 8;
5521 uint64_t w4 = util::SafeLoadAs<uint64_t>(in);
5522 w4 = arrow::bit_util::FromLittleEndian(w4);
5523 in += 8;
5524 uint64_t w5 = util::SafeLoadAs<uint64_t>(in);
5525 w5 = arrow::bit_util::FromLittleEndian(w5);
5526 in += 8;
5527 uint64_t w6 = util::SafeLoadAs<uint64_t>(in);
5528 w6 = arrow::bit_util::FromLittleEndian(w6);
5529 in += 8;
5530 uint64_t w7 = util::SafeLoadAs<uint64_t>(in);
5531 w7 = arrow::bit_util::FromLittleEndian(w7);
5532 in += 8;
5533 uint64_t w8 = util::SafeLoadAs<uint64_t>(in);
5534 w8 = arrow::bit_util::FromLittleEndian(w8);
5535 in += 8;
5536 uint64_t w9 = util::SafeLoadAs<uint64_t>(in);
5537 w9 = arrow::bit_util::FromLittleEndian(w9);
5538 in += 8;
5539 uint64_t w10 = util::SafeLoadAs<uint64_t>(in);
5540 w10 = arrow::bit_util::FromLittleEndian(w10);
5541 in += 8;
5542 uint64_t w11 = util::SafeLoadAs<uint64_t>(in);
5543 w11 = arrow::bit_util::FromLittleEndian(w11);
5544 in += 8;
5545 uint64_t w12 = util::SafeLoadAs<uint64_t>(in);
5546 w12 = arrow::bit_util::FromLittleEndian(w12);
5547 in += 8;
5548 uint64_t w13 = util::SafeLoadAs<uint64_t>(in);
5549 w13 = arrow::bit_util::FromLittleEndian(w13);
5550 in += 8;
5551 uint64_t w14 = util::SafeLoadAs<uint64_t>(in);
5552 w14 = arrow::bit_util::FromLittleEndian(w14);
5553 in += 8;
5554 uint64_t w15 = util::SafeLoadAs<uint64_t>(in);
5555 w15 = arrow::bit_util::FromLittleEndian(w15);
5556 in += 8;
5557 uint64_t w16 = util::SafeLoadAs<uint64_t>(in);
5558 w16 = arrow::bit_util::FromLittleEndian(w16);
5559 in += 8;
5560 uint64_t w17 = util::SafeLoadAs<uint64_t>(in);
5561 w17 = arrow::bit_util::FromLittleEndian(w17);
5562 in += 8;
5563 uint64_t w18 = util::SafeLoadAs<uint64_t>(in);
5564 w18 = arrow::bit_util::FromLittleEndian(w18);
5565 in += 8;
5566 uint64_t w19 = util::SafeLoadAs<uint64_t>(in);
5567 w19 = arrow::bit_util::FromLittleEndian(w19);
5568 in += 8;
5569 uint64_t w20 = util::SafeLoadAs<uint64_t>(in);
5570 w20 = arrow::bit_util::FromLittleEndian(w20);
5571 in += 8;
5572 uint64_t w21 = util::SafeLoadAs<uint64_t>(in);
5573 w21 = arrow::bit_util::FromLittleEndian(w21);
5574 in += 8;
5575 uint64_t w22 = util::SafeLoadAs<uint64_t>(in);
5576 w22 = arrow::bit_util::FromLittleEndian(w22);
5577 in += 8;
5578 uint64_t w23 = util::SafeLoadAs<uint64_t>(in);
5579 w23 = arrow::bit_util::FromLittleEndian(w23);
5580 in += 8;
5581 uint64_t w24 = util::SafeLoadAs<uint64_t>(in);
5582 w24 = arrow::bit_util::FromLittleEndian(w24);
5583 in += 8;
5584 uint64_t w25 = util::SafeLoadAs<uint64_t>(in);
5585 w25 = arrow::bit_util::FromLittleEndian(w25);
5586 in += 8;
5587 uint64_t w26 = util::SafeLoadAs<uint64_t>(in);
5588 w26 = arrow::bit_util::FromLittleEndian(w26);
5589 in += 8;
5590 uint64_t w27 = util::SafeLoadAs<uint64_t>(in);
5591 w27 = arrow::bit_util::FromLittleEndian(w27);
5592 in += 8;
5593 uint64_t w28 = util::SafeLoadAs<uint64_t>(in);
5594 w28 = arrow::bit_util::FromLittleEndian(w28);
5595 in += 8;
5596 uint64_t w29 = util::SafeLoadAs<uint64_t>(in);
5597 w29 = arrow::bit_util::FromLittleEndian(w29);
5598 in += 8;
5599 uint64_t w30 = util::SafeLoadAs<uint64_t>(in);
5600 w30 = arrow::bit_util::FromLittleEndian(w30);
5601 in += 8;
5602 uint64_t w31 = util::SafeLoadAs<uint64_t>(in);
5603 w31 = arrow::bit_util::FromLittleEndian(w31);
5604 in += 8;
5605 out[0] = w0;
5606 out[1] = w1;
5607 out[2] = w2;
5608 out[3] = w3;
5609 out[4] = w4;
5610 out[5] = w5;
5611 out[6] = w6;
5612 out[7] = w7;
5613 out[8] = w8;
5614 out[9] = w9;
5615 out[10] = w10;
5616 out[11] = w11;
5617 out[12] = w12;
5618 out[13] = w13;
5619 out[14] = w14;
5620 out[15] = w15;
5621 out[16] = w16;
5622 out[17] = w17;
5623 out[18] = w18;
5624 out[19] = w19;
5625 out[20] = w20;
5626 out[21] = w21;
5627 out[22] = w22;
5628 out[23] = w23;
5629 out[24] = w24;
5630 out[25] = w25;
5631 out[26] = w26;
5632 out[27] = w27;
5633 out[28] = w28;
5634 out[29] = w29;
5635 out[30] = w30;
5636 out[31] = w31;
5637
5638 return in;
5639 }
5640
5641 }
5642 }