Apache Arrow (C++)
A columnar in-memory analytics layer designed to accelerate big data.
bpacking.h
Go to the documentation of this file.
1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing,
12 // software distributed under the License is distributed on an
13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 // KIND, either express or implied. See the License for the
15 // specific language governing permissions and limitations
16 // under the License.
17 
18 // This file was modified from its original version for inclusion in parquet-cpp.
19 // Original source:
20 // https://github.com/lemire/FrameOfReference/blob/6ccaf9e97160f9a3b299e23a8ef739e711ef0c71/src/bpacking.cpp
21 // The original copyright notice follows.
22 
23 // This code is released under the
24 // Apache License Version 2.0 http://www.apache.org/licenses/.
25 // (c) Daniel Lemire 2013
26 
27 #ifndef ARROW_UTIL_BPACKING_H
28 #define ARROW_UTIL_BPACKING_H
29 
30 #include "arrow/util/logging.h"
31 
32 namespace arrow {
33 namespace internal {
34 
35 inline const uint32_t* unpack1_32(const uint32_t* in, uint32_t* out) {
36  *out = ((*in) >> 0) & 1;
37  out++;
38  *out = ((*in) >> 1) & 1;
39  out++;
40  *out = ((*in) >> 2) & 1;
41  out++;
42  *out = ((*in) >> 3) & 1;
43  out++;
44  *out = ((*in) >> 4) & 1;
45  out++;
46  *out = ((*in) >> 5) & 1;
47  out++;
48  *out = ((*in) >> 6) & 1;
49  out++;
50  *out = ((*in) >> 7) & 1;
51  out++;
52  *out = ((*in) >> 8) & 1;
53  out++;
54  *out = ((*in) >> 9) & 1;
55  out++;
56  *out = ((*in) >> 10) & 1;
57  out++;
58  *out = ((*in) >> 11) & 1;
59  out++;
60  *out = ((*in) >> 12) & 1;
61  out++;
62  *out = ((*in) >> 13) & 1;
63  out++;
64  *out = ((*in) >> 14) & 1;
65  out++;
66  *out = ((*in) >> 15) & 1;
67  out++;
68  *out = ((*in) >> 16) & 1;
69  out++;
70  *out = ((*in) >> 17) & 1;
71  out++;
72  *out = ((*in) >> 18) & 1;
73  out++;
74  *out = ((*in) >> 19) & 1;
75  out++;
76  *out = ((*in) >> 20) & 1;
77  out++;
78  *out = ((*in) >> 21) & 1;
79  out++;
80  *out = ((*in) >> 22) & 1;
81  out++;
82  *out = ((*in) >> 23) & 1;
83  out++;
84  *out = ((*in) >> 24) & 1;
85  out++;
86  *out = ((*in) >> 25) & 1;
87  out++;
88  *out = ((*in) >> 26) & 1;
89  out++;
90  *out = ((*in) >> 27) & 1;
91  out++;
92  *out = ((*in) >> 28) & 1;
93  out++;
94  *out = ((*in) >> 29) & 1;
95  out++;
96  *out = ((*in) >> 30) & 1;
97  out++;
98  *out = ((*in) >> 31);
99  ++in;
100  out++;
101 
102  return in;
103 }
104 
105 inline const uint32_t* unpack2_32(const uint32_t* in, uint32_t* out) {
106  *out = ((*in) >> 0) % (1U << 2);
107  out++;
108  *out = ((*in) >> 2) % (1U << 2);
109  out++;
110  *out = ((*in) >> 4) % (1U << 2);
111  out++;
112  *out = ((*in) >> 6) % (1U << 2);
113  out++;
114  *out = ((*in) >> 8) % (1U << 2);
115  out++;
116  *out = ((*in) >> 10) % (1U << 2);
117  out++;
118  *out = ((*in) >> 12) % (1U << 2);
119  out++;
120  *out = ((*in) >> 14) % (1U << 2);
121  out++;
122  *out = ((*in) >> 16) % (1U << 2);
123  out++;
124  *out = ((*in) >> 18) % (1U << 2);
125  out++;
126  *out = ((*in) >> 20) % (1U << 2);
127  out++;
128  *out = ((*in) >> 22) % (1U << 2);
129  out++;
130  *out = ((*in) >> 24) % (1U << 2);
131  out++;
132  *out = ((*in) >> 26) % (1U << 2);
133  out++;
134  *out = ((*in) >> 28) % (1U << 2);
135  out++;
136  *out = ((*in) >> 30);
137  ++in;
138  out++;
139  *out = ((*in) >> 0) % (1U << 2);
140  out++;
141  *out = ((*in) >> 2) % (1U << 2);
142  out++;
143  *out = ((*in) >> 4) % (1U << 2);
144  out++;
145  *out = ((*in) >> 6) % (1U << 2);
146  out++;
147  *out = ((*in) >> 8) % (1U << 2);
148  out++;
149  *out = ((*in) >> 10) % (1U << 2);
150  out++;
151  *out = ((*in) >> 12) % (1U << 2);
152  out++;
153  *out = ((*in) >> 14) % (1U << 2);
154  out++;
155  *out = ((*in) >> 16) % (1U << 2);
156  out++;
157  *out = ((*in) >> 18) % (1U << 2);
158  out++;
159  *out = ((*in) >> 20) % (1U << 2);
160  out++;
161  *out = ((*in) >> 22) % (1U << 2);
162  out++;
163  *out = ((*in) >> 24) % (1U << 2);
164  out++;
165  *out = ((*in) >> 26) % (1U << 2);
166  out++;
167  *out = ((*in) >> 28) % (1U << 2);
168  out++;
169  *out = ((*in) >> 30);
170  ++in;
171  out++;
172 
173  return in;
174 }
175 
176 inline const uint32_t* unpack3_32(const uint32_t* in, uint32_t* out) {
177  *out = ((*in) >> 0) % (1U << 3);
178  out++;
179  *out = ((*in) >> 3) % (1U << 3);
180  out++;
181  *out = ((*in) >> 6) % (1U << 3);
182  out++;
183  *out = ((*in) >> 9) % (1U << 3);
184  out++;
185  *out = ((*in) >> 12) % (1U << 3);
186  out++;
187  *out = ((*in) >> 15) % (1U << 3);
188  out++;
189  *out = ((*in) >> 18) % (1U << 3);
190  out++;
191  *out = ((*in) >> 21) % (1U << 3);
192  out++;
193  *out = ((*in) >> 24) % (1U << 3);
194  out++;
195  *out = ((*in) >> 27) % (1U << 3);
196  out++;
197  *out = ((*in) >> 30);
198  ++in;
199  *out |= ((*in) % (1U << 1)) << (3 - 1);
200  out++;
201  *out = ((*in) >> 1) % (1U << 3);
202  out++;
203  *out = ((*in) >> 4) % (1U << 3);
204  out++;
205  *out = ((*in) >> 7) % (1U << 3);
206  out++;
207  *out = ((*in) >> 10) % (1U << 3);
208  out++;
209  *out = ((*in) >> 13) % (1U << 3);
210  out++;
211  *out = ((*in) >> 16) % (1U << 3);
212  out++;
213  *out = ((*in) >> 19) % (1U << 3);
214  out++;
215  *out = ((*in) >> 22) % (1U << 3);
216  out++;
217  *out = ((*in) >> 25) % (1U << 3);
218  out++;
219  *out = ((*in) >> 28) % (1U << 3);
220  out++;
221  *out = ((*in) >> 31);
222  ++in;
223  *out |= ((*in) % (1U << 2)) << (3 - 2);
224  out++;
225  *out = ((*in) >> 2) % (1U << 3);
226  out++;
227  *out = ((*in) >> 5) % (1U << 3);
228  out++;
229  *out = ((*in) >> 8) % (1U << 3);
230  out++;
231  *out = ((*in) >> 11) % (1U << 3);
232  out++;
233  *out = ((*in) >> 14) % (1U << 3);
234  out++;
235  *out = ((*in) >> 17) % (1U << 3);
236  out++;
237  *out = ((*in) >> 20) % (1U << 3);
238  out++;
239  *out = ((*in) >> 23) % (1U << 3);
240  out++;
241  *out = ((*in) >> 26) % (1U << 3);
242  out++;
243  *out = ((*in) >> 29);
244  ++in;
245  out++;
246 
247  return in;
248 }
249 
250 inline const uint32_t* unpack4_32(const uint32_t* in, uint32_t* out) {
251  *out = ((*in) >> 0) % (1U << 4);
252  out++;
253  *out = ((*in) >> 4) % (1U << 4);
254  out++;
255  *out = ((*in) >> 8) % (1U << 4);
256  out++;
257  *out = ((*in) >> 12) % (1U << 4);
258  out++;
259  *out = ((*in) >> 16) % (1U << 4);
260  out++;
261  *out = ((*in) >> 20) % (1U << 4);
262  out++;
263  *out = ((*in) >> 24) % (1U << 4);
264  out++;
265  *out = ((*in) >> 28);
266  ++in;
267  out++;
268  *out = ((*in) >> 0) % (1U << 4);
269  out++;
270  *out = ((*in) >> 4) % (1U << 4);
271  out++;
272  *out = ((*in) >> 8) % (1U << 4);
273  out++;
274  *out = ((*in) >> 12) % (1U << 4);
275  out++;
276  *out = ((*in) >> 16) % (1U << 4);
277  out++;
278  *out = ((*in) >> 20) % (1U << 4);
279  out++;
280  *out = ((*in) >> 24) % (1U << 4);
281  out++;
282  *out = ((*in) >> 28);
283  ++in;
284  out++;
285  *out = ((*in) >> 0) % (1U << 4);
286  out++;
287  *out = ((*in) >> 4) % (1U << 4);
288  out++;
289  *out = ((*in) >> 8) % (1U << 4);
290  out++;
291  *out = ((*in) >> 12) % (1U << 4);
292  out++;
293  *out = ((*in) >> 16) % (1U << 4);
294  out++;
295  *out = ((*in) >> 20) % (1U << 4);
296  out++;
297  *out = ((*in) >> 24) % (1U << 4);
298  out++;
299  *out = ((*in) >> 28);
300  ++in;
301  out++;
302  *out = ((*in) >> 0) % (1U << 4);
303  out++;
304  *out = ((*in) >> 4) % (1U << 4);
305  out++;
306  *out = ((*in) >> 8) % (1U << 4);
307  out++;
308  *out = ((*in) >> 12) % (1U << 4);
309  out++;
310  *out = ((*in) >> 16) % (1U << 4);
311  out++;
312  *out = ((*in) >> 20) % (1U << 4);
313  out++;
314  *out = ((*in) >> 24) % (1U << 4);
315  out++;
316  *out = ((*in) >> 28);
317  ++in;
318  out++;
319 
320  return in;
321 }
322 
323 inline const uint32_t* unpack5_32(const uint32_t* in, uint32_t* out) {
324  *out = ((*in) >> 0) % (1U << 5);
325  out++;
326  *out = ((*in) >> 5) % (1U << 5);
327  out++;
328  *out = ((*in) >> 10) % (1U << 5);
329  out++;
330  *out = ((*in) >> 15) % (1U << 5);
331  out++;
332  *out = ((*in) >> 20) % (1U << 5);
333  out++;
334  *out = ((*in) >> 25) % (1U << 5);
335  out++;
336  *out = ((*in) >> 30);
337  ++in;
338  *out |= ((*in) % (1U << 3)) << (5 - 3);
339  out++;
340  *out = ((*in) >> 3) % (1U << 5);
341  out++;
342  *out = ((*in) >> 8) % (1U << 5);
343  out++;
344  *out = ((*in) >> 13) % (1U << 5);
345  out++;
346  *out = ((*in) >> 18) % (1U << 5);
347  out++;
348  *out = ((*in) >> 23) % (1U << 5);
349  out++;
350  *out = ((*in) >> 28);
351  ++in;
352  *out |= ((*in) % (1U << 1)) << (5 - 1);
353  out++;
354  *out = ((*in) >> 1) % (1U << 5);
355  out++;
356  *out = ((*in) >> 6) % (1U << 5);
357  out++;
358  *out = ((*in) >> 11) % (1U << 5);
359  out++;
360  *out = ((*in) >> 16) % (1U << 5);
361  out++;
362  *out = ((*in) >> 21) % (1U << 5);
363  out++;
364  *out = ((*in) >> 26) % (1U << 5);
365  out++;
366  *out = ((*in) >> 31);
367  ++in;
368  *out |= ((*in) % (1U << 4)) << (5 - 4);
369  out++;
370  *out = ((*in) >> 4) % (1U << 5);
371  out++;
372  *out = ((*in) >> 9) % (1U << 5);
373  out++;
374  *out = ((*in) >> 14) % (1U << 5);
375  out++;
376  *out = ((*in) >> 19) % (1U << 5);
377  out++;
378  *out = ((*in) >> 24) % (1U << 5);
379  out++;
380  *out = ((*in) >> 29);
381  ++in;
382  *out |= ((*in) % (1U << 2)) << (5 - 2);
383  out++;
384  *out = ((*in) >> 2) % (1U << 5);
385  out++;
386  *out = ((*in) >> 7) % (1U << 5);
387  out++;
388  *out = ((*in) >> 12) % (1U << 5);
389  out++;
390  *out = ((*in) >> 17) % (1U << 5);
391  out++;
392  *out = ((*in) >> 22) % (1U << 5);
393  out++;
394  *out = ((*in) >> 27);
395  ++in;
396  out++;
397 
398  return in;
399 }
400 
401 inline const uint32_t* unpack6_32(const uint32_t* in, uint32_t* out) {
402  *out = ((*in) >> 0) % (1U << 6);
403  out++;
404  *out = ((*in) >> 6) % (1U << 6);
405  out++;
406  *out = ((*in) >> 12) % (1U << 6);
407  out++;
408  *out = ((*in) >> 18) % (1U << 6);
409  out++;
410  *out = ((*in) >> 24) % (1U << 6);
411  out++;
412  *out = ((*in) >> 30);
413  ++in;
414  *out |= ((*in) % (1U << 4)) << (6 - 4);
415  out++;
416  *out = ((*in) >> 4) % (1U << 6);
417  out++;
418  *out = ((*in) >> 10) % (1U << 6);
419  out++;
420  *out = ((*in) >> 16) % (1U << 6);
421  out++;
422  *out = ((*in) >> 22) % (1U << 6);
423  out++;
424  *out = ((*in) >> 28);
425  ++in;
426  *out |= ((*in) % (1U << 2)) << (6 - 2);
427  out++;
428  *out = ((*in) >> 2) % (1U << 6);
429  out++;
430  *out = ((*in) >> 8) % (1U << 6);
431  out++;
432  *out = ((*in) >> 14) % (1U << 6);
433  out++;
434  *out = ((*in) >> 20) % (1U << 6);
435  out++;
436  *out = ((*in) >> 26);
437  ++in;
438  out++;
439  *out = ((*in) >> 0) % (1U << 6);
440  out++;
441  *out = ((*in) >> 6) % (1U << 6);
442  out++;
443  *out = ((*in) >> 12) % (1U << 6);
444  out++;
445  *out = ((*in) >> 18) % (1U << 6);
446  out++;
447  *out = ((*in) >> 24) % (1U << 6);
448  out++;
449  *out = ((*in) >> 30);
450  ++in;
451  *out |= ((*in) % (1U << 4)) << (6 - 4);
452  out++;
453  *out = ((*in) >> 4) % (1U << 6);
454  out++;
455  *out = ((*in) >> 10) % (1U << 6);
456  out++;
457  *out = ((*in) >> 16) % (1U << 6);
458  out++;
459  *out = ((*in) >> 22) % (1U << 6);
460  out++;
461  *out = ((*in) >> 28);
462  ++in;
463  *out |= ((*in) % (1U << 2)) << (6 - 2);
464  out++;
465  *out = ((*in) >> 2) % (1U << 6);
466  out++;
467  *out = ((*in) >> 8) % (1U << 6);
468  out++;
469  *out = ((*in) >> 14) % (1U << 6);
470  out++;
471  *out = ((*in) >> 20) % (1U << 6);
472  out++;
473  *out = ((*in) >> 26);
474  ++in;
475  out++;
476 
477  return in;
478 }
479 
480 inline const uint32_t* unpack7_32(const uint32_t* in, uint32_t* out) {
481  *out = ((*in) >> 0) % (1U << 7);
482  out++;
483  *out = ((*in) >> 7) % (1U << 7);
484  out++;
485  *out = ((*in) >> 14) % (1U << 7);
486  out++;
487  *out = ((*in) >> 21) % (1U << 7);
488  out++;
489  *out = ((*in) >> 28);
490  ++in;
491  *out |= ((*in) % (1U << 3)) << (7 - 3);
492  out++;
493  *out = ((*in) >> 3) % (1U << 7);
494  out++;
495  *out = ((*in) >> 10) % (1U << 7);
496  out++;
497  *out = ((*in) >> 17) % (1U << 7);
498  out++;
499  *out = ((*in) >> 24) % (1U << 7);
500  out++;
501  *out = ((*in) >> 31);
502  ++in;
503  *out |= ((*in) % (1U << 6)) << (7 - 6);
504  out++;
505  *out = ((*in) >> 6) % (1U << 7);
506  out++;
507  *out = ((*in) >> 13) % (1U << 7);
508  out++;
509  *out = ((*in) >> 20) % (1U << 7);
510  out++;
511  *out = ((*in) >> 27);
512  ++in;
513  *out |= ((*in) % (1U << 2)) << (7 - 2);
514  out++;
515  *out = ((*in) >> 2) % (1U << 7);
516  out++;
517  *out = ((*in) >> 9) % (1U << 7);
518  out++;
519  *out = ((*in) >> 16) % (1U << 7);
520  out++;
521  *out = ((*in) >> 23) % (1U << 7);
522  out++;
523  *out = ((*in) >> 30);
524  ++in;
525  *out |= ((*in) % (1U << 5)) << (7 - 5);
526  out++;
527  *out = ((*in) >> 5) % (1U << 7);
528  out++;
529  *out = ((*in) >> 12) % (1U << 7);
530  out++;
531  *out = ((*in) >> 19) % (1U << 7);
532  out++;
533  *out = ((*in) >> 26);
534  ++in;
535  *out |= ((*in) % (1U << 1)) << (7 - 1);
536  out++;
537  *out = ((*in) >> 1) % (1U << 7);
538  out++;
539  *out = ((*in) >> 8) % (1U << 7);
540  out++;
541  *out = ((*in) >> 15) % (1U << 7);
542  out++;
543  *out = ((*in) >> 22) % (1U << 7);
544  out++;
545  *out = ((*in) >> 29);
546  ++in;
547  *out |= ((*in) % (1U << 4)) << (7 - 4);
548  out++;
549  *out = ((*in) >> 4) % (1U << 7);
550  out++;
551  *out = ((*in) >> 11) % (1U << 7);
552  out++;
553  *out = ((*in) >> 18) % (1U << 7);
554  out++;
555  *out = ((*in) >> 25);
556  ++in;
557  out++;
558 
559  return in;
560 }
561 
562 inline const uint32_t* unpack8_32(const uint32_t* in, uint32_t* out) {
563  *out = ((*in) >> 0) % (1U << 8);
564  out++;
565  *out = ((*in) >> 8) % (1U << 8);
566  out++;
567  *out = ((*in) >> 16) % (1U << 8);
568  out++;
569  *out = ((*in) >> 24);
570  ++in;
571  out++;
572  *out = ((*in) >> 0) % (1U << 8);
573  out++;
574  *out = ((*in) >> 8) % (1U << 8);
575  out++;
576  *out = ((*in) >> 16) % (1U << 8);
577  out++;
578  *out = ((*in) >> 24);
579  ++in;
580  out++;
581  *out = ((*in) >> 0) % (1U << 8);
582  out++;
583  *out = ((*in) >> 8) % (1U << 8);
584  out++;
585  *out = ((*in) >> 16) % (1U << 8);
586  out++;
587  *out = ((*in) >> 24);
588  ++in;
589  out++;
590  *out = ((*in) >> 0) % (1U << 8);
591  out++;
592  *out = ((*in) >> 8) % (1U << 8);
593  out++;
594  *out = ((*in) >> 16) % (1U << 8);
595  out++;
596  *out = ((*in) >> 24);
597  ++in;
598  out++;
599  *out = ((*in) >> 0) % (1U << 8);
600  out++;
601  *out = ((*in) >> 8) % (1U << 8);
602  out++;
603  *out = ((*in) >> 16) % (1U << 8);
604  out++;
605  *out = ((*in) >> 24);
606  ++in;
607  out++;
608  *out = ((*in) >> 0) % (1U << 8);
609  out++;
610  *out = ((*in) >> 8) % (1U << 8);
611  out++;
612  *out = ((*in) >> 16) % (1U << 8);
613  out++;
614  *out = ((*in) >> 24);
615  ++in;
616  out++;
617  *out = ((*in) >> 0) % (1U << 8);
618  out++;
619  *out = ((*in) >> 8) % (1U << 8);
620  out++;
621  *out = ((*in) >> 16) % (1U << 8);
622  out++;
623  *out = ((*in) >> 24);
624  ++in;
625  out++;
626  *out = ((*in) >> 0) % (1U << 8);
627  out++;
628  *out = ((*in) >> 8) % (1U << 8);
629  out++;
630  *out = ((*in) >> 16) % (1U << 8);
631  out++;
632  *out = ((*in) >> 24);
633  ++in;
634  out++;
635 
636  return in;
637 }
638 
639 inline const uint32_t* unpack9_32(const uint32_t* in, uint32_t* out) {
640  *out = ((*in) >> 0) % (1U << 9);
641  out++;
642  *out = ((*in) >> 9) % (1U << 9);
643  out++;
644  *out = ((*in) >> 18) % (1U << 9);
645  out++;
646  *out = ((*in) >> 27);
647  ++in;
648  *out |= ((*in) % (1U << 4)) << (9 - 4);
649  out++;
650  *out = ((*in) >> 4) % (1U << 9);
651  out++;
652  *out = ((*in) >> 13) % (1U << 9);
653  out++;
654  *out = ((*in) >> 22) % (1U << 9);
655  out++;
656  *out = ((*in) >> 31);
657  ++in;
658  *out |= ((*in) % (1U << 8)) << (9 - 8);
659  out++;
660  *out = ((*in) >> 8) % (1U << 9);
661  out++;
662  *out = ((*in) >> 17) % (1U << 9);
663  out++;
664  *out = ((*in) >> 26);
665  ++in;
666  *out |= ((*in) % (1U << 3)) << (9 - 3);
667  out++;
668  *out = ((*in) >> 3) % (1U << 9);
669  out++;
670  *out = ((*in) >> 12) % (1U << 9);
671  out++;
672  *out = ((*in) >> 21) % (1U << 9);
673  out++;
674  *out = ((*in) >> 30);
675  ++in;
676  *out |= ((*in) % (1U << 7)) << (9 - 7);
677  out++;
678  *out = ((*in) >> 7) % (1U << 9);
679  out++;
680  *out = ((*in) >> 16) % (1U << 9);
681  out++;
682  *out = ((*in) >> 25);
683  ++in;
684  *out |= ((*in) % (1U << 2)) << (9 - 2);
685  out++;
686  *out = ((*in) >> 2) % (1U << 9);
687  out++;
688  *out = ((*in) >> 11) % (1U << 9);
689  out++;
690  *out = ((*in) >> 20) % (1U << 9);
691  out++;
692  *out = ((*in) >> 29);
693  ++in;
694  *out |= ((*in) % (1U << 6)) << (9 - 6);
695  out++;
696  *out = ((*in) >> 6) % (1U << 9);
697  out++;
698  *out = ((*in) >> 15) % (1U << 9);
699  out++;
700  *out = ((*in) >> 24);
701  ++in;
702  *out |= ((*in) % (1U << 1)) << (9 - 1);
703  out++;
704  *out = ((*in) >> 1) % (1U << 9);
705  out++;
706  *out = ((*in) >> 10) % (1U << 9);
707  out++;
708  *out = ((*in) >> 19) % (1U << 9);
709  out++;
710  *out = ((*in) >> 28);
711  ++in;
712  *out |= ((*in) % (1U << 5)) << (9 - 5);
713  out++;
714  *out = ((*in) >> 5) % (1U << 9);
715  out++;
716  *out = ((*in) >> 14) % (1U << 9);
717  out++;
718  *out = ((*in) >> 23);
719  ++in;
720  out++;
721 
722  return in;
723 }
724 
725 inline const uint32_t* unpack10_32(const uint32_t* in, uint32_t* out) {
726  *out = ((*in) >> 0) % (1U << 10);
727  out++;
728  *out = ((*in) >> 10) % (1U << 10);
729  out++;
730  *out = ((*in) >> 20) % (1U << 10);
731  out++;
732  *out = ((*in) >> 30);
733  ++in;
734  *out |= ((*in) % (1U << 8)) << (10 - 8);
735  out++;
736  *out = ((*in) >> 8) % (1U << 10);
737  out++;
738  *out = ((*in) >> 18) % (1U << 10);
739  out++;
740  *out = ((*in) >> 28);
741  ++in;
742  *out |= ((*in) % (1U << 6)) << (10 - 6);
743  out++;
744  *out = ((*in) >> 6) % (1U << 10);
745  out++;
746  *out = ((*in) >> 16) % (1U << 10);
747  out++;
748  *out = ((*in) >> 26);
749  ++in;
750  *out |= ((*in) % (1U << 4)) << (10 - 4);
751  out++;
752  *out = ((*in) >> 4) % (1U << 10);
753  out++;
754  *out = ((*in) >> 14) % (1U << 10);
755  out++;
756  *out = ((*in) >> 24);
757  ++in;
758  *out |= ((*in) % (1U << 2)) << (10 - 2);
759  out++;
760  *out = ((*in) >> 2) % (1U << 10);
761  out++;
762  *out = ((*in) >> 12) % (1U << 10);
763  out++;
764  *out = ((*in) >> 22);
765  ++in;
766  out++;
767  *out = ((*in) >> 0) % (1U << 10);
768  out++;
769  *out = ((*in) >> 10) % (1U << 10);
770  out++;
771  *out = ((*in) >> 20) % (1U << 10);
772  out++;
773  *out = ((*in) >> 30);
774  ++in;
775  *out |= ((*in) % (1U << 8)) << (10 - 8);
776  out++;
777  *out = ((*in) >> 8) % (1U << 10);
778  out++;
779  *out = ((*in) >> 18) % (1U << 10);
780  out++;
781  *out = ((*in) >> 28);
782  ++in;
783  *out |= ((*in) % (1U << 6)) << (10 - 6);
784  out++;
785  *out = ((*in) >> 6) % (1U << 10);
786  out++;
787  *out = ((*in) >> 16) % (1U << 10);
788  out++;
789  *out = ((*in) >> 26);
790  ++in;
791  *out |= ((*in) % (1U << 4)) << (10 - 4);
792  out++;
793  *out = ((*in) >> 4) % (1U << 10);
794  out++;
795  *out = ((*in) >> 14) % (1U << 10);
796  out++;
797  *out = ((*in) >> 24);
798  ++in;
799  *out |= ((*in) % (1U << 2)) << (10 - 2);
800  out++;
801  *out = ((*in) >> 2) % (1U << 10);
802  out++;
803  *out = ((*in) >> 12) % (1U << 10);
804  out++;
805  *out = ((*in) >> 22);
806  ++in;
807  out++;
808 
809  return in;
810 }
811 
812 inline const uint32_t* unpack11_32(const uint32_t* in, uint32_t* out) {
813  *out = ((*in) >> 0) % (1U << 11);
814  out++;
815  *out = ((*in) >> 11) % (1U << 11);
816  out++;
817  *out = ((*in) >> 22);
818  ++in;
819  *out |= ((*in) % (1U << 1)) << (11 - 1);
820  out++;
821  *out = ((*in) >> 1) % (1U << 11);
822  out++;
823  *out = ((*in) >> 12) % (1U << 11);
824  out++;
825  *out = ((*in) >> 23);
826  ++in;
827  *out |= ((*in) % (1U << 2)) << (11 - 2);
828  out++;
829  *out = ((*in) >> 2) % (1U << 11);
830  out++;
831  *out = ((*in) >> 13) % (1U << 11);
832  out++;
833  *out = ((*in) >> 24);
834  ++in;
835  *out |= ((*in) % (1U << 3)) << (11 - 3);
836  out++;
837  *out = ((*in) >> 3) % (1U << 11);
838  out++;
839  *out = ((*in) >> 14) % (1U << 11);
840  out++;
841  *out = ((*in) >> 25);
842  ++in;
843  *out |= ((*in) % (1U << 4)) << (11 - 4);
844  out++;
845  *out = ((*in) >> 4) % (1U << 11);
846  out++;
847  *out = ((*in) >> 15) % (1U << 11);
848  out++;
849  *out = ((*in) >> 26);
850  ++in;
851  *out |= ((*in) % (1U << 5)) << (11 - 5);
852  out++;
853  *out = ((*in) >> 5) % (1U << 11);
854  out++;
855  *out = ((*in) >> 16) % (1U << 11);
856  out++;
857  *out = ((*in) >> 27);
858  ++in;
859  *out |= ((*in) % (1U << 6)) << (11 - 6);
860  out++;
861  *out = ((*in) >> 6) % (1U << 11);
862  out++;
863  *out = ((*in) >> 17) % (1U << 11);
864  out++;
865  *out = ((*in) >> 28);
866  ++in;
867  *out |= ((*in) % (1U << 7)) << (11 - 7);
868  out++;
869  *out = ((*in) >> 7) % (1U << 11);
870  out++;
871  *out = ((*in) >> 18) % (1U << 11);
872  out++;
873  *out = ((*in) >> 29);
874  ++in;
875  *out |= ((*in) % (1U << 8)) << (11 - 8);
876  out++;
877  *out = ((*in) >> 8) % (1U << 11);
878  out++;
879  *out = ((*in) >> 19) % (1U << 11);
880  out++;
881  *out = ((*in) >> 30);
882  ++in;
883  *out |= ((*in) % (1U << 9)) << (11 - 9);
884  out++;
885  *out = ((*in) >> 9) % (1U << 11);
886  out++;
887  *out = ((*in) >> 20) % (1U << 11);
888  out++;
889  *out = ((*in) >> 31);
890  ++in;
891  *out |= ((*in) % (1U << 10)) << (11 - 10);
892  out++;
893  *out = ((*in) >> 10) % (1U << 11);
894  out++;
895  *out = ((*in) >> 21);
896  ++in;
897  out++;
898 
899  return in;
900 }
901 
902 inline const uint32_t* unpack12_32(const uint32_t* in, uint32_t* out) {
903  *out = ((*in) >> 0) % (1U << 12);
904  out++;
905  *out = ((*in) >> 12) % (1U << 12);
906  out++;
907  *out = ((*in) >> 24);
908  ++in;
909  *out |= ((*in) % (1U << 4)) << (12 - 4);
910  out++;
911  *out = ((*in) >> 4) % (1U << 12);
912  out++;
913  *out = ((*in) >> 16) % (1U << 12);
914  out++;
915  *out = ((*in) >> 28);
916  ++in;
917  *out |= ((*in) % (1U << 8)) << (12 - 8);
918  out++;
919  *out = ((*in) >> 8) % (1U << 12);
920  out++;
921  *out = ((*in) >> 20);
922  ++in;
923  out++;
924  *out = ((*in) >> 0) % (1U << 12);
925  out++;
926  *out = ((*in) >> 12) % (1U << 12);
927  out++;
928  *out = ((*in) >> 24);
929  ++in;
930  *out |= ((*in) % (1U << 4)) << (12 - 4);
931  out++;
932  *out = ((*in) >> 4) % (1U << 12);
933  out++;
934  *out = ((*in) >> 16) % (1U << 12);
935  out++;
936  *out = ((*in) >> 28);
937  ++in;
938  *out |= ((*in) % (1U << 8)) << (12 - 8);
939  out++;
940  *out = ((*in) >> 8) % (1U << 12);
941  out++;
942  *out = ((*in) >> 20);
943  ++in;
944  out++;
945  *out = ((*in) >> 0) % (1U << 12);
946  out++;
947  *out = ((*in) >> 12) % (1U << 12);
948  out++;
949  *out = ((*in) >> 24);
950  ++in;
951  *out |= ((*in) % (1U << 4)) << (12 - 4);
952  out++;
953  *out = ((*in) >> 4) % (1U << 12);
954  out++;
955  *out = ((*in) >> 16) % (1U << 12);
956  out++;
957  *out = ((*in) >> 28);
958  ++in;
959  *out |= ((*in) % (1U << 8)) << (12 - 8);
960  out++;
961  *out = ((*in) >> 8) % (1U << 12);
962  out++;
963  *out = ((*in) >> 20);
964  ++in;
965  out++;
966  *out = ((*in) >> 0) % (1U << 12);
967  out++;
968  *out = ((*in) >> 12) % (1U << 12);
969  out++;
970  *out = ((*in) >> 24);
971  ++in;
972  *out |= ((*in) % (1U << 4)) << (12 - 4);
973  out++;
974  *out = ((*in) >> 4) % (1U << 12);
975  out++;
976  *out = ((*in) >> 16) % (1U << 12);
977  out++;
978  *out = ((*in) >> 28);
979  ++in;
980  *out |= ((*in) % (1U << 8)) << (12 - 8);
981  out++;
982  *out = ((*in) >> 8) % (1U << 12);
983  out++;
984  *out = ((*in) >> 20);
985  ++in;
986  out++;
987 
988  return in;
989 }
990 
991 inline const uint32_t* unpack13_32(const uint32_t* in, uint32_t* out) {
992  *out = ((*in) >> 0) % (1U << 13);
993  out++;
994  *out = ((*in) >> 13) % (1U << 13);
995  out++;
996  *out = ((*in) >> 26);
997  ++in;
998  *out |= ((*in) % (1U << 7)) << (13 - 7);
999  out++;
1000  *out = ((*in) >> 7) % (1U << 13);
1001  out++;
1002  *out = ((*in) >> 20);
1003  ++in;
1004  *out |= ((*in) % (1U << 1)) << (13 - 1);
1005  out++;
1006  *out = ((*in) >> 1) % (1U << 13);
1007  out++;
1008  *out = ((*in) >> 14) % (1U << 13);
1009  out++;
1010  *out = ((*in) >> 27);
1011  ++in;
1012  *out |= ((*in) % (1U << 8)) << (13 - 8);
1013  out++;
1014  *out = ((*in) >> 8) % (1U << 13);
1015  out++;
1016  *out = ((*in) >> 21);
1017  ++in;
1018  *out |= ((*in) % (1U << 2)) << (13 - 2);
1019  out++;
1020  *out = ((*in) >> 2) % (1U << 13);
1021  out++;
1022  *out = ((*in) >> 15) % (1U << 13);
1023  out++;
1024  *out = ((*in) >> 28);
1025  ++in;
1026  *out |= ((*in) % (1U << 9)) << (13 - 9);
1027  out++;
1028  *out = ((*in) >> 9) % (1U << 13);
1029  out++;
1030  *out = ((*in) >> 22);
1031  ++in;
1032  *out |= ((*in) % (1U << 3)) << (13 - 3);
1033  out++;
1034  *out = ((*in) >> 3) % (1U << 13);
1035  out++;
1036  *out = ((*in) >> 16) % (1U << 13);
1037  out++;
1038  *out = ((*in) >> 29);
1039  ++in;
1040  *out |= ((*in) % (1U << 10)) << (13 - 10);
1041  out++;
1042  *out = ((*in) >> 10) % (1U << 13);
1043  out++;
1044  *out = ((*in) >> 23);
1045  ++in;
1046  *out |= ((*in) % (1U << 4)) << (13 - 4);
1047  out++;
1048  *out = ((*in) >> 4) % (1U << 13);
1049  out++;
1050  *out = ((*in) >> 17) % (1U << 13);
1051  out++;
1052  *out = ((*in) >> 30);
1053  ++in;
1054  *out |= ((*in) % (1U << 11)) << (13 - 11);
1055  out++;
1056  *out = ((*in) >> 11) % (1U << 13);
1057  out++;
1058  *out = ((*in) >> 24);
1059  ++in;
1060  *out |= ((*in) % (1U << 5)) << (13 - 5);
1061  out++;
1062  *out = ((*in) >> 5) % (1U << 13);
1063  out++;
1064  *out = ((*in) >> 18) % (1U << 13);
1065  out++;
1066  *out = ((*in) >> 31);
1067  ++in;
1068  *out |= ((*in) % (1U << 12)) << (13 - 12);
1069  out++;
1070  *out = ((*in) >> 12) % (1U << 13);
1071  out++;
1072  *out = ((*in) >> 25);
1073  ++in;
1074  *out |= ((*in) % (1U << 6)) << (13 - 6);
1075  out++;
1076  *out = ((*in) >> 6) % (1U << 13);
1077  out++;
1078  *out = ((*in) >> 19);
1079  ++in;
1080  out++;
1081 
1082  return in;
1083 }
1084 
1085 inline const uint32_t* unpack14_32(const uint32_t* in, uint32_t* out) {
1086  *out = ((*in) >> 0) % (1U << 14);
1087  out++;
1088  *out = ((*in) >> 14) % (1U << 14);
1089  out++;
1090  *out = ((*in) >> 28);
1091  ++in;
1092  *out |= ((*in) % (1U << 10)) << (14 - 10);
1093  out++;
1094  *out = ((*in) >> 10) % (1U << 14);
1095  out++;
1096  *out = ((*in) >> 24);
1097  ++in;
1098  *out |= ((*in) % (1U << 6)) << (14 - 6);
1099  out++;
1100  *out = ((*in) >> 6) % (1U << 14);
1101  out++;
1102  *out = ((*in) >> 20);
1103  ++in;
1104  *out |= ((*in) % (1U << 2)) << (14 - 2);
1105  out++;
1106  *out = ((*in) >> 2) % (1U << 14);
1107  out++;
1108  *out = ((*in) >> 16) % (1U << 14);
1109  out++;
1110  *out = ((*in) >> 30);
1111  ++in;
1112  *out |= ((*in) % (1U << 12)) << (14 - 12);
1113  out++;
1114  *out = ((*in) >> 12) % (1U << 14);
1115  out++;
1116  *out = ((*in) >> 26);
1117  ++in;
1118  *out |= ((*in) % (1U << 8)) << (14 - 8);
1119  out++;
1120  *out = ((*in) >> 8) % (1U << 14);
1121  out++;
1122  *out = ((*in) >> 22);
1123  ++in;
1124  *out |= ((*in) % (1U << 4)) << (14 - 4);
1125  out++;
1126  *out = ((*in) >> 4) % (1U << 14);
1127  out++;
1128  *out = ((*in) >> 18);
1129  ++in;
1130  out++;
1131  *out = ((*in) >> 0) % (1U << 14);
1132  out++;
1133  *out = ((*in) >> 14) % (1U << 14);
1134  out++;
1135  *out = ((*in) >> 28);
1136  ++in;
1137  *out |= ((*in) % (1U << 10)) << (14 - 10);
1138  out++;
1139  *out = ((*in) >> 10) % (1U << 14);
1140  out++;
1141  *out = ((*in) >> 24);
1142  ++in;
1143  *out |= ((*in) % (1U << 6)) << (14 - 6);
1144  out++;
1145  *out = ((*in) >> 6) % (1U << 14);
1146  out++;
1147  *out = ((*in) >> 20);
1148  ++in;
1149  *out |= ((*in) % (1U << 2)) << (14 - 2);
1150  out++;
1151  *out = ((*in) >> 2) % (1U << 14);
1152  out++;
1153  *out = ((*in) >> 16) % (1U << 14);
1154  out++;
1155  *out = ((*in) >> 30);
1156  ++in;
1157  *out |= ((*in) % (1U << 12)) << (14 - 12);
1158  out++;
1159  *out = ((*in) >> 12) % (1U << 14);
1160  out++;
1161  *out = ((*in) >> 26);
1162  ++in;
1163  *out |= ((*in) % (1U << 8)) << (14 - 8);
1164  out++;
1165  *out = ((*in) >> 8) % (1U << 14);
1166  out++;
1167  *out = ((*in) >> 22);
1168  ++in;
1169  *out |= ((*in) % (1U << 4)) << (14 - 4);
1170  out++;
1171  *out = ((*in) >> 4) % (1U << 14);
1172  out++;
1173  *out = ((*in) >> 18);
1174  ++in;
1175  out++;
1176 
1177  return in;
1178 }
1179 
1180 inline const uint32_t* unpack15_32(const uint32_t* in, uint32_t* out) {
1181  *out = ((*in) >> 0) % (1U << 15);
1182  out++;
1183  *out = ((*in) >> 15) % (1U << 15);
1184  out++;
1185  *out = ((*in) >> 30);
1186  ++in;
1187  *out |= ((*in) % (1U << 13)) << (15 - 13);
1188  out++;
1189  *out = ((*in) >> 13) % (1U << 15);
1190  out++;
1191  *out = ((*in) >> 28);
1192  ++in;
1193  *out |= ((*in) % (1U << 11)) << (15 - 11);
1194  out++;
1195  *out = ((*in) >> 11) % (1U << 15);
1196  out++;
1197  *out = ((*in) >> 26);
1198  ++in;
1199  *out |= ((*in) % (1U << 9)) << (15 - 9);
1200  out++;
1201  *out = ((*in) >> 9) % (1U << 15);
1202  out++;
1203  *out = ((*in) >> 24);
1204  ++in;
1205  *out |= ((*in) % (1U << 7)) << (15 - 7);
1206  out++;
1207  *out = ((*in) >> 7) % (1U << 15);
1208  out++;
1209  *out = ((*in) >> 22);
1210  ++in;
1211  *out |= ((*in) % (1U << 5)) << (15 - 5);
1212  out++;
1213  *out = ((*in) >> 5) % (1U << 15);
1214  out++;
1215  *out = ((*in) >> 20);
1216  ++in;
1217  *out |= ((*in) % (1U << 3)) << (15 - 3);
1218  out++;
1219  *out = ((*in) >> 3) % (1U << 15);
1220  out++;
1221  *out = ((*in) >> 18);
1222  ++in;
1223  *out |= ((*in) % (1U << 1)) << (15 - 1);
1224  out++;
1225  *out = ((*in) >> 1) % (1U << 15);
1226  out++;
1227  *out = ((*in) >> 16) % (1U << 15);
1228  out++;
1229  *out = ((*in) >> 31);
1230  ++in;
1231  *out |= ((*in) % (1U << 14)) << (15 - 14);
1232  out++;
1233  *out = ((*in) >> 14) % (1U << 15);
1234  out++;
1235  *out = ((*in) >> 29);
1236  ++in;
1237  *out |= ((*in) % (1U << 12)) << (15 - 12);
1238  out++;
1239  *out = ((*in) >> 12) % (1U << 15);
1240  out++;
1241  *out = ((*in) >> 27);
1242  ++in;
1243  *out |= ((*in) % (1U << 10)) << (15 - 10);
1244  out++;
1245  *out = ((*in) >> 10) % (1U << 15);
1246  out++;
1247  *out = ((*in) >> 25);
1248  ++in;
1249  *out |= ((*in) % (1U << 8)) << (15 - 8);
1250  out++;
1251  *out = ((*in) >> 8) % (1U << 15);
1252  out++;
1253  *out = ((*in) >> 23);
1254  ++in;
1255  *out |= ((*in) % (1U << 6)) << (15 - 6);
1256  out++;
1257  *out = ((*in) >> 6) % (1U << 15);
1258  out++;
1259  *out = ((*in) >> 21);
1260  ++in;
1261  *out |= ((*in) % (1U << 4)) << (15 - 4);
1262  out++;
1263  *out = ((*in) >> 4) % (1U << 15);
1264  out++;
1265  *out = ((*in) >> 19);
1266  ++in;
1267  *out |= ((*in) % (1U << 2)) << (15 - 2);
1268  out++;
1269  *out = ((*in) >> 2) % (1U << 15);
1270  out++;
1271  *out = ((*in) >> 17);
1272  ++in;
1273  out++;
1274 
1275  return in;
1276 }
1277 
1278 inline const uint32_t* unpack16_32(const uint32_t* in, uint32_t* out) {
1279  *out = ((*in) >> 0) % (1U << 16);
1280  out++;
1281  *out = ((*in) >> 16);
1282  ++in;
1283  out++;
1284  *out = ((*in) >> 0) % (1U << 16);
1285  out++;
1286  *out = ((*in) >> 16);
1287  ++in;
1288  out++;
1289  *out = ((*in) >> 0) % (1U << 16);
1290  out++;
1291  *out = ((*in) >> 16);
1292  ++in;
1293  out++;
1294  *out = ((*in) >> 0) % (1U << 16);
1295  out++;
1296  *out = ((*in) >> 16);
1297  ++in;
1298  out++;
1299  *out = ((*in) >> 0) % (1U << 16);
1300  out++;
1301  *out = ((*in) >> 16);
1302  ++in;
1303  out++;
1304  *out = ((*in) >> 0) % (1U << 16);
1305  out++;
1306  *out = ((*in) >> 16);
1307  ++in;
1308  out++;
1309  *out = ((*in) >> 0) % (1U << 16);
1310  out++;
1311  *out = ((*in) >> 16);
1312  ++in;
1313  out++;
1314  *out = ((*in) >> 0) % (1U << 16);
1315  out++;
1316  *out = ((*in) >> 16);
1317  ++in;
1318  out++;
1319  *out = ((*in) >> 0) % (1U << 16);
1320  out++;
1321  *out = ((*in) >> 16);
1322  ++in;
1323  out++;
1324  *out = ((*in) >> 0) % (1U << 16);
1325  out++;
1326  *out = ((*in) >> 16);
1327  ++in;
1328  out++;
1329  *out = ((*in) >> 0) % (1U << 16);
1330  out++;
1331  *out = ((*in) >> 16);
1332  ++in;
1333  out++;
1334  *out = ((*in) >> 0) % (1U << 16);
1335  out++;
1336  *out = ((*in) >> 16);
1337  ++in;
1338  out++;
1339  *out = ((*in) >> 0) % (1U << 16);
1340  out++;
1341  *out = ((*in) >> 16);
1342  ++in;
1343  out++;
1344  *out = ((*in) >> 0) % (1U << 16);
1345  out++;
1346  *out = ((*in) >> 16);
1347  ++in;
1348  out++;
1349  *out = ((*in) >> 0) % (1U << 16);
1350  out++;
1351  *out = ((*in) >> 16);
1352  ++in;
1353  out++;
1354  *out = ((*in) >> 0) % (1U << 16);
1355  out++;
1356  *out = ((*in) >> 16);
1357  ++in;
1358  out++;
1359 
1360  return in;
1361 }
1362 
1363 inline const uint32_t* unpack17_32(const uint32_t* in, uint32_t* out) {
1364  *out = ((*in) >> 0) % (1U << 17);
1365  out++;
1366  *out = ((*in) >> 17);
1367  ++in;
1368  *out |= ((*in) % (1U << 2)) << (17 - 2);
1369  out++;
1370  *out = ((*in) >> 2) % (1U << 17);
1371  out++;
1372  *out = ((*in) >> 19);
1373  ++in;
1374  *out |= ((*in) % (1U << 4)) << (17 - 4);
1375  out++;
1376  *out = ((*in) >> 4) % (1U << 17);
1377  out++;
1378  *out = ((*in) >> 21);
1379  ++in;
1380  *out |= ((*in) % (1U << 6)) << (17 - 6);
1381  out++;
1382  *out = ((*in) >> 6) % (1U << 17);
1383  out++;
1384  *out = ((*in) >> 23);
1385  ++in;
1386  *out |= ((*in) % (1U << 8)) << (17 - 8);
1387  out++;
1388  *out = ((*in) >> 8) % (1U << 17);
1389  out++;
1390  *out = ((*in) >> 25);
1391  ++in;
1392  *out |= ((*in) % (1U << 10)) << (17 - 10);
1393  out++;
1394  *out = ((*in) >> 10) % (1U << 17);
1395  out++;
1396  *out = ((*in) >> 27);
1397  ++in;
1398  *out |= ((*in) % (1U << 12)) << (17 - 12);
1399  out++;
1400  *out = ((*in) >> 12) % (1U << 17);
1401  out++;
1402  *out = ((*in) >> 29);
1403  ++in;
1404  *out |= ((*in) % (1U << 14)) << (17 - 14);
1405  out++;
1406  *out = ((*in) >> 14) % (1U << 17);
1407  out++;
1408  *out = ((*in) >> 31);
1409  ++in;
1410  *out |= ((*in) % (1U << 16)) << (17 - 16);
1411  out++;
1412  *out = ((*in) >> 16);
1413  ++in;
1414  *out |= ((*in) % (1U << 1)) << (17 - 1);
1415  out++;
1416  *out = ((*in) >> 1) % (1U << 17);
1417  out++;
1418  *out = ((*in) >> 18);
1419  ++in;
1420  *out |= ((*in) % (1U << 3)) << (17 - 3);
1421  out++;
1422  *out = ((*in) >> 3) % (1U << 17);
1423  out++;
1424  *out = ((*in) >> 20);
1425  ++in;
1426  *out |= ((*in) % (1U << 5)) << (17 - 5);
1427  out++;
1428  *out = ((*in) >> 5) % (1U << 17);
1429  out++;
1430  *out = ((*in) >> 22);
1431  ++in;
1432  *out |= ((*in) % (1U << 7)) << (17 - 7);
1433  out++;
1434  *out = ((*in) >> 7) % (1U << 17);
1435  out++;
1436  *out = ((*in) >> 24);
1437  ++in;
1438  *out |= ((*in) % (1U << 9)) << (17 - 9);
1439  out++;
1440  *out = ((*in) >> 9) % (1U << 17);
1441  out++;
1442  *out = ((*in) >> 26);
1443  ++in;
1444  *out |= ((*in) % (1U << 11)) << (17 - 11);
1445  out++;
1446  *out = ((*in) >> 11) % (1U << 17);
1447  out++;
1448  *out = ((*in) >> 28);
1449  ++in;
1450  *out |= ((*in) % (1U << 13)) << (17 - 13);
1451  out++;
1452  *out = ((*in) >> 13) % (1U << 17);
1453  out++;
1454  *out = ((*in) >> 30);
1455  ++in;
1456  *out |= ((*in) % (1U << 15)) << (17 - 15);
1457  out++;
1458  *out = ((*in) >> 15);
1459  ++in;
1460  out++;
1461 
1462  return in;
1463 }
1464 
1465 inline const uint32_t* unpack18_32(const uint32_t* in, uint32_t* out) {
1466  *out = ((*in) >> 0) % (1U << 18);
1467  out++;
1468  *out = ((*in) >> 18);
1469  ++in;
1470  *out |= ((*in) % (1U << 4)) << (18 - 4);
1471  out++;
1472  *out = ((*in) >> 4) % (1U << 18);
1473  out++;
1474  *out = ((*in) >> 22);
1475  ++in;
1476  *out |= ((*in) % (1U << 8)) << (18 - 8);
1477  out++;
1478  *out = ((*in) >> 8) % (1U << 18);
1479  out++;
1480  *out = ((*in) >> 26);
1481  ++in;
1482  *out |= ((*in) % (1U << 12)) << (18 - 12);
1483  out++;
1484  *out = ((*in) >> 12) % (1U << 18);
1485  out++;
1486  *out = ((*in) >> 30);
1487  ++in;
1488  *out |= ((*in) % (1U << 16)) << (18 - 16);
1489  out++;
1490  *out = ((*in) >> 16);
1491  ++in;
1492  *out |= ((*in) % (1U << 2)) << (18 - 2);
1493  out++;
1494  *out = ((*in) >> 2) % (1U << 18);
1495  out++;
1496  *out = ((*in) >> 20);
1497  ++in;
1498  *out |= ((*in) % (1U << 6)) << (18 - 6);
1499  out++;
1500  *out = ((*in) >> 6) % (1U << 18);
1501  out++;
1502  *out = ((*in) >> 24);
1503  ++in;
1504  *out |= ((*in) % (1U << 10)) << (18 - 10);
1505  out++;
1506  *out = ((*in) >> 10) % (1U << 18);
1507  out++;
1508  *out = ((*in) >> 28);
1509  ++in;
1510  *out |= ((*in) % (1U << 14)) << (18 - 14);
1511  out++;
1512  *out = ((*in) >> 14);
1513  ++in;
1514  out++;
1515  *out = ((*in) >> 0) % (1U << 18);
1516  out++;
1517  *out = ((*in) >> 18);
1518  ++in;
1519  *out |= ((*in) % (1U << 4)) << (18 - 4);
1520  out++;
1521  *out = ((*in) >> 4) % (1U << 18);
1522  out++;
1523  *out = ((*in) >> 22);
1524  ++in;
1525  *out |= ((*in) % (1U << 8)) << (18 - 8);
1526  out++;
1527  *out = ((*in) >> 8) % (1U << 18);
1528  out++;
1529  *out = ((*in) >> 26);
1530  ++in;
1531  *out |= ((*in) % (1U << 12)) << (18 - 12);
1532  out++;
1533  *out = ((*in) >> 12) % (1U << 18);
1534  out++;
1535  *out = ((*in) >> 30);
1536  ++in;
1537  *out |= ((*in) % (1U << 16)) << (18 - 16);
1538  out++;
1539  *out = ((*in) >> 16);
1540  ++in;
1541  *out |= ((*in) % (1U << 2)) << (18 - 2);
1542  out++;
1543  *out = ((*in) >> 2) % (1U << 18);
1544  out++;
1545  *out = ((*in) >> 20);
1546  ++in;
1547  *out |= ((*in) % (1U << 6)) << (18 - 6);
1548  out++;
1549  *out = ((*in) >> 6) % (1U << 18);
1550  out++;
1551  *out = ((*in) >> 24);
1552  ++in;
1553  *out |= ((*in) % (1U << 10)) << (18 - 10);
1554  out++;
1555  *out = ((*in) >> 10) % (1U << 18);
1556  out++;
1557  *out = ((*in) >> 28);
1558  ++in;
1559  *out |= ((*in) % (1U << 14)) << (18 - 14);
1560  out++;
1561  *out = ((*in) >> 14);
1562  ++in;
1563  out++;
1564 
1565  return in;
1566 }
1567 
1568 inline const uint32_t* unpack19_32(const uint32_t* in, uint32_t* out) {
1569  *out = ((*in) >> 0) % (1U << 19);
1570  out++;
1571  *out = ((*in) >> 19);
1572  ++in;
1573  *out |= ((*in) % (1U << 6)) << (19 - 6);
1574  out++;
1575  *out = ((*in) >> 6) % (1U << 19);
1576  out++;
1577  *out = ((*in) >> 25);
1578  ++in;
1579  *out |= ((*in) % (1U << 12)) << (19 - 12);
1580  out++;
1581  *out = ((*in) >> 12) % (1U << 19);
1582  out++;
1583  *out = ((*in) >> 31);
1584  ++in;
1585  *out |= ((*in) % (1U << 18)) << (19 - 18);
1586  out++;
1587  *out = ((*in) >> 18);
1588  ++in;
1589  *out |= ((*in) % (1U << 5)) << (19 - 5);
1590  out++;
1591  *out = ((*in) >> 5) % (1U << 19);
1592  out++;
1593  *out = ((*in) >> 24);
1594  ++in;
1595  *out |= ((*in) % (1U << 11)) << (19 - 11);
1596  out++;
1597  *out = ((*in) >> 11) % (1U << 19);
1598  out++;
1599  *out = ((*in) >> 30);
1600  ++in;
1601  *out |= ((*in) % (1U << 17)) << (19 - 17);
1602  out++;
1603  *out = ((*in) >> 17);
1604  ++in;
1605  *out |= ((*in) % (1U << 4)) << (19 - 4);
1606  out++;
1607  *out = ((*in) >> 4) % (1U << 19);
1608  out++;
1609  *out = ((*in) >> 23);
1610  ++in;
1611  *out |= ((*in) % (1U << 10)) << (19 - 10);
1612  out++;
1613  *out = ((*in) >> 10) % (1U << 19);
1614  out++;
1615  *out = ((*in) >> 29);
1616  ++in;
1617  *out |= ((*in) % (1U << 16)) << (19 - 16);
1618  out++;
1619  *out = ((*in) >> 16);
1620  ++in;
1621  *out |= ((*in) % (1U << 3)) << (19 - 3);
1622  out++;
1623  *out = ((*in) >> 3) % (1U << 19);
1624  out++;
1625  *out = ((*in) >> 22);
1626  ++in;
1627  *out |= ((*in) % (1U << 9)) << (19 - 9);
1628  out++;
1629  *out = ((*in) >> 9) % (1U << 19);
1630  out++;
1631  *out = ((*in) >> 28);
1632  ++in;
1633  *out |= ((*in) % (1U << 15)) << (19 - 15);
1634  out++;
1635  *out = ((*in) >> 15);
1636  ++in;
1637  *out |= ((*in) % (1U << 2)) << (19 - 2);
1638  out++;
1639  *out = ((*in) >> 2) % (1U << 19);
1640  out++;
1641  *out = ((*in) >> 21);
1642  ++in;
1643  *out |= ((*in) % (1U << 8)) << (19 - 8);
1644  out++;
1645  *out = ((*in) >> 8) % (1U << 19);
1646  out++;
1647  *out = ((*in) >> 27);
1648  ++in;
1649  *out |= ((*in) % (1U << 14)) << (19 - 14);
1650  out++;
1651  *out = ((*in) >> 14);
1652  ++in;
1653  *out |= ((*in) % (1U << 1)) << (19 - 1);
1654  out++;
1655  *out = ((*in) >> 1) % (1U << 19);
1656  out++;
1657  *out = ((*in) >> 20);
1658  ++in;
1659  *out |= ((*in) % (1U << 7)) << (19 - 7);
1660  out++;
1661  *out = ((*in) >> 7) % (1U << 19);
1662  out++;
1663  *out = ((*in) >> 26);
1664  ++in;
1665  *out |= ((*in) % (1U << 13)) << (19 - 13);
1666  out++;
1667  *out = ((*in) >> 13);
1668  ++in;
1669  out++;
1670 
1671  return in;
1672 }
1673 
1674 inline const uint32_t* unpack20_32(const uint32_t* in, uint32_t* out) {
1675  *out = ((*in) >> 0) % (1U << 20);
1676  out++;
1677  *out = ((*in) >> 20);
1678  ++in;
1679  *out |= ((*in) % (1U << 8)) << (20 - 8);
1680  out++;
1681  *out = ((*in) >> 8) % (1U << 20);
1682  out++;
1683  *out = ((*in) >> 28);
1684  ++in;
1685  *out |= ((*in) % (1U << 16)) << (20 - 16);
1686  out++;
1687  *out = ((*in) >> 16);
1688  ++in;
1689  *out |= ((*in) % (1U << 4)) << (20 - 4);
1690  out++;
1691  *out = ((*in) >> 4) % (1U << 20);
1692  out++;
1693  *out = ((*in) >> 24);
1694  ++in;
1695  *out |= ((*in) % (1U << 12)) << (20 - 12);
1696  out++;
1697  *out = ((*in) >> 12);
1698  ++in;
1699  out++;
1700  *out = ((*in) >> 0) % (1U << 20);
1701  out++;
1702  *out = ((*in) >> 20);
1703  ++in;
1704  *out |= ((*in) % (1U << 8)) << (20 - 8);
1705  out++;
1706  *out = ((*in) >> 8) % (1U << 20);
1707  out++;
1708  *out = ((*in) >> 28);
1709  ++in;
1710  *out |= ((*in) % (1U << 16)) << (20 - 16);
1711  out++;
1712  *out = ((*in) >> 16);
1713  ++in;
1714  *out |= ((*in) % (1U << 4)) << (20 - 4);
1715  out++;
1716  *out = ((*in) >> 4) % (1U << 20);
1717  out++;
1718  *out = ((*in) >> 24);
1719  ++in;
1720  *out |= ((*in) % (1U << 12)) << (20 - 12);
1721  out++;
1722  *out = ((*in) >> 12);
1723  ++in;
1724  out++;
1725  *out = ((*in) >> 0) % (1U << 20);
1726  out++;
1727  *out = ((*in) >> 20);
1728  ++in;
1729  *out |= ((*in) % (1U << 8)) << (20 - 8);
1730  out++;
1731  *out = ((*in) >> 8) % (1U << 20);
1732  out++;
1733  *out = ((*in) >> 28);
1734  ++in;
1735  *out |= ((*in) % (1U << 16)) << (20 - 16);
1736  out++;
1737  *out = ((*in) >> 16);
1738  ++in;
1739  *out |= ((*in) % (1U << 4)) << (20 - 4);
1740  out++;
1741  *out = ((*in) >> 4) % (1U << 20);
1742  out++;
1743  *out = ((*in) >> 24);
1744  ++in;
1745  *out |= ((*in) % (1U << 12)) << (20 - 12);
1746  out++;
1747  *out = ((*in) >> 12);
1748  ++in;
1749  out++;
1750  *out = ((*in) >> 0) % (1U << 20);
1751  out++;
1752  *out = ((*in) >> 20);
1753  ++in;
1754  *out |= ((*in) % (1U << 8)) << (20 - 8);
1755  out++;
1756  *out = ((*in) >> 8) % (1U << 20);
1757  out++;
1758  *out = ((*in) >> 28);
1759  ++in;
1760  *out |= ((*in) % (1U << 16)) << (20 - 16);
1761  out++;
1762  *out = ((*in) >> 16);
1763  ++in;
1764  *out |= ((*in) % (1U << 4)) << (20 - 4);
1765  out++;
1766  *out = ((*in) >> 4) % (1U << 20);
1767  out++;
1768  *out = ((*in) >> 24);
1769  ++in;
1770  *out |= ((*in) % (1U << 12)) << (20 - 12);
1771  out++;
1772  *out = ((*in) >> 12);
1773  ++in;
1774  out++;
1775 
1776  return in;
1777 }
1778 
1779 inline const uint32_t* unpack21_32(const uint32_t* in, uint32_t* out) {
1780  *out = ((*in) >> 0) % (1U << 21);
1781  out++;
1782  *out = ((*in) >> 21);
1783  ++in;
1784  *out |= ((*in) % (1U << 10)) << (21 - 10);
1785  out++;
1786  *out = ((*in) >> 10) % (1U << 21);
1787  out++;
1788  *out = ((*in) >> 31);
1789  ++in;
1790  *out |= ((*in) % (1U << 20)) << (21 - 20);
1791  out++;
1792  *out = ((*in) >> 20);
1793  ++in;
1794  *out |= ((*in) % (1U << 9)) << (21 - 9);
1795  out++;
1796  *out = ((*in) >> 9) % (1U << 21);
1797  out++;
1798  *out = ((*in) >> 30);
1799  ++in;
1800  *out |= ((*in) % (1U << 19)) << (21 - 19);
1801  out++;
1802  *out = ((*in) >> 19);
1803  ++in;
1804  *out |= ((*in) % (1U << 8)) << (21 - 8);
1805  out++;
1806  *out = ((*in) >> 8) % (1U << 21);
1807  out++;
1808  *out = ((*in) >> 29);
1809  ++in;
1810  *out |= ((*in) % (1U << 18)) << (21 - 18);
1811  out++;
1812  *out = ((*in) >> 18);
1813  ++in;
1814  *out |= ((*in) % (1U << 7)) << (21 - 7);
1815  out++;
1816  *out = ((*in) >> 7) % (1U << 21);
1817  out++;
1818  *out = ((*in) >> 28);
1819  ++in;
1820  *out |= ((*in) % (1U << 17)) << (21 - 17);
1821  out++;
1822  *out = ((*in) >> 17);
1823  ++in;
1824  *out |= ((*in) % (1U << 6)) << (21 - 6);
1825  out++;
1826  *out = ((*in) >> 6) % (1U << 21);
1827  out++;
1828  *out = ((*in) >> 27);
1829  ++in;
1830  *out |= ((*in) % (1U << 16)) << (21 - 16);
1831  out++;
1832  *out = ((*in) >> 16);
1833  ++in;
1834  *out |= ((*in) % (1U << 5)) << (21 - 5);
1835  out++;
1836  *out = ((*in) >> 5) % (1U << 21);
1837  out++;
1838  *out = ((*in) >> 26);
1839  ++in;
1840  *out |= ((*in) % (1U << 15)) << (21 - 15);
1841  out++;
1842  *out = ((*in) >> 15);
1843  ++in;
1844  *out |= ((*in) % (1U << 4)) << (21 - 4);
1845  out++;
1846  *out = ((*in) >> 4) % (1U << 21);
1847  out++;
1848  *out = ((*in) >> 25);
1849  ++in;
1850  *out |= ((*in) % (1U << 14)) << (21 - 14);
1851  out++;
1852  *out = ((*in) >> 14);
1853  ++in;
1854  *out |= ((*in) % (1U << 3)) << (21 - 3);
1855  out++;
1856  *out = ((*in) >> 3) % (1U << 21);
1857  out++;
1858  *out = ((*in) >> 24);
1859  ++in;
1860  *out |= ((*in) % (1U << 13)) << (21 - 13);
1861  out++;
1862  *out = ((*in) >> 13);
1863  ++in;
1864  *out |= ((*in) % (1U << 2)) << (21 - 2);
1865  out++;
1866  *out = ((*in) >> 2) % (1U << 21);
1867  out++;
1868  *out = ((*in) >> 23);
1869  ++in;
1870  *out |= ((*in) % (1U << 12)) << (21 - 12);
1871  out++;
1872  *out = ((*in) >> 12);
1873  ++in;
1874  *out |= ((*in) % (1U << 1)) << (21 - 1);
1875  out++;
1876  *out = ((*in) >> 1) % (1U << 21);
1877  out++;
1878  *out = ((*in) >> 22);
1879  ++in;
1880  *out |= ((*in) % (1U << 11)) << (21 - 11);
1881  out++;
1882  *out = ((*in) >> 11);
1883  ++in;
1884  out++;
1885 
1886  return in;
1887 }
1888 
1889 inline const uint32_t* unpack22_32(const uint32_t* in, uint32_t* out) {
1890  *out = ((*in) >> 0) % (1U << 22);
1891  out++;
1892  *out = ((*in) >> 22);
1893  ++in;
1894  *out |= ((*in) % (1U << 12)) << (22 - 12);
1895  out++;
1896  *out = ((*in) >> 12);
1897  ++in;
1898  *out |= ((*in) % (1U << 2)) << (22 - 2);
1899  out++;
1900  *out = ((*in) >> 2) % (1U << 22);
1901  out++;
1902  *out = ((*in) >> 24);
1903  ++in;
1904  *out |= ((*in) % (1U << 14)) << (22 - 14);
1905  out++;
1906  *out = ((*in) >> 14);
1907  ++in;
1908  *out |= ((*in) % (1U << 4)) << (22 - 4);
1909  out++;
1910  *out = ((*in) >> 4) % (1U << 22);
1911  out++;
1912  *out = ((*in) >> 26);
1913  ++in;
1914  *out |= ((*in) % (1U << 16)) << (22 - 16);
1915  out++;
1916  *out = ((*in) >> 16);
1917  ++in;
1918  *out |= ((*in) % (1U << 6)) << (22 - 6);
1919  out++;
1920  *out = ((*in) >> 6) % (1U << 22);
1921  out++;
1922  *out = ((*in) >> 28);
1923  ++in;
1924  *out |= ((*in) % (1U << 18)) << (22 - 18);
1925  out++;
1926  *out = ((*in) >> 18);
1927  ++in;
1928  *out |= ((*in) % (1U << 8)) << (22 - 8);
1929  out++;
1930  *out = ((*in) >> 8) % (1U << 22);
1931  out++;
1932  *out = ((*in) >> 30);
1933  ++in;
1934  *out |= ((*in) % (1U << 20)) << (22 - 20);
1935  out++;
1936  *out = ((*in) >> 20);
1937  ++in;
1938  *out |= ((*in) % (1U << 10)) << (22 - 10);
1939  out++;
1940  *out = ((*in) >> 10);
1941  ++in;
1942  out++;
1943  *out = ((*in) >> 0) % (1U << 22);
1944  out++;
1945  *out = ((*in) >> 22);
1946  ++in;
1947  *out |= ((*in) % (1U << 12)) << (22 - 12);
1948  out++;
1949  *out = ((*in) >> 12);
1950  ++in;
1951  *out |= ((*in) % (1U << 2)) << (22 - 2);
1952  out++;
1953  *out = ((*in) >> 2) % (1U << 22);
1954  out++;
1955  *out = ((*in) >> 24);
1956  ++in;
1957  *out |= ((*in) % (1U << 14)) << (22 - 14);
1958  out++;
1959  *out = ((*in) >> 14);
1960  ++in;
1961  *out |= ((*in) % (1U << 4)) << (22 - 4);
1962  out++;
1963  *out = ((*in) >> 4) % (1U << 22);
1964  out++;
1965  *out = ((*in) >> 26);
1966  ++in;
1967  *out |= ((*in) % (1U << 16)) << (22 - 16);
1968  out++;
1969  *out = ((*in) >> 16);
1970  ++in;
1971  *out |= ((*in) % (1U << 6)) << (22 - 6);
1972  out++;
1973  *out = ((*in) >> 6) % (1U << 22);
1974  out++;
1975  *out = ((*in) >> 28);
1976  ++in;
1977  *out |= ((*in) % (1U << 18)) << (22 - 18);
1978  out++;
1979  *out = ((*in) >> 18);
1980  ++in;
1981  *out |= ((*in) % (1U << 8)) << (22 - 8);
1982  out++;
1983  *out = ((*in) >> 8) % (1U << 22);
1984  out++;
1985  *out = ((*in) >> 30);
1986  ++in;
1987  *out |= ((*in) % (1U << 20)) << (22 - 20);
1988  out++;
1989  *out = ((*in) >> 20);
1990  ++in;
1991  *out |= ((*in) % (1U << 10)) << (22 - 10);
1992  out++;
1993  *out = ((*in) >> 10);
1994  ++in;
1995  out++;
1996 
1997  return in;
1998 }
1999 
2000 inline const uint32_t* unpack23_32(const uint32_t* in, uint32_t* out) {
2001  *out = ((*in) >> 0) % (1U << 23);
2002  out++;
2003  *out = ((*in) >> 23);
2004  ++in;
2005  *out |= ((*in) % (1U << 14)) << (23 - 14);
2006  out++;
2007  *out = ((*in) >> 14);
2008  ++in;
2009  *out |= ((*in) % (1U << 5)) << (23 - 5);
2010  out++;
2011  *out = ((*in) >> 5) % (1U << 23);
2012  out++;
2013  *out = ((*in) >> 28);
2014  ++in;
2015  *out |= ((*in) % (1U << 19)) << (23 - 19);
2016  out++;
2017  *out = ((*in) >> 19);
2018  ++in;
2019  *out |= ((*in) % (1U << 10)) << (23 - 10);
2020  out++;
2021  *out = ((*in) >> 10);
2022  ++in;
2023  *out |= ((*in) % (1U << 1)) << (23 - 1);
2024  out++;
2025  *out = ((*in) >> 1) % (1U << 23);
2026  out++;
2027  *out = ((*in) >> 24);
2028  ++in;
2029  *out |= ((*in) % (1U << 15)) << (23 - 15);
2030  out++;
2031  *out = ((*in) >> 15);
2032  ++in;
2033  *out |= ((*in) % (1U << 6)) << (23 - 6);
2034  out++;
2035  *out = ((*in) >> 6) % (1U << 23);
2036  out++;
2037  *out = ((*in) >> 29);
2038  ++in;
2039  *out |= ((*in) % (1U << 20)) << (23 - 20);
2040  out++;
2041  *out = ((*in) >> 20);
2042  ++in;
2043  *out |= ((*in) % (1U << 11)) << (23 - 11);
2044  out++;
2045  *out = ((*in) >> 11);
2046  ++in;
2047  *out |= ((*in) % (1U << 2)) << (23 - 2);
2048  out++;
2049  *out = ((*in) >> 2) % (1U << 23);
2050  out++;
2051  *out = ((*in) >> 25);
2052  ++in;
2053  *out |= ((*in) % (1U << 16)) << (23 - 16);
2054  out++;
2055  *out = ((*in) >> 16);
2056  ++in;
2057  *out |= ((*in) % (1U << 7)) << (23 - 7);
2058  out++;
2059  *out = ((*in) >> 7) % (1U << 23);
2060  out++;
2061  *out = ((*in) >> 30);
2062  ++in;
2063  *out |= ((*in) % (1U << 21)) << (23 - 21);
2064  out++;
2065  *out = ((*in) >> 21);
2066  ++in;
2067  *out |= ((*in) % (1U << 12)) << (23 - 12);
2068  out++;
2069  *out = ((*in) >> 12);
2070  ++in;
2071  *out |= ((*in) % (1U << 3)) << (23 - 3);
2072  out++;
2073  *out = ((*in) >> 3) % (1U << 23);
2074  out++;
2075  *out = ((*in) >> 26);
2076  ++in;
2077  *out |= ((*in) % (1U << 17)) << (23 - 17);
2078  out++;
2079  *out = ((*in) >> 17);
2080  ++in;
2081  *out |= ((*in) % (1U << 8)) << (23 - 8);
2082  out++;
2083  *out = ((*in) >> 8) % (1U << 23);
2084  out++;
2085  *out = ((*in) >> 31);
2086  ++in;
2087  *out |= ((*in) % (1U << 22)) << (23 - 22);
2088  out++;
2089  *out = ((*in) >> 22);
2090  ++in;
2091  *out |= ((*in) % (1U << 13)) << (23 - 13);
2092  out++;
2093  *out = ((*in) >> 13);
2094  ++in;
2095  *out |= ((*in) % (1U << 4)) << (23 - 4);
2096  out++;
2097  *out = ((*in) >> 4) % (1U << 23);
2098  out++;
2099  *out = ((*in) >> 27);
2100  ++in;
2101  *out |= ((*in) % (1U << 18)) << (23 - 18);
2102  out++;
2103  *out = ((*in) >> 18);
2104  ++in;
2105  *out |= ((*in) % (1U << 9)) << (23 - 9);
2106  out++;
2107  *out = ((*in) >> 9);
2108  ++in;
2109  out++;
2110 
2111  return in;
2112 }
2113 
2114 inline const uint32_t* unpack24_32(const uint32_t* in, uint32_t* out) {
2115  *out = ((*in) >> 0) % (1U << 24);
2116  out++;
2117  *out = ((*in) >> 24);
2118  ++in;
2119  *out |= ((*in) % (1U << 16)) << (24 - 16);
2120  out++;
2121  *out = ((*in) >> 16);
2122  ++in;
2123  *out |= ((*in) % (1U << 8)) << (24 - 8);
2124  out++;
2125  *out = ((*in) >> 8);
2126  ++in;
2127  out++;
2128  *out = ((*in) >> 0) % (1U << 24);
2129  out++;
2130  *out = ((*in) >> 24);
2131  ++in;
2132  *out |= ((*in) % (1U << 16)) << (24 - 16);
2133  out++;
2134  *out = ((*in) >> 16);
2135  ++in;
2136  *out |= ((*in) % (1U << 8)) << (24 - 8);
2137  out++;
2138  *out = ((*in) >> 8);
2139  ++in;
2140  out++;
2141  *out = ((*in) >> 0) % (1U << 24);
2142  out++;
2143  *out = ((*in) >> 24);
2144  ++in;
2145  *out |= ((*in) % (1U << 16)) << (24 - 16);
2146  out++;
2147  *out = ((*in) >> 16);
2148  ++in;
2149  *out |= ((*in) % (1U << 8)) << (24 - 8);
2150  out++;
2151  *out = ((*in) >> 8);
2152  ++in;
2153  out++;
2154  *out = ((*in) >> 0) % (1U << 24);
2155  out++;
2156  *out = ((*in) >> 24);
2157  ++in;
2158  *out |= ((*in) % (1U << 16)) << (24 - 16);
2159  out++;
2160  *out = ((*in) >> 16);
2161  ++in;
2162  *out |= ((*in) % (1U << 8)) << (24 - 8);
2163  out++;
2164  *out = ((*in) >> 8);
2165  ++in;
2166  out++;
2167  *out = ((*in) >> 0) % (1U << 24);
2168  out++;
2169  *out = ((*in) >> 24);
2170  ++in;
2171  *out |= ((*in) % (1U << 16)) << (24 - 16);
2172  out++;
2173  *out = ((*in) >> 16);
2174  ++in;
2175  *out |= ((*in) % (1U << 8)) << (24 - 8);
2176  out++;
2177  *out = ((*in) >> 8);
2178  ++in;
2179  out++;
2180  *out = ((*in) >> 0) % (1U << 24);
2181  out++;
2182  *out = ((*in) >> 24);
2183  ++in;
2184  *out |= ((*in) % (1U << 16)) << (24 - 16);
2185  out++;
2186  *out = ((*in) >> 16);
2187  ++in;
2188  *out |= ((*in) % (1U << 8)) << (24 - 8);
2189  out++;
2190  *out = ((*in) >> 8);
2191  ++in;
2192  out++;
2193  *out = ((*in) >> 0) % (1U << 24);
2194  out++;
2195  *out = ((*in) >> 24);
2196  ++in;
2197  *out |= ((*in) % (1U << 16)) << (24 - 16);
2198  out++;
2199  *out = ((*in) >> 16);
2200  ++in;
2201  *out |= ((*in) % (1U << 8)) << (24 - 8);
2202  out++;
2203  *out = ((*in) >> 8);
2204  ++in;
2205  out++;
2206  *out = ((*in) >> 0) % (1U << 24);
2207  out++;
2208  *out = ((*in) >> 24);
2209  ++in;
2210  *out |= ((*in) % (1U << 16)) << (24 - 16);
2211  out++;
2212  *out = ((*in) >> 16);
2213  ++in;
2214  *out |= ((*in) % (1U << 8)) << (24 - 8);
2215  out++;
2216  *out = ((*in) >> 8);
2217  ++in;
2218  out++;
2219 
2220  return in;
2221 }
2222 
2223 inline const uint32_t* unpack25_32(const uint32_t* in, uint32_t* out) {
2224  *out = ((*in) >> 0) % (1U << 25);
2225  out++;
2226  *out = ((*in) >> 25);
2227  ++in;
2228  *out |= ((*in) % (1U << 18)) << (25 - 18);
2229  out++;
2230  *out = ((*in) >> 18);
2231  ++in;
2232  *out |= ((*in) % (1U << 11)) << (25 - 11);
2233  out++;
2234  *out = ((*in) >> 11);
2235  ++in;
2236  *out |= ((*in) % (1U << 4)) << (25 - 4);
2237  out++;
2238  *out = ((*in) >> 4) % (1U << 25);
2239  out++;
2240  *out = ((*in) >> 29);
2241  ++in;
2242  *out |= ((*in) % (1U << 22)) << (25 - 22);
2243  out++;
2244  *out = ((*in) >> 22);
2245  ++in;
2246  *out |= ((*in) % (1U << 15)) << (25 - 15);
2247  out++;
2248  *out = ((*in) >> 15);
2249  ++in;
2250  *out |= ((*in) % (1U << 8)) << (25 - 8);
2251  out++;
2252  *out = ((*in) >> 8);
2253  ++in;
2254  *out |= ((*in) % (1U << 1)) << (25 - 1);
2255  out++;
2256  *out = ((*in) >> 1) % (1U << 25);
2257  out++;
2258  *out = ((*in) >> 26);
2259  ++in;
2260  *out |= ((*in) % (1U << 19)) << (25 - 19);
2261  out++;
2262  *out = ((*in) >> 19);
2263  ++in;
2264  *out |= ((*in) % (1U << 12)) << (25 - 12);
2265  out++;
2266  *out = ((*in) >> 12);
2267  ++in;
2268  *out |= ((*in) % (1U << 5)) << (25 - 5);
2269  out++;
2270  *out = ((*in) >> 5) % (1U << 25);
2271  out++;
2272  *out = ((*in) >> 30);
2273  ++in;
2274  *out |= ((*in) % (1U << 23)) << (25 - 23);
2275  out++;
2276  *out = ((*in) >> 23);
2277  ++in;
2278  *out |= ((*in) % (1U << 16)) << (25 - 16);
2279  out++;
2280  *out = ((*in) >> 16);
2281  ++in;
2282  *out |= ((*in) % (1U << 9)) << (25 - 9);
2283  out++;
2284  *out = ((*in) >> 9);
2285  ++in;
2286  *out |= ((*in) % (1U << 2)) << (25 - 2);
2287  out++;
2288  *out = ((*in) >> 2) % (1U << 25);
2289  out++;
2290  *out = ((*in) >> 27);
2291  ++in;
2292  *out |= ((*in) % (1U << 20)) << (25 - 20);
2293  out++;
2294  *out = ((*in) >> 20);
2295  ++in;
2296  *out |= ((*in) % (1U << 13)) << (25 - 13);
2297  out++;
2298  *out = ((*in) >> 13);
2299  ++in;
2300  *out |= ((*in) % (1U << 6)) << (25 - 6);
2301  out++;
2302  *out = ((*in) >> 6) % (1U << 25);
2303  out++;
2304  *out = ((*in) >> 31);
2305  ++in;
2306  *out |= ((*in) % (1U << 24)) << (25 - 24);
2307  out++;
2308  *out = ((*in) >> 24);
2309  ++in;
2310  *out |= ((*in) % (1U << 17)) << (25 - 17);
2311  out++;
2312  *out = ((*in) >> 17);
2313  ++in;
2314  *out |= ((*in) % (1U << 10)) << (25 - 10);
2315  out++;
2316  *out = ((*in) >> 10);
2317  ++in;
2318  *out |= ((*in) % (1U << 3)) << (25 - 3);
2319  out++;
2320  *out = ((*in) >> 3) % (1U << 25);
2321  out++;
2322  *out = ((*in) >> 28);
2323  ++in;
2324  *out |= ((*in) % (1U << 21)) << (25 - 21);
2325  out++;
2326  *out = ((*in) >> 21);
2327  ++in;
2328  *out |= ((*in) % (1U << 14)) << (25 - 14);
2329  out++;
2330  *out = ((*in) >> 14);
2331  ++in;
2332  *out |= ((*in) % (1U << 7)) << (25 - 7);
2333  out++;
2334  *out = ((*in) >> 7);
2335  ++in;
2336  out++;
2337 
2338  return in;
2339 }
2340 
2341 inline const uint32_t* unpack26_32(const uint32_t* in, uint32_t* out) {
2342  *out = ((*in) >> 0) % (1U << 26);
2343  out++;
2344  *out = ((*in) >> 26);
2345  ++in;
2346  *out |= ((*in) % (1U << 20)) << (26 - 20);
2347  out++;
2348  *out = ((*in) >> 20);
2349  ++in;
2350  *out |= ((*in) % (1U << 14)) << (26 - 14);
2351  out++;
2352  *out = ((*in) >> 14);
2353  ++in;
2354  *out |= ((*in) % (1U << 8)) << (26 - 8);
2355  out++;
2356  *out = ((*in) >> 8);
2357  ++in;
2358  *out |= ((*in) % (1U << 2)) << (26 - 2);
2359  out++;
2360  *out = ((*in) >> 2) % (1U << 26);
2361  out++;
2362  *out = ((*in) >> 28);
2363  ++in;
2364  *out |= ((*in) % (1U << 22)) << (26 - 22);
2365  out++;
2366  *out = ((*in) >> 22);
2367  ++in;
2368  *out |= ((*in) % (1U << 16)) << (26 - 16);
2369  out++;
2370  *out = ((*in) >> 16);
2371  ++in;
2372  *out |= ((*in) % (1U << 10)) << (26 - 10);
2373  out++;
2374  *out = ((*in) >> 10);
2375  ++in;
2376  *out |= ((*in) % (1U << 4)) << (26 - 4);
2377  out++;
2378  *out = ((*in) >> 4) % (1U << 26);
2379  out++;
2380  *out = ((*in) >> 30);
2381  ++in;
2382  *out |= ((*in) % (1U << 24)) << (26 - 24);
2383  out++;
2384  *out = ((*in) >> 24);
2385  ++in;
2386  *out |= ((*in) % (1U << 18)) << (26 - 18);
2387  out++;
2388  *out = ((*in) >> 18);
2389  ++in;
2390  *out |= ((*in) % (1U << 12)) << (26 - 12);
2391  out++;
2392  *out = ((*in) >> 12);
2393  ++in;
2394  *out |= ((*in) % (1U << 6)) << (26 - 6);
2395  out++;
2396  *out = ((*in) >> 6);
2397  ++in;
2398  out++;
2399  *out = ((*in) >> 0) % (1U << 26);
2400  out++;
2401  *out = ((*in) >> 26);
2402  ++in;
2403  *out |= ((*in) % (1U << 20)) << (26 - 20);
2404  out++;
2405  *out = ((*in) >> 20);
2406  ++in;
2407  *out |= ((*in) % (1U << 14)) << (26 - 14);
2408  out++;
2409  *out = ((*in) >> 14);
2410  ++in;
2411  *out |= ((*in) % (1U << 8)) << (26 - 8);
2412  out++;
2413  *out = ((*in) >> 8);
2414  ++in;
2415  *out |= ((*in) % (1U << 2)) << (26 - 2);
2416  out++;
2417  *out = ((*in) >> 2) % (1U << 26);
2418  out++;
2419  *out = ((*in) >> 28);
2420  ++in;
2421  *out |= ((*in) % (1U << 22)) << (26 - 22);
2422  out++;
2423  *out = ((*in) >> 22);
2424  ++in;
2425  *out |= ((*in) % (1U << 16)) << (26 - 16);
2426  out++;
2427  *out = ((*in) >> 16);
2428  ++in;
2429  *out |= ((*in) % (1U << 10)) << (26 - 10);
2430  out++;
2431  *out = ((*in) >> 10);
2432  ++in;
2433  *out |= ((*in) % (1U << 4)) << (26 - 4);
2434  out++;
2435  *out = ((*in) >> 4) % (1U << 26);
2436  out++;
2437  *out = ((*in) >> 30);
2438  ++in;
2439  *out |= ((*in) % (1U << 24)) << (26 - 24);
2440  out++;
2441  *out = ((*in) >> 24);
2442  ++in;
2443  *out |= ((*in) % (1U << 18)) << (26 - 18);
2444  out++;
2445  *out = ((*in) >> 18);
2446  ++in;
2447  *out |= ((*in) % (1U << 12)) << (26 - 12);
2448  out++;
2449  *out = ((*in) >> 12);
2450  ++in;
2451  *out |= ((*in) % (1U << 6)) << (26 - 6);
2452  out++;
2453  *out = ((*in) >> 6);
2454  ++in;
2455  out++;
2456 
2457  return in;
2458 }
2459 
2460 inline const uint32_t* unpack27_32(const uint32_t* in, uint32_t* out) {
2461  *out = ((*in) >> 0) % (1U << 27);
2462  out++;
2463  *out = ((*in) >> 27);
2464  ++in;
2465  *out |= ((*in) % (1U << 22)) << (27 - 22);
2466  out++;
2467  *out = ((*in) >> 22);
2468  ++in;
2469  *out |= ((*in) % (1U << 17)) << (27 - 17);
2470  out++;
2471  *out = ((*in) >> 17);
2472  ++in;
2473  *out |= ((*in) % (1U << 12)) << (27 - 12);
2474  out++;
2475  *out = ((*in) >> 12);
2476  ++in;
2477  *out |= ((*in) % (1U << 7)) << (27 - 7);
2478  out++;
2479  *out = ((*in) >> 7);
2480  ++in;
2481  *out |= ((*in) % (1U << 2)) << (27 - 2);
2482  out++;
2483  *out = ((*in) >> 2) % (1U << 27);
2484  out++;
2485  *out = ((*in) >> 29);
2486  ++in;
2487  *out |= ((*in) % (1U << 24)) << (27 - 24);
2488  out++;
2489  *out = ((*in) >> 24);
2490  ++in;
2491  *out |= ((*in) % (1U << 19)) << (27 - 19);
2492  out++;
2493  *out = ((*in) >> 19);
2494  ++in;
2495  *out |= ((*in) % (1U << 14)) << (27 - 14);
2496  out++;
2497  *out = ((*in) >> 14);
2498  ++in;
2499  *out |= ((*in) % (1U << 9)) << (27 - 9);
2500  out++;
2501  *out = ((*in) >> 9);
2502  ++in;
2503  *out |= ((*in) % (1U << 4)) << (27 - 4);
2504  out++;
2505  *out = ((*in) >> 4) % (1U << 27);
2506  out++;
2507  *out = ((*in) >> 31);
2508  ++in;
2509  *out |= ((*in) % (1U << 26)) << (27 - 26);
2510  out++;
2511  *out = ((*in) >> 26);
2512  ++in;
2513  *out |= ((*in) % (1U << 21)) << (27 - 21);
2514  out++;
2515  *out = ((*in) >> 21);
2516  ++in;
2517  *out |= ((*in) % (1U << 16)) << (27 - 16);
2518  out++;
2519  *out = ((*in) >> 16);
2520  ++in;
2521  *out |= ((*in) % (1U << 11)) << (27 - 11);
2522  out++;
2523  *out = ((*in) >> 11);
2524  ++in;
2525  *out |= ((*in) % (1U << 6)) << (27 - 6);
2526  out++;
2527  *out = ((*in) >> 6);
2528  ++in;
2529  *out |= ((*in) % (1U << 1)) << (27 - 1);
2530  out++;
2531  *out = ((*in) >> 1) % (1U << 27);
2532  out++;
2533  *out = ((*in) >> 28);
2534  ++in;
2535  *out |= ((*in) % (1U << 23)) << (27 - 23);
2536  out++;
2537  *out = ((*in) >> 23);
2538  ++in;
2539  *out |= ((*in) % (1U << 18)) << (27 - 18);
2540  out++;
2541  *out = ((*in) >> 18);
2542  ++in;
2543  *out |= ((*in) % (1U << 13)) << (27 - 13);
2544  out++;
2545  *out = ((*in) >> 13);
2546  ++in;
2547  *out |= ((*in) % (1U << 8)) << (27 - 8);
2548  out++;
2549  *out = ((*in) >> 8);
2550  ++in;
2551  *out |= ((*in) % (1U << 3)) << (27 - 3);
2552  out++;
2553  *out = ((*in) >> 3) % (1U << 27);
2554  out++;
2555  *out = ((*in) >> 30);
2556  ++in;
2557  *out |= ((*in) % (1U << 25)) << (27 - 25);
2558  out++;
2559  *out = ((*in) >> 25);
2560  ++in;
2561  *out |= ((*in) % (1U << 20)) << (27 - 20);
2562  out++;
2563  *out = ((*in) >> 20);
2564  ++in;
2565  *out |= ((*in) % (1U << 15)) << (27 - 15);
2566  out++;
2567  *out = ((*in) >> 15);
2568  ++in;
2569  *out |= ((*in) % (1U << 10)) << (27 - 10);
2570  out++;
2571  *out = ((*in) >> 10);
2572  ++in;
2573  *out |= ((*in) % (1U << 5)) << (27 - 5);
2574  out++;
2575  *out = ((*in) >> 5);
2576  ++in;
2577  out++;
2578 
2579  return in;
2580 }
2581 
2582 inline const uint32_t* unpack28_32(const uint32_t* in, uint32_t* out) {
2583  *out = ((*in) >> 0) % (1U << 28);
2584  out++;
2585  *out = ((*in) >> 28);
2586  ++in;
2587  *out |= ((*in) % (1U << 24)) << (28 - 24);
2588  out++;
2589  *out = ((*in) >> 24);
2590  ++in;
2591  *out |= ((*in) % (1U << 20)) << (28 - 20);
2592  out++;
2593  *out = ((*in) >> 20);
2594  ++in;
2595  *out |= ((*in) % (1U << 16)) << (28 - 16);
2596  out++;
2597  *out = ((*in) >> 16);
2598  ++in;
2599  *out |= ((*in) % (1U << 12)) << (28 - 12);
2600  out++;
2601  *out = ((*in) >> 12);
2602  ++in;
2603  *out |= ((*in) % (1U << 8)) << (28 - 8);
2604  out++;
2605  *out = ((*in) >> 8);
2606  ++in;
2607  *out |= ((*in) % (1U << 4)) << (28 - 4);
2608  out++;
2609  *out = ((*in) >> 4);
2610  ++in;
2611  out++;
2612  *out = ((*in) >> 0) % (1U << 28);
2613  out++;
2614  *out = ((*in) >> 28);
2615  ++in;
2616  *out |= ((*in) % (1U << 24)) << (28 - 24);
2617  out++;
2618  *out = ((*in) >> 24);
2619  ++in;
2620  *out |= ((*in) % (1U << 20)) << (28 - 20);
2621  out++;
2622  *out = ((*in) >> 20);
2623  ++in;
2624  *out |= ((*in) % (1U << 16)) << (28 - 16);
2625  out++;
2626  *out = ((*in) >> 16);
2627  ++in;
2628  *out |= ((*in) % (1U << 12)) << (28 - 12);
2629  out++;
2630  *out = ((*in) >> 12);
2631  ++in;
2632  *out |= ((*in) % (1U << 8)) << (28 - 8);
2633  out++;
2634  *out = ((*in) >> 8);
2635  ++in;
2636  *out |= ((*in) % (1U << 4)) << (28 - 4);
2637  out++;
2638  *out = ((*in) >> 4);
2639  ++in;
2640  out++;
2641  *out = ((*in) >> 0) % (1U << 28);
2642  out++;
2643  *out = ((*in) >> 28);
2644  ++in;
2645  *out |= ((*in) % (1U << 24)) << (28 - 24);
2646  out++;
2647  *out = ((*in) >> 24);
2648  ++in;
2649  *out |= ((*in) % (1U << 20)) << (28 - 20);
2650  out++;
2651  *out = ((*in) >> 20);
2652  ++in;
2653  *out |= ((*in) % (1U << 16)) << (28 - 16);
2654  out++;
2655  *out = ((*in) >> 16);
2656  ++in;
2657  *out |= ((*in) % (1U << 12)) << (28 - 12);
2658  out++;
2659  *out = ((*in) >> 12);
2660  ++in;
2661  *out |= ((*in) % (1U << 8)) << (28 - 8);
2662  out++;
2663  *out = ((*in) >> 8);
2664  ++in;
2665  *out |= ((*in) % (1U << 4)) << (28 - 4);
2666  out++;
2667  *out = ((*in) >> 4);
2668  ++in;
2669  out++;
2670  *out = ((*in) >> 0) % (1U << 28);
2671  out++;
2672  *out = ((*in) >> 28);
2673  ++in;
2674  *out |= ((*in) % (1U << 24)) << (28 - 24);
2675  out++;
2676  *out = ((*in) >> 24);
2677  ++in;
2678  *out |= ((*in) % (1U << 20)) << (28 - 20);
2679  out++;
2680  *out = ((*in) >> 20);
2681  ++in;
2682  *out |= ((*in) % (1U << 16)) << (28 - 16);
2683  out++;
2684  *out = ((*in) >> 16);
2685  ++in;
2686  *out |= ((*in) % (1U << 12)) << (28 - 12);
2687  out++;
2688  *out = ((*in) >> 12);
2689  ++in;
2690  *out |= ((*in) % (1U << 8)) << (28 - 8);
2691  out++;
2692  *out = ((*in) >> 8);
2693  ++in;
2694  *out |= ((*in) % (1U << 4)) << (28 - 4);
2695  out++;
2696  *out = ((*in) >> 4);
2697  ++in;
2698  out++;
2699 
2700  return in;
2701 }
2702 
2703 inline const uint32_t* unpack29_32(const uint32_t* in, uint32_t* out) {
2704  *out = ((*in) >> 0) % (1U << 29);
2705  out++;
2706  *out = ((*in) >> 29);
2707  ++in;
2708  *out |= ((*in) % (1U << 26)) << (29 - 26);
2709  out++;
2710  *out = ((*in) >> 26);
2711  ++in;
2712  *out |= ((*in) % (1U << 23)) << (29 - 23);
2713  out++;
2714  *out = ((*in) >> 23);
2715  ++in;
2716  *out |= ((*in) % (1U << 20)) << (29 - 20);
2717  out++;
2718  *out = ((*in) >> 20);
2719  ++in;
2720  *out |= ((*in) % (1U << 17)) << (29 - 17);
2721  out++;
2722  *out = ((*in) >> 17);
2723  ++in;
2724  *out |= ((*in) % (1U << 14)) << (29 - 14);
2725  out++;
2726  *out = ((*in) >> 14);
2727  ++in;
2728  *out |= ((*in) % (1U << 11)) << (29 - 11);
2729  out++;
2730  *out = ((*in) >> 11);
2731  ++in;
2732  *out |= ((*in) % (1U << 8)) << (29 - 8);
2733  out++;
2734  *out = ((*in) >> 8);
2735  ++in;
2736  *out |= ((*in) % (1U << 5)) << (29 - 5);
2737  out++;
2738  *out = ((*in) >> 5);
2739  ++in;
2740  *out |= ((*in) % (1U << 2)) << (29 - 2);
2741  out++;
2742  *out = ((*in) >> 2) % (1U << 29);
2743  out++;
2744  *out = ((*in) >> 31);
2745  ++in;
2746  *out |= ((*in) % (1U << 28)) << (29 - 28);
2747  out++;
2748  *out = ((*in) >> 28);
2749  ++in;
2750  *out |= ((*in) % (1U << 25)) << (29 - 25);
2751  out++;
2752  *out = ((*in) >> 25);
2753  ++in;
2754  *out |= ((*in) % (1U << 22)) << (29 - 22);
2755  out++;
2756  *out = ((*in) >> 22);
2757  ++in;
2758  *out |= ((*in) % (1U << 19)) << (29 - 19);
2759  out++;
2760  *out = ((*in) >> 19);
2761  ++in;
2762  *out |= ((*in) % (1U << 16)) << (29 - 16);
2763  out++;
2764  *out = ((*in) >> 16);
2765  ++in;
2766  *out |= ((*in) % (1U << 13)) << (29 - 13);
2767  out++;
2768  *out = ((*in) >> 13);
2769  ++in;
2770  *out |= ((*in) % (1U << 10)) << (29 - 10);
2771  out++;
2772  *out = ((*in) >> 10);
2773  ++in;
2774  *out |= ((*in) % (1U << 7)) << (29 - 7);
2775  out++;
2776  *out = ((*in) >> 7);
2777  ++in;
2778  *out |= ((*in) % (1U << 4)) << (29 - 4);
2779  out++;
2780  *out = ((*in) >> 4);
2781  ++in;
2782  *out |= ((*in) % (1U << 1)) << (29 - 1);
2783  out++;
2784  *out = ((*in) >> 1) % (1U << 29);
2785  out++;
2786  *out = ((*in) >> 30);
2787  ++in;
2788  *out |= ((*in) % (1U << 27)) << (29 - 27);
2789  out++;
2790  *out = ((*in) >> 27);
2791  ++in;
2792  *out |= ((*in) % (1U << 24)) << (29 - 24);
2793  out++;
2794  *out = ((*in) >> 24);
2795  ++in;
2796  *out |= ((*in) % (1U << 21)) << (29 - 21);
2797  out++;
2798  *out = ((*in) >> 21);
2799  ++in;
2800  *out |= ((*in) % (1U << 18)) << (29 - 18);
2801  out++;
2802  *out = ((*in) >> 18);
2803  ++in;
2804  *out |= ((*in) % (1U << 15)) << (29 - 15);
2805  out++;
2806  *out = ((*in) >> 15);
2807  ++in;
2808  *out |= ((*in) % (1U << 12)) << (29 - 12);
2809  out++;
2810  *out = ((*in) >> 12);
2811  ++in;
2812  *out |= ((*in) % (1U << 9)) << (29 - 9);
2813  out++;
2814  *out = ((*in) >> 9);
2815  ++in;
2816  *out |= ((*in) % (1U << 6)) << (29 - 6);
2817  out++;
2818  *out = ((*in) >> 6);
2819  ++in;
2820  *out |= ((*in) % (1U << 3)) << (29 - 3);
2821  out++;
2822  *out = ((*in) >> 3);
2823  ++in;
2824  out++;
2825 
2826  return in;
2827 }
2828 
2829 inline const uint32_t* unpack30_32(const uint32_t* in, uint32_t* out) {
2830  *out = ((*in) >> 0) % (1U << 30);
2831  out++;
2832  *out = ((*in) >> 30);
2833  ++in;
2834  *out |= ((*in) % (1U << 28)) << (30 - 28);
2835  out++;
2836  *out = ((*in) >> 28);
2837  ++in;
2838  *out |= ((*in) % (1U << 26)) << (30 - 26);
2839  out++;
2840  *out = ((*in) >> 26);
2841  ++in;
2842  *out |= ((*in) % (1U << 24)) << (30 - 24);
2843  out++;
2844  *out = ((*in) >> 24);
2845  ++in;
2846  *out |= ((*in) % (1U << 22)) << (30 - 22);
2847  out++;
2848  *out = ((*in) >> 22);
2849  ++in;
2850  *out |= ((*in) % (1U << 20)) << (30 - 20);
2851  out++;
2852  *out = ((*in) >> 20);
2853  ++in;
2854  *out |= ((*in) % (1U << 18)) << (30 - 18);
2855  out++;
2856  *out = ((*in) >> 18);
2857  ++in;
2858  *out |= ((*in) % (1U << 16)) << (30 - 16);
2859  out++;
2860  *out = ((*in) >> 16);
2861  ++in;
2862  *out |= ((*in) % (1U << 14)) << (30 - 14);
2863  out++;
2864  *out = ((*in) >> 14);
2865  ++in;
2866  *out |= ((*in) % (1U << 12)) << (30 - 12);
2867  out++;
2868  *out = ((*in) >> 12);
2869  ++in;
2870  *out |= ((*in) % (1U << 10)) << (30 - 10);
2871  out++;
2872  *out = ((*in) >> 10);
2873  ++in;
2874  *out |= ((*in) % (1U << 8)) << (30 - 8);
2875  out++;
2876  *out = ((*in) >> 8);
2877  ++in;
2878  *out |= ((*in) % (1U << 6)) << (30 - 6);
2879  out++;
2880  *out = ((*in) >> 6);
2881  ++in;
2882  *out |= ((*in) % (1U << 4)) << (30 - 4);
2883  out++;
2884  *out = ((*in) >> 4);
2885  ++in;
2886  *out |= ((*in) % (1U << 2)) << (30 - 2);
2887  out++;
2888  *out = ((*in) >> 2);
2889  ++in;
2890  out++;
2891  *out = ((*in) >> 0) % (1U << 30);
2892  out++;
2893  *out = ((*in) >> 30);
2894  ++in;
2895  *out |= ((*in) % (1U << 28)) << (30 - 28);
2896  out++;
2897  *out = ((*in) >> 28);
2898  ++in;
2899  *out |= ((*in) % (1U << 26)) << (30 - 26);
2900  out++;
2901  *out = ((*in) >> 26);
2902  ++in;
2903  *out |= ((*in) % (1U << 24)) << (30 - 24);
2904  out++;
2905  *out = ((*in) >> 24);
2906  ++in;
2907  *out |= ((*in) % (1U << 22)) << (30 - 22);
2908  out++;
2909  *out = ((*in) >> 22);
2910  ++in;
2911  *out |= ((*in) % (1U << 20)) << (30 - 20);
2912  out++;
2913  *out = ((*in) >> 20);
2914  ++in;
2915  *out |= ((*in) % (1U << 18)) << (30 - 18);
2916  out++;
2917  *out = ((*in) >> 18);
2918  ++in;
2919  *out |= ((*in) % (1U << 16)) << (30 - 16);
2920  out++;
2921  *out = ((*in) >> 16);
2922  ++in;
2923  *out |= ((*in) % (1U << 14)) << (30 - 14);
2924  out++;
2925  *out = ((*in) >> 14);
2926  ++in;
2927  *out |= ((*in) % (1U << 12)) << (30 - 12);
2928  out++;
2929  *out = ((*in) >> 12);
2930  ++in;
2931  *out |= ((*in) % (1U << 10)) << (30 - 10);
2932  out++;
2933  *out = ((*in) >> 10);
2934  ++in;
2935  *out |= ((*in) % (1U << 8)) << (30 - 8);
2936  out++;
2937  *out = ((*in) >> 8);
2938  ++in;
2939  *out |= ((*in) % (1U << 6)) << (30 - 6);
2940  out++;
2941  *out = ((*in) >> 6);
2942  ++in;
2943  *out |= ((*in) % (1U << 4)) << (30 - 4);
2944  out++;
2945  *out = ((*in) >> 4);
2946  ++in;
2947  *out |= ((*in) % (1U << 2)) << (30 - 2);
2948  out++;
2949  *out = ((*in) >> 2);
2950  ++in;
2951  out++;
2952 
2953  return in;
2954 }
2955 
2956 inline const uint32_t* unpack31_32(const uint32_t* in, uint32_t* out) {
2957  *out = ((*in) >> 0) % (1U << 31);
2958  out++;
2959  *out = ((*in) >> 31);
2960  ++in;
2961  *out |= ((*in) % (1U << 30)) << (31 - 30);
2962  out++;
2963  *out = ((*in) >> 30);
2964  ++in;
2965  *out |= ((*in) % (1U << 29)) << (31 - 29);
2966  out++;
2967  *out = ((*in) >> 29);
2968  ++in;
2969  *out |= ((*in) % (1U << 28)) << (31 - 28);
2970  out++;
2971  *out = ((*in) >> 28);
2972  ++in;
2973  *out |= ((*in) % (1U << 27)) << (31 - 27);
2974  out++;
2975  *out = ((*in) >> 27);
2976  ++in;
2977  *out |= ((*in) % (1U << 26)) << (31 - 26);
2978  out++;
2979  *out = ((*in) >> 26);
2980  ++in;
2981  *out |= ((*in) % (1U << 25)) << (31 - 25);
2982  out++;
2983  *out = ((*in) >> 25);
2984  ++in;
2985  *out |= ((*in) % (1U << 24)) << (31 - 24);
2986  out++;
2987  *out = ((*in) >> 24);
2988  ++in;
2989  *out |= ((*in) % (1U << 23)) << (31 - 23);
2990  out++;
2991  *out = ((*in) >> 23);
2992  ++in;
2993  *out |= ((*in) % (1U << 22)) << (31 - 22);
2994  out++;
2995  *out = ((*in) >> 22);
2996  ++in;
2997  *out |= ((*in) % (1U << 21)) << (31 - 21);
2998  out++;
2999  *out = ((*in) >> 21);
3000  ++in;
3001  *out |= ((*in) % (1U << 20)) << (31 - 20);
3002  out++;
3003  *out = ((*in) >> 20);
3004  ++in;
3005  *out |= ((*in) % (1U << 19)) << (31 - 19);
3006  out++;
3007  *out = ((*in) >> 19);
3008  ++in;
3009  *out |= ((*in) % (1U << 18)) << (31 - 18);
3010  out++;
3011  *out = ((*in) >> 18);
3012  ++in;
3013  *out |= ((*in) % (1U << 17)) << (31 - 17);
3014  out++;
3015  *out = ((*in) >> 17);
3016  ++in;
3017  *out |= ((*in) % (1U << 16)) << (31 - 16);
3018  out++;
3019  *out = ((*in) >> 16);
3020  ++in;
3021  *out |= ((*in) % (1U << 15)) << (31 - 15);
3022  out++;
3023  *out = ((*in) >> 15);
3024  ++in;
3025  *out |= ((*in) % (1U << 14)) << (31 - 14);
3026  out++;
3027  *out = ((*in) >> 14);
3028  ++in;
3029  *out |= ((*in) % (1U << 13)) << (31 - 13);
3030  out++;
3031  *out = ((*in) >> 13);
3032  ++in;
3033  *out |= ((*in) % (1U << 12)) << (31 - 12);
3034  out++;
3035  *out = ((*in) >> 12);
3036  ++in;
3037  *out |= ((*in) % (1U << 11)) << (31 - 11);
3038  out++;
3039  *out = ((*in) >> 11);
3040  ++in;
3041  *out |= ((*in) % (1U << 10)) << (31 - 10);
3042  out++;
3043  *out = ((*in) >> 10);
3044  ++in;
3045  *out |= ((*in) % (1U << 9)) << (31 - 9);
3046  out++;
3047  *out = ((*in) >> 9);
3048  ++in;
3049  *out |= ((*in) % (1U << 8)) << (31 - 8);
3050  out++;
3051  *out = ((*in) >> 8);
3052  ++in;
3053  *out |= ((*in) % (1U << 7)) << (31 - 7);
3054  out++;
3055  *out = ((*in) >> 7);
3056  ++in;
3057  *out |= ((*in) % (1U << 6)) << (31 - 6);
3058  out++;
3059  *out = ((*in) >> 6);
3060  ++in;
3061  *out |= ((*in) % (1U << 5)) << (31 - 5);
3062  out++;
3063  *out = ((*in) >> 5);
3064  ++in;
3065  *out |= ((*in) % (1U << 4)) << (31 - 4);
3066  out++;
3067  *out = ((*in) >> 4);
3068  ++in;
3069  *out |= ((*in) % (1U << 3)) << (31 - 3);
3070  out++;
3071  *out = ((*in) >> 3);
3072  ++in;
3073  *out |= ((*in) % (1U << 2)) << (31 - 2);
3074  out++;
3075  *out = ((*in) >> 2);
3076  ++in;
3077  *out |= ((*in) % (1U << 1)) << (31 - 1);
3078  out++;
3079  *out = ((*in) >> 1);
3080  ++in;
3081  out++;
3082 
3083  return in;
3084 }
3085 
3086 inline const uint32_t* unpack32_32(const uint32_t* in, uint32_t* out) {
3087  *out = ((*in) >> 0);
3088  ++in;
3089  out++;
3090  *out = ((*in) >> 0);
3091  ++in;
3092  out++;
3093  *out = ((*in) >> 0);
3094  ++in;
3095  out++;
3096  *out = ((*in) >> 0);
3097  ++in;
3098  out++;
3099  *out = ((*in) >> 0);
3100  ++in;
3101  out++;
3102  *out = ((*in) >> 0);
3103  ++in;
3104  out++;
3105  *out = ((*in) >> 0);
3106  ++in;
3107  out++;
3108  *out = ((*in) >> 0);
3109  ++in;
3110  out++;
3111  *out = ((*in) >> 0);
3112  ++in;
3113  out++;
3114  *out = ((*in) >> 0);
3115  ++in;
3116  out++;
3117  *out = ((*in) >> 0);
3118  ++in;
3119  out++;
3120  *out = ((*in) >> 0);
3121  ++in;
3122  out++;
3123  *out = ((*in) >> 0);
3124  ++in;
3125  out++;
3126  *out = ((*in) >> 0);
3127  ++in;
3128  out++;
3129  *out = ((*in) >> 0);
3130  ++in;
3131  out++;
3132  *out = ((*in) >> 0);
3133  ++in;
3134  out++;
3135  *out = ((*in) >> 0);
3136  ++in;
3137  out++;
3138  *out = ((*in) >> 0);
3139  ++in;
3140  out++;
3141  *out = ((*in) >> 0);
3142  ++in;
3143  out++;
3144  *out = ((*in) >> 0);
3145  ++in;
3146  out++;
3147  *out = ((*in) >> 0);
3148  ++in;
3149  out++;
3150  *out = ((*in) >> 0);
3151  ++in;
3152  out++;
3153  *out = ((*in) >> 0);
3154  ++in;
3155  out++;
3156  *out = ((*in) >> 0);
3157  ++in;
3158  out++;
3159  *out = ((*in) >> 0);
3160  ++in;
3161  out++;
3162  *out = ((*in) >> 0);
3163  ++in;
3164  out++;
3165  *out = ((*in) >> 0);
3166  ++in;
3167  out++;
3168  *out = ((*in) >> 0);
3169  ++in;
3170  out++;
3171  *out = ((*in) >> 0);
3172  ++in;
3173  out++;
3174  *out = ((*in) >> 0);
3175  ++in;
3176  out++;
3177  *out = ((*in) >> 0);
3178  ++in;
3179  out++;
3180  *out = ((*in) >> 0);
3181  ++in;
3182  out++;
3183 
3184  return in;
3185 }
3186 
3187 inline const uint32_t* nullunpacker32(const uint32_t* in, uint32_t* out) {
3188  for (int k = 0; k < 32; ++k) {
3189  out[k] = 0;
3190  }
3191  return in;
3192 }
3193 
3194 inline int unpack32(const uint32_t* in, uint32_t* out, int batch_size, int num_bits) {
3195  batch_size = batch_size / 32 * 32;
3196  int num_loops = batch_size / 32;
3197 
3198  switch (num_bits) {
3199  case 0:
3200  for (int i = 0; i < num_loops; ++i) in = nullunpacker32(in, out + i * 32);
3201  break;
3202  case 1:
3203  for (int i = 0; i < num_loops; ++i) in = unpack1_32(in, out + i * 32);
3204  break;
3205  case 2:
3206  for (int i = 0; i < num_loops; ++i) in = unpack2_32(in, out + i * 32);
3207  break;
3208  case 3:
3209  for (int i = 0; i < num_loops; ++i) in = unpack3_32(in, out + i * 32);
3210  break;
3211  case 4:
3212  for (int i = 0; i < num_loops; ++i) in = unpack4_32(in, out + i * 32);
3213  break;
3214  case 5:
3215  for (int i = 0; i < num_loops; ++i) in = unpack5_32(in, out + i * 32);
3216  break;
3217  case 6:
3218  for (int i = 0; i < num_loops; ++i) in = unpack6_32(in, out + i * 32);
3219  break;
3220  case 7:
3221  for (int i = 0; i < num_loops; ++i) in = unpack7_32(in, out + i * 32);
3222  break;
3223  case 8:
3224  for (int i = 0; i < num_loops; ++i) in = unpack8_32(in, out + i * 32);
3225  break;
3226  case 9:
3227  for (int i = 0; i < num_loops; ++i) in = unpack9_32(in, out + i * 32);
3228  break;
3229  case 10:
3230  for (int i = 0; i < num_loops; ++i) in = unpack10_32(in, out + i * 32);
3231  break;
3232  case 11:
3233  for (int i = 0; i < num_loops; ++i) in = unpack11_32(in, out + i * 32);
3234  break;
3235  case 12:
3236  for (int i = 0; i < num_loops; ++i) in = unpack12_32(in, out + i * 32);
3237  break;
3238  case 13:
3239  for (int i = 0; i < num_loops; ++i) in = unpack13_32(in, out + i * 32);
3240  break;
3241  case 14:
3242  for (int i = 0; i < num_loops; ++i) in = unpack14_32(in, out + i * 32);
3243  break;
3244  case 15:
3245  for (int i = 0; i < num_loops; ++i) in = unpack15_32(in, out + i * 32);
3246  break;
3247  case 16:
3248  for (int i = 0; i < num_loops; ++i) in = unpack16_32(in, out + i * 32);
3249  break;
3250  case 17:
3251  for (int i = 0; i < num_loops; ++i) in = unpack17_32(in, out + i * 32);
3252  break;
3253  case 18:
3254  for (int i = 0; i < num_loops; ++i) in = unpack18_32(in, out + i * 32);
3255  break;
3256  case 19:
3257  for (int i = 0; i < num_loops; ++i) in = unpack19_32(in, out + i * 32);
3258  break;
3259  case 20:
3260  for (int i = 0; i < num_loops; ++i) in = unpack20_32(in, out + i * 32);
3261  break;
3262  case 21:
3263  for (int i = 0; i < num_loops; ++i) in = unpack21_32(in, out + i * 32);
3264  break;
3265  case 22:
3266  for (int i = 0; i < num_loops; ++i) in = unpack22_32(in, out + i * 32);
3267  break;
3268  case 23:
3269  for (int i = 0; i < num_loops; ++i) in = unpack23_32(in, out + i * 32);
3270  break;
3271  case 24:
3272  for (int i = 0; i < num_loops; ++i) in = unpack24_32(in, out + i * 32);
3273  break;
3274  case 25:
3275  for (int i = 0; i < num_loops; ++i) in = unpack25_32(in, out + i * 32);
3276  break;
3277  case 26:
3278  for (int i = 0; i < num_loops; ++i) in = unpack26_32(in, out + i * 32);
3279  break;
3280  case 27:
3281  for (int i = 0; i < num_loops; ++i) in = unpack27_32(in, out + i * 32);
3282  break;
3283  case 28:
3284  for (int i = 0; i < num_loops; ++i) in = unpack28_32(in, out + i * 32);
3285  break;
3286  case 29:
3287  for (int i = 0; i < num_loops; ++i) in = unpack29_32(in, out + i * 32);
3288  break;
3289  case 30:
3290  for (int i = 0; i < num_loops; ++i) in = unpack30_32(in, out + i * 32);
3291  break;
3292  case 31:
3293  for (int i = 0; i < num_loops; ++i) in = unpack31_32(in, out + i * 32);
3294  break;
3295  case 32:
3296  for (int i = 0; i < num_loops; ++i) in = unpack32_32(in, out + i * 32);
3297  break;
3298  default:
3299  DCHECK(false) << "Unsupported num_bits";
3300  }
3301 
3302  return batch_size;
3303 }
3304 
3305 } // namespace internal
3306 } // namespace arrow
3307 
3308 #endif // ARROW_UTIL_BPACKING_H
Top-level namespace for Apache Arrow C++ API.
Definition: allocator.h:29
#define DCHECK(condition)
Definition: logging.h:78