Coverage Report

Created: 2025-06-12 07:25

/src/duckdb/third_party/fastpforlib/bitpackinghelpers.h
Line
Count
Source (jump to first uncovered line)
1
/**
2
* This code is released under the
3
* Apache License Version 2.0 http://www.apache.org/licenses/.
4
*
5
* (c) Daniel Lemire, http://lemire.me/en/
6
*/
7
#pragma once
8
#include "bitpacking.h"
9
10
11
#include <stdexcept>
12
13
namespace duckdb_fastpforlib {
14
15
namespace internal {
16
17
// Note that this only packs 8 values
18
0
inline void fastunpack_quarter(const uint8_t *__restrict in, uint8_t *__restrict out, const uint32_t bit) {
19
  // Could have used function pointers instead of switch.
20
  // Switch calls do offer the compiler more opportunities for optimization in
21
  // theory. In this case, it makes no difference with a good compiler.
22
0
  switch (bit) {
23
0
  case 0:
24
0
    internal::__fastunpack0(in, out);
25
0
    break;
26
0
  case 1:
27
0
    internal::__fastunpack1(in, out);
28
0
    break;
29
0
  case 2:
30
0
    internal::__fastunpack2(in, out);
31
0
    break;
32
0
  case 3:
33
0
    internal::__fastunpack3(in, out);
34
0
    break;
35
0
  case 4:
36
0
    internal::__fastunpack4(in, out);
37
0
    break;
38
0
  case 5:
39
0
    internal::__fastunpack5(in, out);
40
0
    break;
41
0
  case 6:
42
0
    internal::__fastunpack6(in, out);
43
0
    break;
44
0
  case 7:
45
0
    internal::__fastunpack7(in, out);
46
0
    break;
47
0
  case 8:
48
0
    internal::__fastunpack8(in, out);
49
0
    break;
50
0
  default:
51
0
    throw std::logic_error("Invalid bit width for bitpacking");
52
0
  }
53
0
}
54
55
// Note that this only packs 8 values
56
0
inline void fastpack_quarter(const uint8_t *__restrict in, uint8_t *__restrict out, const uint32_t bit) {
57
  // Could have used function pointers instead of switch.
58
  // Switch calls do offer the compiler more opportunities for optimization in
59
  // theory. In this case, it makes no difference with a good compiler.
60
0
  switch (bit) {
61
0
  case 0:
62
0
    internal::__fastpack0(in, out);
63
0
    break;
64
0
  case 1:
65
0
    internal::__fastpack1(in, out);
66
0
    break;
67
0
  case 2:
68
0
    internal::__fastpack2(in, out);
69
0
    break;
70
0
  case 3:
71
0
    internal::__fastpack3(in, out);
72
0
    break;
73
0
  case 4:
74
0
    internal::__fastpack4(in, out);
75
0
    break;
76
0
  case 5:
77
0
    internal::__fastpack5(in, out);
78
0
    break;
79
0
  case 6:
80
0
    internal::__fastpack6(in, out);
81
0
    break;
82
0
  case 7:
83
0
    internal::__fastpack7(in, out);
84
0
    break;
85
0
  case 8:
86
0
    internal::__fastpack8(in, out);
87
0
    break;
88
0
  default:
89
0
    throw std::logic_error("Invalid bit width for bitpacking");
90
0
  }
91
0
}
92
93
// Note that this only packs 16 values
94
0
inline void fastunpack_half(const uint16_t *__restrict in, uint16_t *__restrict out, const uint32_t bit) {
95
  // Could have used function pointers instead of switch.
96
  // Switch calls do offer the compiler more opportunities for optimization in
97
  // theory. In this case, it makes no difference with a good compiler.
98
0
  switch (bit) {
99
0
  case 0:
100
0
    internal::__fastunpack0(in, out);
101
0
    break;
102
0
  case 1:
103
0
    internal::__fastunpack1(in, out);
104
0
    break;
105
0
  case 2:
106
0
    internal::__fastunpack2(in, out);
107
0
    break;
108
0
  case 3:
109
0
    internal::__fastunpack3(in, out);
110
0
    break;
111
0
  case 4:
112
0
    internal::__fastunpack4(in, out);
113
0
    break;
114
0
  case 5:
115
0
    internal::__fastunpack5(in, out);
116
0
    break;
117
0
  case 6:
118
0
    internal::__fastunpack6(in, out);
119
0
    break;
120
0
  case 7:
121
0
    internal::__fastunpack7(in, out);
122
0
    break;
123
0
  case 8:
124
0
    internal::__fastunpack8(in, out);
125
0
    break;
126
0
  case 9:
127
0
    internal::__fastunpack9(in, out);
128
0
    break;
129
0
  case 10:
130
0
    internal::__fastunpack10(in, out);
131
0
    break;
132
0
  case 11:
133
0
    internal::__fastunpack11(in, out);
134
0
    break;
135
0
  case 12:
136
0
    internal::__fastunpack12(in, out);
137
0
    break;
138
0
  case 13:
139
0
    internal::__fastunpack13(in, out);
140
0
    break;
141
0
  case 14:
142
0
    internal::__fastunpack14(in, out);
143
0
    break;
144
0
  case 15:
145
0
    internal::__fastunpack15(in, out);
146
0
    break;
147
0
  case 16:
148
0
    internal::__fastunpack16(in, out);
149
0
    break;
150
0
  default:
151
0
    throw std::logic_error("Invalid bit width for bitpacking");
152
0
  }
153
0
}
154
155
// Note that this only packs 16 values
156
0
inline void fastpack_half(const uint16_t *__restrict in, uint16_t *__restrict out, const uint32_t bit) {
157
  // Could have used function pointers instead of switch.
158
  // Switch calls do offer the compiler more opportunities for optimization in
159
  // theory. In this case, it makes no difference with a good compiler.
160
0
  switch (bit) {
161
0
  case 0:
162
0
    internal::__fastpack0(in, out);
163
0
    break;
164
0
  case 1:
165
0
    internal::__fastpack1(in, out);
166
0
    break;
167
0
  case 2:
168
0
    internal::__fastpack2(in, out);
169
0
    break;
170
0
  case 3:
171
0
    internal::__fastpack3(in, out);
172
0
    break;
173
0
  case 4:
174
0
    internal::__fastpack4(in, out);
175
0
    break;
176
0
  case 5:
177
0
    internal::__fastpack5(in, out);
178
0
    break;
179
0
  case 6:
180
0
    internal::__fastpack6(in, out);
181
0
    break;
182
0
  case 7:
183
0
    internal::__fastpack7(in, out);
184
0
    break;
185
0
  case 8:
186
0
    internal::__fastpack8(in, out);
187
0
    break;
188
0
  case 9:
189
0
    internal::__fastpack9(in, out);
190
0
    break;
191
0
  case 10:
192
0
    internal::__fastpack10(in, out);
193
0
    break;
194
0
  case 11:
195
0
    internal::__fastpack11(in, out);
196
0
    break;
197
0
  case 12:
198
0
    internal::__fastpack12(in, out);
199
0
    break;
200
0
  case 13:
201
0
    internal::__fastpack13(in, out);
202
0
    break;
203
0
  case 14:
204
0
    internal::__fastpack14(in, out);
205
0
    break;
206
0
  case 15:
207
0
    internal::__fastpack15(in, out);
208
0
    break;
209
0
  case 16:
210
0
    internal::__fastpack16(in, out);
211
0
    break;
212
0
  default:
213
0
    throw std::logic_error("Invalid bit width for bitpacking");
214
0
  }
215
0
}
216
}
217
218
0
inline void fastunpack(const uint8_t *__restrict in, uint8_t *__restrict out, const uint32_t bit) {
219
0
  for (uint8_t i = 0; i < 4; i++) {
220
0
    internal::fastunpack_quarter(in + (i*bit), out+(i*8), bit);
221
0
  }
222
0
}
223
224
0
inline void fastunpack(const uint16_t *__restrict in, uint16_t *__restrict out, const uint32_t bit) {
225
0
  internal::fastunpack_half(in, out, bit);
226
0
  internal::fastunpack_half(in + bit, out+16, bit);
227
0
}
228
229
inline void fastunpack(const uint32_t *__restrict in,
230
0
                       uint32_t *__restrict out, const uint32_t bit) {
231
  // Could have used function pointers instead of switch.
232
  // Switch calls do offer the compiler more opportunities for optimization in
233
  // theory. In this case, it makes no difference with a good compiler.
234
0
  switch (bit) {
235
0
  case 0:
236
0
    internal::__fastunpack0(in, out);
237
0
    break;
238
0
  case 1:
239
0
    internal::__fastunpack1(in, out);
240
0
    break;
241
0
  case 2:
242
0
    internal::__fastunpack2(in, out);
243
0
    break;
244
0
  case 3:
245
0
    internal::__fastunpack3(in, out);
246
0
    break;
247
0
  case 4:
248
0
    internal::__fastunpack4(in, out);
249
0
    break;
250
0
  case 5:
251
0
    internal::__fastunpack5(in, out);
252
0
    break;
253
0
  case 6:
254
0
    internal::__fastunpack6(in, out);
255
0
    break;
256
0
  case 7:
257
0
    internal::__fastunpack7(in, out);
258
0
    break;
259
0
  case 8:
260
0
    internal::__fastunpack8(in, out);
261
0
    break;
262
0
  case 9:
263
0
    internal::__fastunpack9(in, out);
264
0
    break;
265
0
  case 10:
266
0
    internal::__fastunpack10(in, out);
267
0
    break;
268
0
  case 11:
269
0
    internal::__fastunpack11(in, out);
270
0
    break;
271
0
  case 12:
272
0
    internal::__fastunpack12(in, out);
273
0
    break;
274
0
  case 13:
275
0
    internal::__fastunpack13(in, out);
276
0
    break;
277
0
  case 14:
278
0
    internal::__fastunpack14(in, out);
279
0
    break;
280
0
  case 15:
281
0
    internal::__fastunpack15(in, out);
282
0
    break;
283
0
  case 16:
284
0
    internal::__fastunpack16(in, out);
285
0
    break;
286
0
  case 17:
287
0
    internal::__fastunpack17(in, out);
288
0
    break;
289
0
  case 18:
290
0
    internal::__fastunpack18(in, out);
291
0
    break;
292
0
  case 19:
293
0
    internal::__fastunpack19(in, out);
294
0
    break;
295
0
  case 20:
296
0
    internal::__fastunpack20(in, out);
297
0
    break;
298
0
  case 21:
299
0
    internal::__fastunpack21(in, out);
300
0
    break;
301
0
  case 22:
302
0
    internal::__fastunpack22(in, out);
303
0
    break;
304
0
  case 23:
305
0
    internal::__fastunpack23(in, out);
306
0
    break;
307
0
  case 24:
308
0
    internal::__fastunpack24(in, out);
309
0
    break;
310
0
  case 25:
311
0
    internal::__fastunpack25(in, out);
312
0
    break;
313
0
  case 26:
314
0
    internal::__fastunpack26(in, out);
315
0
    break;
316
0
  case 27:
317
0
    internal::__fastunpack27(in, out);
318
0
    break;
319
0
  case 28:
320
0
    internal::__fastunpack28(in, out);
321
0
    break;
322
0
  case 29:
323
0
    internal::__fastunpack29(in, out);
324
0
    break;
325
0
  case 30:
326
0
    internal::__fastunpack30(in, out);
327
0
    break;
328
0
  case 31:
329
0
    internal::__fastunpack31(in, out);
330
0
    break;
331
0
  case 32:
332
0
    internal::__fastunpack32(in, out);
333
0
    break;
334
0
  default:
335
0
    throw std::logic_error("Invalid bit width for bitpacking");
336
0
  }
337
0
}
338
339
inline void fastunpack(const uint32_t *__restrict in,
340
0
                       uint64_t *__restrict out, const uint32_t bit) {
341
  // Could have used function pointers instead of switch.
342
  // Switch calls do offer the compiler more opportunities for optimization in
343
  // theory. In this case, it makes no difference with a good compiler.
344
0
  switch (bit) {
345
0
  case 0:
346
0
    internal::__fastunpack0(in, out);
347
0
    break;
348
0
  case 1:
349
0
    internal::__fastunpack1(in, out);
350
0
    break;
351
0
  case 2:
352
0
    internal::__fastunpack2(in, out);
353
0
    break;
354
0
  case 3:
355
0
    internal::__fastunpack3(in, out);
356
0
    break;
357
0
  case 4:
358
0
    internal::__fastunpack4(in, out);
359
0
    break;
360
0
  case 5:
361
0
    internal::__fastunpack5(in, out);
362
0
    break;
363
0
  case 6:
364
0
    internal::__fastunpack6(in, out);
365
0
    break;
366
0
  case 7:
367
0
    internal::__fastunpack7(in, out);
368
0
    break;
369
0
  case 8:
370
0
    internal::__fastunpack8(in, out);
371
0
    break;
372
0
  case 9:
373
0
    internal::__fastunpack9(in, out);
374
0
    break;
375
0
  case 10:
376
0
    internal::__fastunpack10(in, out);
377
0
    break;
378
0
  case 11:
379
0
    internal::__fastunpack11(in, out);
380
0
    break;
381
0
  case 12:
382
0
    internal::__fastunpack12(in, out);
383
0
    break;
384
0
  case 13:
385
0
    internal::__fastunpack13(in, out);
386
0
    break;
387
0
  case 14:
388
0
    internal::__fastunpack14(in, out);
389
0
    break;
390
0
  case 15:
391
0
    internal::__fastunpack15(in, out);
392
0
    break;
393
0
  case 16:
394
0
    internal::__fastunpack16(in, out);
395
0
    break;
396
0
  case 17:
397
0
    internal::__fastunpack17(in, out);
398
0
    break;
399
0
  case 18:
400
0
    internal::__fastunpack18(in, out);
401
0
    break;
402
0
  case 19:
403
0
    internal::__fastunpack19(in, out);
404
0
    break;
405
0
  case 20:
406
0
    internal::__fastunpack20(in, out);
407
0
    break;
408
0
  case 21:
409
0
    internal::__fastunpack21(in, out);
410
0
    break;
411
0
  case 22:
412
0
    internal::__fastunpack22(in, out);
413
0
    break;
414
0
  case 23:
415
0
    internal::__fastunpack23(in, out);
416
0
    break;
417
0
  case 24:
418
0
    internal::__fastunpack24(in, out);
419
0
    break;
420
0
  case 25:
421
0
    internal::__fastunpack25(in, out);
422
0
    break;
423
0
  case 26:
424
0
    internal::__fastunpack26(in, out);
425
0
    break;
426
0
  case 27:
427
0
    internal::__fastunpack27(in, out);
428
0
    break;
429
0
  case 28:
430
0
    internal::__fastunpack28(in, out);
431
0
    break;
432
0
  case 29:
433
0
    internal::__fastunpack29(in, out);
434
0
    break;
435
0
  case 30:
436
0
    internal::__fastunpack30(in, out);
437
0
    break;
438
0
  case 31:
439
0
    internal::__fastunpack31(in, out);
440
0
    break;
441
0
  case 32:
442
0
    internal::__fastunpack32(in, out);
443
0
    break;
444
0
  case 33:
445
0
    internal::__fastunpack33(in, out);
446
0
    break;
447
0
  case 34:
448
0
    internal::__fastunpack34(in, out);
449
0
    break;
450
0
  case 35:
451
0
    internal::__fastunpack35(in, out);
452
0
    break;
453
0
  case 36:
454
0
    internal::__fastunpack36(in, out);
455
0
    break;
456
0
  case 37:
457
0
    internal::__fastunpack37(in, out);
458
0
    break;
459
0
  case 38:
460
0
    internal::__fastunpack38(in, out);
461
0
    break;
462
0
  case 39:
463
0
    internal::__fastunpack39(in, out);
464
0
    break;
465
0
  case 40:
466
0
    internal::__fastunpack40(in, out);
467
0
    break;
468
0
  case 41:
469
0
    internal::__fastunpack41(in, out);
470
0
    break;
471
0
  case 42:
472
0
    internal::__fastunpack42(in, out);
473
0
    break;
474
0
  case 43:
475
0
    internal::__fastunpack43(in, out);
476
0
    break;
477
0
  case 44:
478
0
    internal::__fastunpack44(in, out);
479
0
    break;
480
0
  case 45:
481
0
    internal::__fastunpack45(in, out);
482
0
    break;
483
0
  case 46:
484
0
    internal::__fastunpack46(in, out);
485
0
    break;
486
0
  case 47:
487
0
    internal::__fastunpack47(in, out);
488
0
    break;
489
0
  case 48:
490
0
    internal::__fastunpack48(in, out);
491
0
    break;
492
0
  case 49:
493
0
    internal::__fastunpack49(in, out);
494
0
    break;
495
0
  case 50:
496
0
    internal::__fastunpack50(in, out);
497
0
    break;
498
0
  case 51:
499
0
    internal::__fastunpack51(in, out);
500
0
    break;
501
0
  case 52:
502
0
    internal::__fastunpack52(in, out);
503
0
    break;
504
0
  case 53:
505
0
    internal::__fastunpack53(in, out);
506
0
    break;
507
0
  case 54:
508
0
    internal::__fastunpack54(in, out);
509
0
    break;
510
0
  case 55:
511
0
    internal::__fastunpack55(in, out);
512
0
    break;
513
0
  case 56:
514
0
    internal::__fastunpack56(in, out);
515
0
    break;
516
0
  case 57:
517
0
    internal::__fastunpack57(in, out);
518
0
    break;
519
0
  case 58:
520
0
    internal::__fastunpack58(in, out);
521
0
    break;
522
0
  case 59:
523
0
    internal::__fastunpack59(in, out);
524
0
    break;
525
0
  case 60:
526
0
    internal::__fastunpack60(in, out);
527
0
    break;
528
0
  case 61:
529
0
    internal::__fastunpack61(in, out);
530
0
    break;
531
0
  case 62:
532
0
    internal::__fastunpack62(in, out);
533
0
    break;
534
0
  case 63:
535
0
    internal::__fastunpack63(in, out);
536
0
    break;
537
0
  case 64:
538
0
    internal::__fastunpack64(in, out);
539
0
    break;
540
0
  default:
541
0
  throw std::logic_error("Invalid bit width for bitpacking");
542
0
  }
543
0
}
544
545
0
inline void fastpack(const uint8_t *__restrict in, uint8_t *__restrict out, const uint32_t bit) {
546
547
0
  for (uint8_t i = 0; i < 4; i++) {
548
0
    internal::fastpack_quarter(in+(i*8), out + (i*bit), bit);
549
0
  }
550
0
}
551
552
0
inline void fastpack(const uint16_t *__restrict in, uint16_t *__restrict out, const uint32_t bit) {
553
0
  internal::fastpack_half(in, out, bit);
554
0
  internal::fastpack_half(in+16, out + bit, bit);
555
0
}
556
557
inline void fastpack(const uint32_t *__restrict in,
558
0
                     uint32_t *__restrict out, const uint32_t bit) {
559
  // Could have used function pointers instead of switch.
560
  // Switch calls do offer the compiler more opportunities for optimization in
561
  // theory. In this case, it makes no difference with a good compiler.
562
0
  switch (bit) {
563
0
  case 0:
564
0
    internal::__fastpack0(in, out);
565
0
    break;
566
0
  case 1:
567
0
    internal::__fastpack1(in, out);
568
0
    break;
569
0
  case 2:
570
0
    internal::__fastpack2(in, out);
571
0
    break;
572
0
  case 3:
573
0
    internal::__fastpack3(in, out);
574
0
    break;
575
0
  case 4:
576
0
    internal::__fastpack4(in, out);
577
0
    break;
578
0
  case 5:
579
0
    internal::__fastpack5(in, out);
580
0
    break;
581
0
  case 6:
582
0
    internal::__fastpack6(in, out);
583
0
    break;
584
0
  case 7:
585
0
    internal::__fastpack7(in, out);
586
0
    break;
587
0
  case 8:
588
0
    internal::__fastpack8(in, out);
589
0
    break;
590
0
  case 9:
591
0
    internal::__fastpack9(in, out);
592
0
    break;
593
0
  case 10:
594
0
    internal::__fastpack10(in, out);
595
0
    break;
596
0
  case 11:
597
0
    internal::__fastpack11(in, out);
598
0
    break;
599
0
  case 12:
600
0
    internal::__fastpack12(in, out);
601
0
    break;
602
0
  case 13:
603
0
    internal::__fastpack13(in, out);
604
0
    break;
605
0
  case 14:
606
0
    internal::__fastpack14(in, out);
607
0
    break;
608
0
  case 15:
609
0
    internal::__fastpack15(in, out);
610
0
    break;
611
0
  case 16:
612
0
    internal::__fastpack16(in, out);
613
0
    break;
614
0
  case 17:
615
0
    internal::__fastpack17(in, out);
616
0
    break;
617
0
  case 18:
618
0
    internal::__fastpack18(in, out);
619
0
    break;
620
0
  case 19:
621
0
    internal::__fastpack19(in, out);
622
0
    break;
623
0
  case 20:
624
0
    internal::__fastpack20(in, out);
625
0
    break;
626
0
  case 21:
627
0
    internal::__fastpack21(in, out);
628
0
    break;
629
0
  case 22:
630
0
    internal::__fastpack22(in, out);
631
0
    break;
632
0
  case 23:
633
0
    internal::__fastpack23(in, out);
634
0
    break;
635
0
  case 24:
636
0
    internal::__fastpack24(in, out);
637
0
    break;
638
0
  case 25:
639
0
    internal::__fastpack25(in, out);
640
0
    break;
641
0
  case 26:
642
0
    internal::__fastpack26(in, out);
643
0
    break;
644
0
  case 27:
645
0
    internal::__fastpack27(in, out);
646
0
    break;
647
0
  case 28:
648
0
    internal::__fastpack28(in, out);
649
0
    break;
650
0
  case 29:
651
0
    internal::__fastpack29(in, out);
652
0
    break;
653
0
  case 30:
654
0
    internal::__fastpack30(in, out);
655
0
    break;
656
0
  case 31:
657
0
    internal::__fastpack31(in, out);
658
0
    break;
659
0
  case 32:
660
0
    internal::__fastpack32(in, out);
661
0
    break;
662
0
  default:
663
0
  throw std::logic_error("Invalid bit width for bitpacking");
664
0
  }
665
0
}
666
667
inline void fastpack(const uint64_t *__restrict in,
668
0
                     uint32_t *__restrict out, const uint32_t bit) {
669
0
  switch (bit) {
670
0
  case 0:
671
0
    internal::__fastpack0(in, out);
672
0
    break;
673
0
  case 1:
674
0
    internal::__fastpack1(in, out);
675
0
    break;
676
0
  case 2:
677
0
    internal::__fastpack2(in, out);
678
0
    break;
679
0
  case 3:
680
0
    internal::__fastpack3(in, out);
681
0
    break;
682
0
  case 4:
683
0
    internal::__fastpack4(in, out);
684
0
    break;
685
0
  case 5:
686
0
    internal::__fastpack5(in, out);
687
0
    break;
688
0
  case 6:
689
0
    internal::__fastpack6(in, out);
690
0
    break;
691
0
  case 7:
692
0
    internal::__fastpack7(in, out);
693
0
    break;
694
0
  case 8:
695
0
    internal::__fastpack8(in, out);
696
0
    break;
697
0
  case 9:
698
0
    internal::__fastpack9(in, out);
699
0
    break;
700
0
  case 10:
701
0
    internal::__fastpack10(in, out);
702
0
    break;
703
0
  case 11:
704
0
    internal::__fastpack11(in, out);
705
0
    break;
706
0
  case 12:
707
0
    internal::__fastpack12(in, out);
708
0
    break;
709
0
  case 13:
710
0
    internal::__fastpack13(in, out);
711
0
    break;
712
0
  case 14:
713
0
    internal::__fastpack14(in, out);
714
0
    break;
715
0
  case 15:
716
0
    internal::__fastpack15(in, out);
717
0
    break;
718
0
  case 16:
719
0
    internal::__fastpack16(in, out);
720
0
    break;
721
0
  case 17:
722
0
    internal::__fastpack17(in, out);
723
0
    break;
724
0
  case 18:
725
0
    internal::__fastpack18(in, out);
726
0
    break;
727
0
  case 19:
728
0
    internal::__fastpack19(in, out);
729
0
    break;
730
0
  case 20:
731
0
    internal::__fastpack20(in, out);
732
0
    break;
733
0
  case 21:
734
0
    internal::__fastpack21(in, out);
735
0
    break;
736
0
  case 22:
737
0
    internal::__fastpack22(in, out);
738
0
    break;
739
0
  case 23:
740
0
    internal::__fastpack23(in, out);
741
0
    break;
742
0
  case 24:
743
0
    internal::__fastpack24(in, out);
744
0
    break;
745
0
  case 25:
746
0
    internal::__fastpack25(in, out);
747
0
    break;
748
0
  case 26:
749
0
    internal::__fastpack26(in, out);
750
0
    break;
751
0
  case 27:
752
0
    internal::__fastpack27(in, out);
753
0
    break;
754
0
  case 28:
755
0
    internal::__fastpack28(in, out);
756
0
    break;
757
0
  case 29:
758
0
    internal::__fastpack29(in, out);
759
0
    break;
760
0
  case 30:
761
0
    internal::__fastpack30(in, out);
762
0
    break;
763
0
  case 31:
764
0
    internal::__fastpack31(in, out);
765
0
    break;
766
0
  case 32:
767
0
    internal::__fastpack32(in, out);
768
0
    break;
769
0
  case 33:
770
0
    internal::__fastpack33(in, out);
771
0
    break;
772
0
  case 34:
773
0
    internal::__fastpack34(in, out);
774
0
    break;
775
0
  case 35:
776
0
    internal::__fastpack35(in, out);
777
0
    break;
778
0
  case 36:
779
0
    internal::__fastpack36(in, out);
780
0
    break;
781
0
  case 37:
782
0
    internal::__fastpack37(in, out);
783
0
    break;
784
0
  case 38:
785
0
    internal::__fastpack38(in, out);
786
0
    break;
787
0
  case 39:
788
0
    internal::__fastpack39(in, out);
789
0
    break;
790
0
  case 40:
791
0
    internal::__fastpack40(in, out);
792
0
    break;
793
0
  case 41:
794
0
    internal::__fastpack41(in, out);
795
0
    break;
796
0
  case 42:
797
0
    internal::__fastpack42(in, out);
798
0
    break;
799
0
  case 43:
800
0
    internal::__fastpack43(in, out);
801
0
    break;
802
0
  case 44:
803
0
    internal::__fastpack44(in, out);
804
0
    break;
805
0
  case 45:
806
0
    internal::__fastpack45(in, out);
807
0
    break;
808
0
  case 46:
809
0
    internal::__fastpack46(in, out);
810
0
    break;
811
0
  case 47:
812
0
    internal::__fastpack47(in, out);
813
0
    break;
814
0
  case 48:
815
0
    internal::__fastpack48(in, out);
816
0
    break;
817
0
  case 49:
818
0
    internal::__fastpack49(in, out);
819
0
    break;
820
0
  case 50:
821
0
    internal::__fastpack50(in, out);
822
0
    break;
823
0
  case 51:
824
0
    internal::__fastpack51(in, out);
825
0
    break;
826
0
  case 52:
827
0
    internal::__fastpack52(in, out);
828
0
    break;
829
0
  case 53:
830
0
    internal::__fastpack53(in, out);
831
0
    break;
832
0
  case 54:
833
0
    internal::__fastpack54(in, out);
834
0
    break;
835
0
  case 55:
836
0
    internal::__fastpack55(in, out);
837
0
    break;
838
0
  case 56:
839
0
    internal::__fastpack56(in, out);
840
0
    break;
841
0
  case 57:
842
0
    internal::__fastpack57(in, out);
843
0
    break;
844
0
  case 58:
845
0
    internal::__fastpack58(in, out);
846
0
    break;
847
0
  case 59:
848
0
    internal::__fastpack59(in, out);
849
0
    break;
850
0
  case 60:
851
0
    internal::__fastpack60(in, out);
852
0
    break;
853
0
  case 61:
854
0
    internal::__fastpack61(in, out);
855
0
    break;
856
0
  case 62:
857
0
    internal::__fastpack62(in, out);
858
0
    break;
859
0
  case 63:
860
0
    internal::__fastpack63(in, out);
861
0
    break;
862
0
  case 64:
863
0
    internal::__fastpack64(in, out);
864
0
    break;
865
0
  default:
866
0
  throw std::logic_error("Invalid bit width for bitpacking");
867
0
  }
868
0
}
869
} // namespace fastpfor_lib