You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@parquet.apache.org by we...@apache.org on 2017/06/27 21:07:36 UTC

[2/3] parquet-cpp git commit: PARQUET-1045: Remove code that's being moved to Apache Arrow in ARROW-1154

http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/2f5ef895/src/parquet/util/bpacking.h
----------------------------------------------------------------------
diff --git a/src/parquet/util/bpacking.h b/src/parquet/util/bpacking.h
deleted file mode 100644
index aa6fdab..0000000
--- a/src/parquet/util/bpacking.h
+++ /dev/null
@@ -1,3342 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// This file was modified from its original version for inclusion in parquet-cpp.
-// Original source:
-// https://github.com/lemire/FrameOfReference/blob/6ccaf9e97160f9a3b299e23a8ef739e711ef0c71/src/bpacking.cpp
-// The original copyright notice follows.
-
-/**
-*
-* This code is released under the
-* Apache License Version 2.0 http://www.apache.org/licenses/.
-* (c) Daniel Lemire 2013
-*/
-
-#ifndef PARQUET_UTIL_BPACKING_H
-#define PARQUET_UTIL_BPACKING_H
-
-#include <stdexcept>
-
-namespace parquet {
-
-inline const uint32_t* unpack1_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) & 1;
-  out++;
-  *out = ((*in) >> 1) & 1;
-  out++;
-  *out = ((*in) >> 2) & 1;
-  out++;
-  *out = ((*in) >> 3) & 1;
-  out++;
-  *out = ((*in) >> 4) & 1;
-  out++;
-  *out = ((*in) >> 5) & 1;
-  out++;
-  *out = ((*in) >> 6) & 1;
-  out++;
-  *out = ((*in) >> 7) & 1;
-  out++;
-  *out = ((*in) >> 8) & 1;
-  out++;
-  *out = ((*in) >> 9) & 1;
-  out++;
-  *out = ((*in) >> 10) & 1;
-  out++;
-  *out = ((*in) >> 11) & 1;
-  out++;
-  *out = ((*in) >> 12) & 1;
-  out++;
-  *out = ((*in) >> 13) & 1;
-  out++;
-  *out = ((*in) >> 14) & 1;
-  out++;
-  *out = ((*in) >> 15) & 1;
-  out++;
-  *out = ((*in) >> 16) & 1;
-  out++;
-  *out = ((*in) >> 17) & 1;
-  out++;
-  *out = ((*in) >> 18) & 1;
-  out++;
-  *out = ((*in) >> 19) & 1;
-  out++;
-  *out = ((*in) >> 20) & 1;
-  out++;
-  *out = ((*in) >> 21) & 1;
-  out++;
-  *out = ((*in) >> 22) & 1;
-  out++;
-  *out = ((*in) >> 23) & 1;
-  out++;
-  *out = ((*in) >> 24) & 1;
-  out++;
-  *out = ((*in) >> 25) & 1;
-  out++;
-  *out = ((*in) >> 26) & 1;
-  out++;
-  *out = ((*in) >> 27) & 1;
-  out++;
-  *out = ((*in) >> 28) & 1;
-  out++;
-  *out = ((*in) >> 29) & 1;
-  out++;
-  *out = ((*in) >> 30) & 1;
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack2_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 2);
-  out++;
-  *out = ((*in) >> 4) % (1U << 2);
-  out++;
-  *out = ((*in) >> 6) % (1U << 2);
-  out++;
-  *out = ((*in) >> 8) % (1U << 2);
-  out++;
-  *out = ((*in) >> 10) % (1U << 2);
-  out++;
-  *out = ((*in) >> 12) % (1U << 2);
-  out++;
-  *out = ((*in) >> 14) % (1U << 2);
-  out++;
-  *out = ((*in) >> 16) % (1U << 2);
-  out++;
-  *out = ((*in) >> 18) % (1U << 2);
-  out++;
-  *out = ((*in) >> 20) % (1U << 2);
-  out++;
-  *out = ((*in) >> 22) % (1U << 2);
-  out++;
-  *out = ((*in) >> 24) % (1U << 2);
-  out++;
-  *out = ((*in) >> 26) % (1U << 2);
-  out++;
-  *out = ((*in) >> 28) % (1U << 2);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 2);
-  out++;
-  *out = ((*in) >> 4) % (1U << 2);
-  out++;
-  *out = ((*in) >> 6) % (1U << 2);
-  out++;
-  *out = ((*in) >> 8) % (1U << 2);
-  out++;
-  *out = ((*in) >> 10) % (1U << 2);
-  out++;
-  *out = ((*in) >> 12) % (1U << 2);
-  out++;
-  *out = ((*in) >> 14) % (1U << 2);
-  out++;
-  *out = ((*in) >> 16) % (1U << 2);
-  out++;
-  *out = ((*in) >> 18) % (1U << 2);
-  out++;
-  *out = ((*in) >> 20) % (1U << 2);
-  out++;
-  *out = ((*in) >> 22) % (1U << 2);
-  out++;
-  *out = ((*in) >> 24) % (1U << 2);
-  out++;
-  *out = ((*in) >> 26) % (1U << 2);
-  out++;
-  *out = ((*in) >> 28) % (1U << 2);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack3_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 3);
-  out++;
-  *out = ((*in) >> 6) % (1U << 3);
-  out++;
-  *out = ((*in) >> 9) % (1U << 3);
-  out++;
-  *out = ((*in) >> 12) % (1U << 3);
-  out++;
-  *out = ((*in) >> 15) % (1U << 3);
-  out++;
-  *out = ((*in) >> 18) % (1U << 3);
-  out++;
-  *out = ((*in) >> 21) % (1U << 3);
-  out++;
-  *out = ((*in) >> 24) % (1U << 3);
-  out++;
-  *out = ((*in) >> 27) % (1U << 3);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (3 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 3);
-  out++;
-  *out = ((*in) >> 4) % (1U << 3);
-  out++;
-  *out = ((*in) >> 7) % (1U << 3);
-  out++;
-  *out = ((*in) >> 10) % (1U << 3);
-  out++;
-  *out = ((*in) >> 13) % (1U << 3);
-  out++;
-  *out = ((*in) >> 16) % (1U << 3);
-  out++;
-  *out = ((*in) >> 19) % (1U << 3);
-  out++;
-  *out = ((*in) >> 22) % (1U << 3);
-  out++;
-  *out = ((*in) >> 25) % (1U << 3);
-  out++;
-  *out = ((*in) >> 28) % (1U << 3);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (3 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 3);
-  out++;
-  *out = ((*in) >> 5) % (1U << 3);
-  out++;
-  *out = ((*in) >> 8) % (1U << 3);
-  out++;
-  *out = ((*in) >> 11) % (1U << 3);
-  out++;
-  *out = ((*in) >> 14) % (1U << 3);
-  out++;
-  *out = ((*in) >> 17) % (1U << 3);
-  out++;
-  *out = ((*in) >> 20) % (1U << 3);
-  out++;
-  *out = ((*in) >> 23) % (1U << 3);
-  out++;
-  *out = ((*in) >> 26) % (1U << 3);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack4_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 4);
-  out++;
-  *out = ((*in) >> 8) % (1U << 4);
-  out++;
-  *out = ((*in) >> 12) % (1U << 4);
-  out++;
-  *out = ((*in) >> 16) % (1U << 4);
-  out++;
-  *out = ((*in) >> 20) % (1U << 4);
-  out++;
-  *out = ((*in) >> 24) % (1U << 4);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 4);
-  out++;
-  *out = ((*in) >> 8) % (1U << 4);
-  out++;
-  *out = ((*in) >> 12) % (1U << 4);
-  out++;
-  *out = ((*in) >> 16) % (1U << 4);
-  out++;
-  *out = ((*in) >> 20) % (1U << 4);
-  out++;
-  *out = ((*in) >> 24) % (1U << 4);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 4);
-  out++;
-  *out = ((*in) >> 8) % (1U << 4);
-  out++;
-  *out = ((*in) >> 12) % (1U << 4);
-  out++;
-  *out = ((*in) >> 16) % (1U << 4);
-  out++;
-  *out = ((*in) >> 20) % (1U << 4);
-  out++;
-  *out = ((*in) >> 24) % (1U << 4);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 4);
-  out++;
-  *out = ((*in) >> 8) % (1U << 4);
-  out++;
-  *out = ((*in) >> 12) % (1U << 4);
-  out++;
-  *out = ((*in) >> 16) % (1U << 4);
-  out++;
-  *out = ((*in) >> 20) % (1U << 4);
-  out++;
-  *out = ((*in) >> 24) % (1U << 4);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack5_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 5);
-  out++;
-  *out = ((*in) >> 10) % (1U << 5);
-  out++;
-  *out = ((*in) >> 15) % (1U << 5);
-  out++;
-  *out = ((*in) >> 20) % (1U << 5);
-  out++;
-  *out = ((*in) >> 25) % (1U << 5);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (5 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 5);
-  out++;
-  *out = ((*in) >> 8) % (1U << 5);
-  out++;
-  *out = ((*in) >> 13) % (1U << 5);
-  out++;
-  *out = ((*in) >> 18) % (1U << 5);
-  out++;
-  *out = ((*in) >> 23) % (1U << 5);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (5 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 5);
-  out++;
-  *out = ((*in) >> 6) % (1U << 5);
-  out++;
-  *out = ((*in) >> 11) % (1U << 5);
-  out++;
-  *out = ((*in) >> 16) % (1U << 5);
-  out++;
-  *out = ((*in) >> 21) % (1U << 5);
-  out++;
-  *out = ((*in) >> 26) % (1U << 5);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (5 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 5);
-  out++;
-  *out = ((*in) >> 9) % (1U << 5);
-  out++;
-  *out = ((*in) >> 14) % (1U << 5);
-  out++;
-  *out = ((*in) >> 19) % (1U << 5);
-  out++;
-  *out = ((*in) >> 24) % (1U << 5);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (5 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 5);
-  out++;
-  *out = ((*in) >> 7) % (1U << 5);
-  out++;
-  *out = ((*in) >> 12) % (1U << 5);
-  out++;
-  *out = ((*in) >> 17) % (1U << 5);
-  out++;
-  *out = ((*in) >> 22) % (1U << 5);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack6_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 6);
-  out++;
-  *out = ((*in) >> 12) % (1U << 6);
-  out++;
-  *out = ((*in) >> 18) % (1U << 6);
-  out++;
-  *out = ((*in) >> 24) % (1U << 6);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (6 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 6);
-  out++;
-  *out = ((*in) >> 10) % (1U << 6);
-  out++;
-  *out = ((*in) >> 16) % (1U << 6);
-  out++;
-  *out = ((*in) >> 22) % (1U << 6);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (6 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 6);
-  out++;
-  *out = ((*in) >> 8) % (1U << 6);
-  out++;
-  *out = ((*in) >> 14) % (1U << 6);
-  out++;
-  *out = ((*in) >> 20) % (1U << 6);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 6);
-  out++;
-  *out = ((*in) >> 12) % (1U << 6);
-  out++;
-  *out = ((*in) >> 18) % (1U << 6);
-  out++;
-  *out = ((*in) >> 24) % (1U << 6);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (6 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 6);
-  out++;
-  *out = ((*in) >> 10) % (1U << 6);
-  out++;
-  *out = ((*in) >> 16) % (1U << 6);
-  out++;
-  *out = ((*in) >> 22) % (1U << 6);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (6 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 6);
-  out++;
-  *out = ((*in) >> 8) % (1U << 6);
-  out++;
-  *out = ((*in) >> 14) % (1U << 6);
-  out++;
-  *out = ((*in) >> 20) % (1U << 6);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack7_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 7);
-  out++;
-  *out = ((*in) >> 14) % (1U << 7);
-  out++;
-  *out = ((*in) >> 21) % (1U << 7);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (7 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 7);
-  out++;
-  *out = ((*in) >> 10) % (1U << 7);
-  out++;
-  *out = ((*in) >> 17) % (1U << 7);
-  out++;
-  *out = ((*in) >> 24) % (1U << 7);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (7 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 7);
-  out++;
-  *out = ((*in) >> 13) % (1U << 7);
-  out++;
-  *out = ((*in) >> 20) % (1U << 7);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (7 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 7);
-  out++;
-  *out = ((*in) >> 9) % (1U << 7);
-  out++;
-  *out = ((*in) >> 16) % (1U << 7);
-  out++;
-  *out = ((*in) >> 23) % (1U << 7);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (7 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 7);
-  out++;
-  *out = ((*in) >> 12) % (1U << 7);
-  out++;
-  *out = ((*in) >> 19) % (1U << 7);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (7 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 7);
-  out++;
-  *out = ((*in) >> 8) % (1U << 7);
-  out++;
-  *out = ((*in) >> 15) % (1U << 7);
-  out++;
-  *out = ((*in) >> 22) % (1U << 7);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (7 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 7);
-  out++;
-  *out = ((*in) >> 11) % (1U << 7);
-  out++;
-  *out = ((*in) >> 18) % (1U << 7);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack8_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 8);
-  out++;
-  *out = ((*in) >> 16) % (1U << 8);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack9_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 9);
-  out++;
-  *out = ((*in) >> 18) % (1U << 9);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (9 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 9);
-  out++;
-  *out = ((*in) >> 13) % (1U << 9);
-  out++;
-  *out = ((*in) >> 22) % (1U << 9);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (9 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 9);
-  out++;
-  *out = ((*in) >> 17) % (1U << 9);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (9 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 9);
-  out++;
-  *out = ((*in) >> 12) % (1U << 9);
-  out++;
-  *out = ((*in) >> 21) % (1U << 9);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (9 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 9);
-  out++;
-  *out = ((*in) >> 16) % (1U << 9);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (9 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 9);
-  out++;
-  *out = ((*in) >> 11) % (1U << 9);
-  out++;
-  *out = ((*in) >> 20) % (1U << 9);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (9 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 9);
-  out++;
-  *out = ((*in) >> 15) % (1U << 9);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (9 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 9);
-  out++;
-  *out = ((*in) >> 10) % (1U << 9);
-  out++;
-  *out = ((*in) >> 19) % (1U << 9);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (9 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 9);
-  out++;
-  *out = ((*in) >> 14) % (1U << 9);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack10_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 10);
-  out++;
-  *out = ((*in) >> 20) % (1U << 10);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (10 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 10);
-  out++;
-  *out = ((*in) >> 18) % (1U << 10);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (10 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 10);
-  out++;
-  *out = ((*in) >> 16) % (1U << 10);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (10 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 10);
-  out++;
-  *out = ((*in) >> 14) % (1U << 10);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (10 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 10);
-  out++;
-  *out = ((*in) >> 12) % (1U << 10);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 10);
-  out++;
-  *out = ((*in) >> 20) % (1U << 10);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (10 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 10);
-  out++;
-  *out = ((*in) >> 18) % (1U << 10);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (10 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 10);
-  out++;
-  *out = ((*in) >> 16) % (1U << 10);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (10 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 10);
-  out++;
-  *out = ((*in) >> 14) % (1U << 10);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (10 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 10);
-  out++;
-  *out = ((*in) >> 12) % (1U << 10);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack11_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 11);
-  out++;
-  *out = ((*in) >> 11) % (1U << 11);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (11 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 11);
-  out++;
-  *out = ((*in) >> 12) % (1U << 11);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (11 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 11);
-  out++;
-  *out = ((*in) >> 13) % (1U << 11);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (11 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 11);
-  out++;
-  *out = ((*in) >> 14) % (1U << 11);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (11 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 11);
-  out++;
-  *out = ((*in) >> 15) % (1U << 11);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (11 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 11);
-  out++;
-  *out = ((*in) >> 16) % (1U << 11);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (11 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 11);
-  out++;
-  *out = ((*in) >> 17) % (1U << 11);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (11 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 11);
-  out++;
-  *out = ((*in) >> 18) % (1U << 11);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (11 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 11);
-  out++;
-  *out = ((*in) >> 19) % (1U << 11);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (11 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 11);
-  out++;
-  *out = ((*in) >> 20) % (1U << 11);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (11 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 11);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack12_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 12);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (12 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 12);
-  out++;
-  *out = ((*in) >> 16) % (1U << 12);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (12 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 12);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 12);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (12 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 12);
-  out++;
-  *out = ((*in) >> 16) % (1U << 12);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (12 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 12);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 12);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (12 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 12);
-  out++;
-  *out = ((*in) >> 16) % (1U << 12);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (12 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 12);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 12);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (12 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 12);
-  out++;
-  *out = ((*in) >> 16) % (1U << 12);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (12 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 12);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack13_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 13);
-  out++;
-  *out = ((*in) >> 13) % (1U << 13);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (13 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 13);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (13 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 13);
-  out++;
-  *out = ((*in) >> 14) % (1U << 13);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (13 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 13);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (13 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 13);
-  out++;
-  *out = ((*in) >> 15) % (1U << 13);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (13 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 13);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (13 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 13);
-  out++;
-  *out = ((*in) >> 16) % (1U << 13);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (13 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 13);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (13 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 13);
-  out++;
-  *out = ((*in) >> 17) % (1U << 13);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (13 - 11);
-  out++;
-  *out = ((*in) >> 11) % (1U << 13);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (13 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 13);
-  out++;
-  *out = ((*in) >> 18) % (1U << 13);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (13 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 13);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (13 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 13);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack14_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 14);
-  out++;
-  *out = ((*in) >> 14) % (1U << 14);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (14 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 14);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (14 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 14);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (14 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 14);
-  out++;
-  *out = ((*in) >> 16) % (1U << 14);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (14 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 14);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (14 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 14);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (14 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 14);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 14);
-  out++;
-  *out = ((*in) >> 14) % (1U << 14);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (14 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 14);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (14 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 14);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (14 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 14);
-  out++;
-  *out = ((*in) >> 16) % (1U << 14);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (14 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 14);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (14 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 14);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (14 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 14);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack15_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 15);
-  out++;
-  *out = ((*in) >> 15) % (1U << 15);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (15 - 13);
-  out++;
-  *out = ((*in) >> 13) % (1U << 15);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (15 - 11);
-  out++;
-  *out = ((*in) >> 11) % (1U << 15);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (15 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 15);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (15 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 15);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (15 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 15);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (15 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 15);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (15 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 15);
-  out++;
-  *out = ((*in) >> 16) % (1U << 15);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (15 - 14);
-  out++;
-  *out = ((*in) >> 14) % (1U << 15);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (15 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 15);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (15 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 15);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (15 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 15);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (15 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 15);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (15 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 15);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (15 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 15);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack16_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack17_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (17 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 17);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (17 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 17);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (17 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 17);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (17 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 17);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (17 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 17);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (17 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 17);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (17 - 14);
-  out++;
-  *out = ((*in) >> 14) % (1U << 17);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (17 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (17 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 17);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (17 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 17);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (17 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 17);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (17 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 17);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (17 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 17);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (17 - 11);
-  out++;
-  *out = ((*in) >> 11) % (1U << 17);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (17 - 13);
-  out++;
-  *out = ((*in) >> 13) % (1U << 17);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (17 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack18_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (18 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 18);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (18 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 18);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (18 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 18);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (18 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (18 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 18);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (18 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 18);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (18 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 18);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (18 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (18 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 18);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (18 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 18);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (18 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 18);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (18 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (18 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 18);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (18 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 18);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (18 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 18);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (18 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack19_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (19 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 19);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (19 - 12);
-  out++;
-  *out = ((*in) >> 12) % (1U << 19);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (19 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (19 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 19);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (19 - 11);
-  out++;
-  *out = ((*in) >> 11) % (1U << 19);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (19 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (19 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 19);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (19 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 19);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (19 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (19 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 19);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (19 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 19);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (19 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (19 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 19);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (19 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 19);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (19 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (19 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 19);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (19 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 19);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (19 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack20_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (20 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 20);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (20 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (20 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 20);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (20 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (20 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 20);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (20 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (20 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 20);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (20 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (20 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 20);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (20 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (20 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 20);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (20 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (20 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 20);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (20 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (20 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 20);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (20 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack21_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (21 - 10);
-  out++;
-  *out = ((*in) >> 10) % (1U << 21);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (21 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (21 - 9);
-  out++;
-  *out = ((*in) >> 9) % (1U << 21);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (21 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (21 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 21);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (21 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (21 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 21);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (21 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (21 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 21);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (21 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (21 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 21);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (21 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (21 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 21);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (21 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (21 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 21);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (21 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (21 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 21);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (21 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (21 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 21);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (21 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack22_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (22 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (22 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 22);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (22 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (22 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 22);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (22 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (22 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 22);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (22 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (22 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 22);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (22 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (22 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (22 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (22 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 22);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (22 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (22 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 22);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (22 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (22 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 22);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (22 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (22 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 22);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (22 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (22 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack23_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 23);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (23 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (23 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 23);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (23 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (23 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (23 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 23);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (23 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (23 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 23);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (23 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (23 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (23 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 23);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (23 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (23 - 7);
-  out++;
-  *out = ((*in) >> 7) % (1U << 23);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 21)) << (23 - 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (23 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (23 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 23);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (23 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (23 - 8);
-  out++;
-  *out = ((*in) >> 8) % (1U << 23);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (23 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (23 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (23 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 23);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (23 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (23 - 9);
-  out++;
-  *out = ((*in) >> 9);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack24_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (24 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (24 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack25_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 25);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (25 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (25 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (25 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 25);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (25 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (25 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (25 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (25 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 25);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (25 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (25 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (25 - 5);
-  out++;
-  *out = ((*in) >> 5) % (1U << 25);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 23)) << (25 - 23);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (25 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (25 - 9);
-  out++;
-  *out = ((*in) >> 9);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (25 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 25);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (25 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (25 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (25 - 6);
-  out++;
-  *out = ((*in) >> 6) % (1U << 25);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (25 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (25 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (25 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (25 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 25);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 21)) << (25 - 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (25 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (25 - 7);
-  out++;
-  *out = ((*in) >> 7);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack26_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (26 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (26 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (26 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (26 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 26);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (26 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (26 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (26 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (26 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 26);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (26 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (26 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (26 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (26 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (26 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (26 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (26 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (26 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 26);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (26 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (26 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (26 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (26 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 26);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (26 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (26 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (26 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (26 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack27_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 27);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (27 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (27 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (27 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (27 - 7);
-  out++;
-  *out = ((*in) >> 7);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (27 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 27);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (27 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (27 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (27 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (27 - 9);
-  out++;
-  *out = ((*in) >> 9);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (27 - 4);
-  out++;
-  *out = ((*in) >> 4) % (1U << 27);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 26)) << (27 - 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 21)) << (27 - 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (27 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (27 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (27 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (27 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 27);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 23)) << (27 - 23);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (27 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (27 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (27 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (27 - 3);
-  out++;
-  *out = ((*in) >> 3) % (1U << 27);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 25)) << (27 - 25);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (27 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (27 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (27 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (27 - 5);
-  out++;
-  *out = ((*in) >> 5);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack28_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (28 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (28 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (28 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (28 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (28 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (28 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (28 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (28 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (28 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (28 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (28 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (28 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (28 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (28 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (28 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (28 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (28 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (28 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (28 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (28 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (28 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (28 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (28 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (28 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack29_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 29);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 26)) << (29 - 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 23)) << (29 - 23);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (29 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (29 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (29 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (29 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (29 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (29 - 5);
-  out++;
-  *out = ((*in) >> 5);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (29 - 2);
-  out++;
-  *out = ((*in) >> 2) % (1U << 29);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 28)) << (29 - 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 25)) << (29 - 25);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (29 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (29 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (29 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (29 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (29 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (29 - 7);
-  out++;
-  *out = ((*in) >> 7);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (29 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (29 - 1);
-  out++;
-  *out = ((*in) >> 1) % (1U << 29);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 27)) << (29 - 27);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (29 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 21)) << (29 - 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (29 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (29 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (29 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (29 - 9);
-  out++;
-  *out = ((*in) >> 9);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (29 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (29 - 3);
-  out++;
-  *out = ((*in) >> 3);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack30_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 30);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 28)) << (30 - 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 26)) << (30 - 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (30 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (30 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (30 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (30 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (30 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (30 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (30 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (30 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (30 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (30 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (30 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (30 - 2);
-  out++;
-  *out = ((*in) >> 2);
-  ++in;
-  out++;
-  *out = ((*in) >> 0) % (1U << 30);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 28)) << (30 - 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 26)) << (30 - 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (30 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (30 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (30 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (30 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (30 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (30 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (30 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (30 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (30 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (30 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (30 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (30 - 2);
-  out++;
-  *out = ((*in) >> 2);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack31_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0) % (1U << 31);
-  out++;
-  *out = ((*in) >> 31);
-  ++in;
-  *out |= ((*in) % (1U << 30)) << (31 - 30);
-  out++;
-  *out = ((*in) >> 30);
-  ++in;
-  *out |= ((*in) % (1U << 29)) << (31 - 29);
-  out++;
-  *out = ((*in) >> 29);
-  ++in;
-  *out |= ((*in) % (1U << 28)) << (31 - 28);
-  out++;
-  *out = ((*in) >> 28);
-  ++in;
-  *out |= ((*in) % (1U << 27)) << (31 - 27);
-  out++;
-  *out = ((*in) >> 27);
-  ++in;
-  *out |= ((*in) % (1U << 26)) << (31 - 26);
-  out++;
-  *out = ((*in) >> 26);
-  ++in;
-  *out |= ((*in) % (1U << 25)) << (31 - 25);
-  out++;
-  *out = ((*in) >> 25);
-  ++in;
-  *out |= ((*in) % (1U << 24)) << (31 - 24);
-  out++;
-  *out = ((*in) >> 24);
-  ++in;
-  *out |= ((*in) % (1U << 23)) << (31 - 23);
-  out++;
-  *out = ((*in) >> 23);
-  ++in;
-  *out |= ((*in) % (1U << 22)) << (31 - 22);
-  out++;
-  *out = ((*in) >> 22);
-  ++in;
-  *out |= ((*in) % (1U << 21)) << (31 - 21);
-  out++;
-  *out = ((*in) >> 21);
-  ++in;
-  *out |= ((*in) % (1U << 20)) << (31 - 20);
-  out++;
-  *out = ((*in) >> 20);
-  ++in;
-  *out |= ((*in) % (1U << 19)) << (31 - 19);
-  out++;
-  *out = ((*in) >> 19);
-  ++in;
-  *out |= ((*in) % (1U << 18)) << (31 - 18);
-  out++;
-  *out = ((*in) >> 18);
-  ++in;
-  *out |= ((*in) % (1U << 17)) << (31 - 17);
-  out++;
-  *out = ((*in) >> 17);
-  ++in;
-  *out |= ((*in) % (1U << 16)) << (31 - 16);
-  out++;
-  *out = ((*in) >> 16);
-  ++in;
-  *out |= ((*in) % (1U << 15)) << (31 - 15);
-  out++;
-  *out = ((*in) >> 15);
-  ++in;
-  *out |= ((*in) % (1U << 14)) << (31 - 14);
-  out++;
-  *out = ((*in) >> 14);
-  ++in;
-  *out |= ((*in) % (1U << 13)) << (31 - 13);
-  out++;
-  *out = ((*in) >> 13);
-  ++in;
-  *out |= ((*in) % (1U << 12)) << (31 - 12);
-  out++;
-  *out = ((*in) >> 12);
-  ++in;
-  *out |= ((*in) % (1U << 11)) << (31 - 11);
-  out++;
-  *out = ((*in) >> 11);
-  ++in;
-  *out |= ((*in) % (1U << 10)) << (31 - 10);
-  out++;
-  *out = ((*in) >> 10);
-  ++in;
-  *out |= ((*in) % (1U << 9)) << (31 - 9);
-  out++;
-  *out = ((*in) >> 9);
-  ++in;
-  *out |= ((*in) % (1U << 8)) << (31 - 8);
-  out++;
-  *out = ((*in) >> 8);
-  ++in;
-  *out |= ((*in) % (1U << 7)) << (31 - 7);
-  out++;
-  *out = ((*in) >> 7);
-  ++in;
-  *out |= ((*in) % (1U << 6)) << (31 - 6);
-  out++;
-  *out = ((*in) >> 6);
-  ++in;
-  *out |= ((*in) % (1U << 5)) << (31 - 5);
-  out++;
-  *out = ((*in) >> 5);
-  ++in;
-  *out |= ((*in) % (1U << 4)) << (31 - 4);
-  out++;
-  *out = ((*in) >> 4);
-  ++in;
-  *out |= ((*in) % (1U << 3)) << (31 - 3);
-  out++;
-  *out = ((*in) >> 3);
-  ++in;
-  *out |= ((*in) % (1U << 2)) << (31 - 2);
-  out++;
-  *out = ((*in) >> 2);
-  ++in;
-  *out |= ((*in) % (1U << 1)) << (31 - 1);
-  out++;
-  *out = ((*in) >> 1);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* unpack32_32(const uint32_t* in, uint32_t* out) {
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-  *out = ((*in) >> 0);
-  ++in;
-  out++;
-
-  return in;
-}
-
-inline const uint32_t* nullunpacker32(const uint32_t* in, uint32_t* out) {
-  for (int k = 0; k < 32; ++k) {
-    out[k] = 0;
-  }
-  return in;
-}
-
-inline int unpack32(const uint32_t* in, uint32_t* out, int batch_size, int num_bits) {
-  batch_size = batch_size / 32 * 32;
-  int num_loops = batch_size / 32;
-
-  switch (num_bits) {
-    case 0:
-      for (int i = 0; i < num_loops; ++i)
-        in = nullunpacker32(in, out + i * 32);
-      break;
-    case 1:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack1_32(in, out + i * 32);
-      break;
-    case 2:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack2_32(in, out + i * 32);
-      break;
-    case 3:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack3_32(in, out + i * 32);
-      break;
-    case 4:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack4_32(in, out + i * 32);
-      break;
-    case 5:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack5_32(in, out + i * 32);
-      break;
-    case 6:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack6_32(in, out + i * 32);
-      break;
-    case 7:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack7_32(in, out + i * 32);
-      break;
-    case 8:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack8_32(in, out + i * 32);
-      break;
-    case 9:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack9_32(in, out + i * 32);
-      break;
-    case 10:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack10_32(in, out + i * 32);
-      break;
-    case 11:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack11_32(in, out + i * 32);
-      break;
-    case 12:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack12_32(in, out + i * 32);
-      break;
-    case 13:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack13_32(in, out + i * 32);
-      break;
-    case 14:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack14_32(in, out + i * 32);
-      break;
-    case 15:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack15_32(in, out + i * 32);
-      break;
-    case 16:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack16_32(in, out + i * 32);
-      break;
-    case 17:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack17_32(in, out + i * 32);
-      break;
-    case 18:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack18_32(in, out + i * 32);
-      break;
-    case 19:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack19_32(in, out + i * 32);
-      break;
-    case 20:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack20_32(in, out + i * 32);
-      break;
-    case 21:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack21_32(in, out + i * 32);
-      break;
-    case 22:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack22_32(in, out + i * 32);
-      break;
-    case 23:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack23_32(in, out + i * 32);
-      break;
-    case 24:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack24_32(in, out + i * 32);
-      break;
-    case 25:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack25_32(in, out + i * 32);
-      break;
-    case 26:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack26_32(in, out + i * 32);
-      break;
-    case 27:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack27_32(in, out + i * 32);
-      break;
-    case 28:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack28_32(in, out + i * 32);
-      break;
-    case 29:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack29_32(in, out + i * 32);
-      break;
-    case 30:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack30_32(in, out + i * 32);
-      break;
-    case 31:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack31_32(in, out + i * 32);
-      break;
-    case 32:
-      for (int i = 0; i < num_loops; ++i)
-        in = unpack32_32(in, out + i * 32);
-      break;
-    default:
-      throw std::runtime_error("Unsupported num_bits");
-  }
-
-  return batch_size;
-}
-
-};  // namespace parquet
-
-#endif  // PARQUET_UTIL_BPACKING_H

http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/2f5ef895/src/parquet/util/compiler-util.h
----------------------------------------------------------------------
diff --git a/src/parquet/util/compiler-util.h b/src/parquet/util/compiler-util.h
deleted file mode 100644
index 9d0b265..0000000
--- a/src/parquet/util/compiler-util.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#ifndef PARQUET_UTIL_COMPILER_UTIL_H
-#define PARQUET_UTIL_COMPILER_UTIL_H
-
-// Compiler hint that this branch is likely or unlikely to
-// be taken. Take from the "What all programmers should know
-// about memory" paper.
-// example: if (LIKELY(size > 0)) { ... }
-// example: if (UNLIKELY(!status.ok())) { ... }
-#ifdef LIKELY
-#undef LIKELY
-#endif
-
-#ifdef UNLIKELY
-#undef UNLIKELY
-#endif
-
-#ifdef _MSC_VER
-#define LIKELY(expr) expr
-#define UNLIKELY(expr) expr
-#else
-#define LIKELY(expr) __builtin_expect(!!(expr), 1)
-#define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
-#endif
-
-#define PREFETCH(addr) __builtin_prefetch(addr)
-
-// macros to disable padding
-// these macros are portable across different compilers and platforms
-//[https://github.com/google/flatbuffers/blob/master/include/flatbuffers/flatbuffers.h#L1355]
-#if defined(_MSC_VER)
-#define MANUALLY_ALIGNED_STRUCT(alignment) \
-  __pragma(pack(1));                       \
-  struct __declspec(align(alignment))
-#define STRUCT_END(name, size) \
-  __pragma(pack());            \
-  static_assert(sizeof(name) == size, "compiler breaks packing rules")
-#elif defined(__GNUC__) || defined(__clang__)
-#define MANUALLY_ALIGNED_STRUCT(alignment) \
-  _Pragma("pack(1)") struct __attribute__((aligned(alignment)))
-#define STRUCT_END(name, size) \
-  _Pragma("pack()") static_assert(sizeof(name) == size, "compiler breaks packing rules")
-#else
-#error Unknown compiler, please define structure alignment macros
-#endif
-
-#endif  // PARQUET_UTIL_COMPILER_UTIL_H

http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/2f5ef895/src/parquet/util/cpu-info.cc
----------------------------------------------------------------------
diff --git a/src/parquet/util/cpu-info.cc b/src/parquet/util/cpu-info.cc
deleted file mode 100644
index c6c143e..0000000
--- a/src/parquet/util/cpu-info.cc
+++ /dev/null
@@ -1,208 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// From Apache Impala as of 2016-01-29. Pared down to a minimal set of
-// functions needed for parquet-cpp
-
-#include "parquet/util/cpu-info.h"
-
-#ifdef __APPLE__
-#include <sys/sysctl.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
-
-#include <boost/algorithm/string.hpp>
-
-#include <algorithm>
-#include <cstdint>
-#include <fstream>
-#include <iostream>
-#include <mutex>
-#include <sstream>
-#include <string>
-
-#include "parquet/exception.h"
-#include "parquet/util/logging.h"
-
-using boost::algorithm::contains;
-using boost::algorithm::trim;
-using std::max;
-using std::string;
-
-namespace parquet {
-
-bool CpuInfo::initialized_ = false;
-int64_t CpuInfo::hardware_flags_ = 0;
-int64_t CpuInfo::original_hardware_flags_;
-int64_t CpuInfo::cache_sizes_[L3_CACHE + 1];
-int64_t CpuInfo::cycles_per_ms_;
-int CpuInfo::num_cores_ = 1;
-string CpuInfo::model_name_ = "unknown";  // NOLINT
-static std::mutex cpuinfo_mutex;
-
-static struct {
-  string name;
-  int64_t flag;
-} flag_mappings[] = {
-    {"ssse3", CpuInfo::SSSE3}, {"sse4_1", CpuInfo::SSE4_1}, {"sse4_2", CpuInfo::SSE4_2},
-    {"popcnt", CpuInfo::POPCNT},
-};
-static const int64_t num_flags = sizeof(flag_mappings) / sizeof(flag_mappings[0]);
-
-// Helper function to parse for hardware flags.
-// values contains a list of space-seperated flags.  check to see if the flags we
-// care about are present.
-// Returns a bitmap of flags.
-int64_t ParseCPUFlags(const string& values) {
-  int64_t flags = 0;
-  for (int i = 0; i < num_flags; ++i) {
-    if (contains(values, flag_mappings[i].name)) { flags |= flag_mappings[i].flag; }
-  }
-  return flags;
-}
-
-void CpuInfo::Init() {
-  std::lock_guard<std::mutex> cpuinfo_lock(cpuinfo_mutex);
-
-  if (initialized()) { return; }
-
-  string line;
-  string name;
-  string value;
-
-  float max_mhz = 0;
-  int num_cores = 0;
-
-  memset(&cache_sizes_, 0, sizeof(cache_sizes_));
-
-  // Read from /proc/cpuinfo
-  std::ifstream cpuinfo("/proc/cpuinfo", std::ios::in);
-  while (cpuinfo) {
-    getline(cpuinfo, line);
-    size_t colon = line.find(':');
-    if (colon != string::npos) {
-      name = line.substr(0, colon - 1);
-      value = line.substr(colon + 1, string::npos);
-      trim(name);
-      trim(value);
-      if (name.compare("flags") == 0) {
-        hardware_flags_ |= ParseCPUFlags(value);
-      } else if (name.compare("cpu MHz") == 0) {
-        // Every core will report a different speed.  We'll take the max, assuming
-        // that when impala is running, the core will not be in a lower power state.
-        // TODO: is there a more robust way to do this, such as
-        // Window's QueryPerformanceFrequency()
-        float mhz = static_cast<float>(atof(value.c_str()));
-        max_mhz = max(mhz, max_mhz);
-      } else if (name.compare("processor") == 0) {
-        ++num_cores;
-      } else if (name.compare("model name") == 0) {
-        model_name_ = value;
-      }
-    }
-  }
-  if (cpuinfo.is_open()) cpuinfo.close();
-
-#ifdef __APPLE__
-  // On Mac OS X use sysctl() to get the cache sizes
-  size_t len = 0;
-  sysctlbyname("hw.cachesize", NULL, &len, NULL, 0);
-  uint64_t* data = static_cast<uint64_t*>(malloc(len));
-  sysctlbyname("hw.cachesize", data, &len, NULL, 0);
-  DCHECK(len / sizeof(uint64_t) >= 3);
-  for (size_t i = 0; i < 3; ++i) {
-    cache_sizes_[i] = data[i];
-  }
-#else
-#ifndef _SC_LEVEL1_DCACHE_SIZE
-  // Provide reasonable default values if no info
-  cache_sizes_[0] = 32 * 1024;    // Level 1: 32k
-  cache_sizes_[1] = 256 * 1024;   // Level 2: 256k
-  cache_sizes_[2] = 3072 * 1024;  // Level 3: 3M
-#else
-  // Call sysconf to query for the cache sizes
-  cache_sizes_[0] = sysconf(_SC_LEVEL1_DCACHE_SIZE);
-  cache_sizes_[1] = sysconf(_SC_LEVEL2_CACHE_SIZE);
-  cache_sizes_[2] = sysconf(_SC_LEVEL3_CACHE_SIZE);
-#endif
-#endif
-
-  if (max_mhz != 0) {
-    cycles_per_ms_ = static_cast<int64_t>(max_mhz) * 1000;
-  } else {
-    cycles_per_ms_ = 1000000;
-  }
-  original_hardware_flags_ = hardware_flags_;
-
-  if (num_cores > 0) {
-    num_cores_ = num_cores;
-  } else {
-    num_cores_ = 1;
-  }
-
-  initialized_ = true;
-}
-
-void CpuInfo::VerifyCpuRequirements() {
-  if (!CpuInfo::IsSupported(CpuInfo::SSSE3)) {
-    throw ParquetException("CPU does not support the Supplemental SSE3 instruction set");
-  }
-}
-
-void CpuInfo::EnableFeature(int64_t flag, bool enable) {
-  DCHECK(initialized_);
-  if (!enable) {
-    hardware_flags_ &= ~flag;
-  } else {
-    // Can't turn something on that can't be supported
-    DCHECK((original_hardware_flags_ & flag) != 0);
-    hardware_flags_ |= flag;
-  }
-}
-
-int64_t CpuInfo::hardware_flags() {
-  DCHECK(initialized_);
-  return hardware_flags_;
-}
-
-int64_t CpuInfo::CacheSize(CacheLevel level) {
-  DCHECK(initialized_);
-  return cache_sizes_[level];
-}
-
-int64_t CpuInfo::cycles_per_ms() {
-  DCHECK(initialized_);
-  return cycles_per_ms_;
-}
-
-int CpuInfo::num_cores() {
-  DCHECK(initialized_);
-  return num_cores_;
-}
-
-std::string CpuInfo::model_name() {
-  DCHECK(initialized_);
-  return model_name_;
-}
-
-}  // namespace parquet

http://git-wip-us.apache.org/repos/asf/parquet-cpp/blob/2f5ef895/src/parquet/util/cpu-info.h
----------------------------------------------------------------------
diff --git a/src/parquet/util/cpu-info.h b/src/parquet/util/cpu-info.h
deleted file mode 100644
index 4d7cd27..0000000
--- a/src/parquet/util/cpu-info.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// From Apache Impala as of 2016-01-29. Pared down to a minimal set of
-// functions needed for parquet-cpp
-
-#ifndef PARQUET_UTIL_CPU_INFO_H
-#define PARQUET_UTIL_CPU_INFO_H
-
-#include <cstdint>
-#include <string>
-
-#include "parquet/util/visibility.h"
-
-namespace parquet {
-
-/// CpuInfo is an interface to query for cpu information at runtime.  The caller can
-/// ask for the sizes of the caches and what hardware features are supported.
-/// On Linux, this information is pulled from a couple of sys files (/proc/cpuinfo and
-/// /sys/devices)
-class PARQUET_EXPORT CpuInfo {
- public:
-  static const int64_t SSSE3 = (1 << 1);
-  static const int64_t SSE4_1 = (1 << 2);
-  static const int64_t SSE4_2 = (1 << 3);
-  static const int64_t POPCNT = (1 << 4);
-
-  /// Cache enums for L1 (data), L2 and L3
-  enum CacheLevel {
-    L1_CACHE = 0,
-    L2_CACHE = 1,
-    L3_CACHE = 2,
-  };
-
-  /// Initialize CpuInfo.
-  static void Init();
-
-  /// Determine if the CPU meets the minimum CPU requirements and if not, issue an error
-  /// and terminate.
-  static void VerifyCpuRequirements();
-
-  /// Returns all the flags for this cpu
-  static int64_t hardware_flags();
-
-  /// Returns whether of not the cpu supports this flag
-  inline static bool IsSupported(int64_t flag) { return (hardware_flags_ & flag) != 0; }
-
-  /// Toggle a hardware feature on and off.  It is not valid to turn on a feature
-  /// that the underlying hardware cannot support. This is useful for testing.
-  static void EnableFeature(int64_t flag, bool enable);
-
-  /// Returns the size of the cache in KB at this cache level
-  static int64_t CacheSize(CacheLevel level);
-
-  /// Returns the number of cpu cycles per millisecond
-  static int64_t cycles_per_ms();
-
-  /// Returns the number of cores (including hyper-threaded) on this machine.
-  static int num_cores();
-
-  /// Returns the model name of the cpu (e.g. Intel i7-2600)
-  static std::string model_name();
-
-  static bool initialized() { return initialized_; }
-
- private:
-  static bool initialized_;
-  static int64_t hardware_flags_;
-  static int64_t original_hardware_flags_;
-  static int64_t cache_sizes_[L3_CACHE + 1];
-  static int64_t cycles_per_ms_;
-  static int num_cores_;
-  static std::string model_name_;  // NOLINT
-};
-
-}  // namespace parquet
-
-#endif  // PARQUET_UTIL_CPU_INFO_H