/** * * This code is released under the * Apache License Version 2.0 http://www.apache.org/licenses/. * (c) Daniel Lemire 2013 */ #ifndef BPACKING #define BPACKING #include "common.h" uint32_t * pack1_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack2_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack3_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack4_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack5_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack6_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack7_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack8_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack9_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack10_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack11_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack12_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack13_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack14_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack15_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack16_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack17_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack18_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack19_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack20_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack21_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack22_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack23_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack24_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack25_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack26_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack27_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack28_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack29_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack30_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack31_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack32_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack1_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack2_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack3_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack4_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack5_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack6_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack7_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack8_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack9_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack10_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack11_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack12_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack13_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack14_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack15_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack16_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack17_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack18_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack19_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack20_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack21_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack22_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack23_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack24_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack25_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack26_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack27_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack28_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack29_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack30_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack31_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack32_8( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack1_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack2_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack3_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack4_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack5_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack6_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack7_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack8_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack9_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack10_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack11_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack12_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack13_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack14_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack15_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack16_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack17_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack18_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack19_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack20_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack21_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack22_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack23_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack24_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack25_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack26_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack27_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack28_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack29_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack30_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack31_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack32_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack1_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack2_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack3_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack4_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack5_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack6_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack7_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack8_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack9_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack10_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack11_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack12_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack13_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack14_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack15_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack16_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack17_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack18_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack19_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack20_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack21_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack22_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack23_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack24_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack25_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack26_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack27_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack28_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack29_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack30_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack31_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack32_16( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack1_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack2_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack3_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack4_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack5_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack6_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack7_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack8_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack9_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack10_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack11_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack12_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack13_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack14_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack15_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack16_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack17_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack18_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack19_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack20_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack21_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack22_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack23_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack24_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack25_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack26_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack27_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack28_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack29_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack30_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack31_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * pack32_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack1_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack2_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack3_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack4_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack5_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack6_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack7_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack8_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack9_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack10_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack11_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack12_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack13_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack14_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack15_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack16_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack17_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack18_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack19_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack20_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack21_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack22_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack23_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack24_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack25_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack26_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack27_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack28_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack29_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack30_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack31_32( uint32_t base, uint32_t * in, uint32_t * out); uint32_t * unpack32_32( uint32_t base, uint32_t * in, uint32_t * out); typedef uint32_t * (*packfnc)( uint32_t, uint32_t * , uint32_t * ); static uint32_t * nullpacker( uint32_t, uint32_t * , uint32_t * out) { return out; } static uint32_t * nullunpacker8( uint32_t base, uint32_t * in , uint32_t * out) { for(int k = 0; k < 8; ++k) { out[k] = base; } return in; } static uint32_t * nullunpacker16( uint32_t base, uint32_t * in , uint32_t * out) { for(int k = 0; k < 8; ++k) { out[k] = base; } return in; } static uint32_t * nullunpacker32( uint32_t base, uint32_t * in , uint32_t * out) { for(int k = 0; k < 8; ++k) { out[k] = base; } return in; } const static packfnc unpack8[33]= {nullunpacker8,unpack1_8, unpack2_8, unpack3_8, unpack4_8, unpack5_8, unpack6_8, unpack7_8, unpack8_8, unpack9_8, unpack10_8, unpack11_8, unpack12_8, unpack13_8, unpack14_8, unpack15_8, unpack16_8, unpack17_8, unpack18_8, unpack19_8, unpack20_8, unpack21_8, unpack22_8, unpack23_8, unpack24_8, unpack25_8, unpack26_8, unpack27_8, unpack28_8, unpack29_8, unpack30_8, unpack31_8, unpack32_8 }; const static packfnc pack8[33]= {nullpacker,pack1_8, pack2_8, pack3_8, pack4_8, pack5_8, pack6_8, pack7_8, pack8_8, pack9_8, pack10_8, pack11_8, pack12_8, pack13_8, pack14_8, pack15_8, pack16_8, pack17_8, pack18_8, pack19_8, pack20_8, pack21_8, pack22_8, pack23_8, pack24_8, pack25_8, pack26_8, pack27_8, pack28_8, pack29_8, pack30_8, pack31_8, pack32_8 }; const static packfnc unpack16[33]= {nullunpacker16,unpack1_16, unpack2_16, unpack3_16, unpack4_16, unpack5_16, unpack6_16, unpack7_16, unpack8_16, unpack9_16, unpack10_16, unpack11_16, unpack12_16, unpack13_16, unpack14_16, unpack15_16, unpack16_16, unpack17_16, unpack18_16, unpack19_16, unpack20_16, unpack21_16, unpack22_16, unpack23_16, unpack24_16, unpack25_16, unpack26_16, unpack27_16, unpack28_16, unpack29_16, unpack30_16, unpack31_16, unpack32_16 }; const static packfnc pack16[33]= {nullpacker,pack1_16, pack2_16, pack3_16, pack4_16, pack5_16, pack6_16, pack7_16, pack8_16, pack9_16, pack10_16, pack11_16, pack12_16, pack13_16, pack14_16, pack15_16, pack16_16, pack17_16, pack18_16, pack19_16, pack20_16, pack21_16, pack22_16, pack23_16, pack24_16, pack25_16, pack26_16, pack27_16, pack28_16, pack29_16, pack30_16, pack31_16, pack32_16 }; const static packfnc unpack32[33]= {nullunpacker32,unpack1_32, unpack2_32, unpack3_32, unpack4_32, unpack5_32, unpack6_32, unpack7_32, unpack8_32, unpack9_32, unpack10_32, unpack11_32, unpack12_32, unpack13_32, unpack14_32, unpack15_32, unpack16_32, unpack17_32, unpack18_32, unpack19_32, unpack20_32, unpack21_32, unpack22_32, unpack23_32, unpack24_32, unpack25_32, unpack26_32, unpack27_32, unpack28_32, unpack29_32, unpack30_32, unpack31_32, unpack32_32 }; const static packfnc pack32[33]= {nullpacker,pack1_32, pack2_32, pack3_32, pack4_32, pack5_32, pack6_32, pack7_32, pack8_32, pack9_32, pack10_32, pack11_32, pack12_32, pack13_32, pack14_32, pack15_32, pack16_32, pack17_32, pack18_32, pack19_32, pack20_32, pack21_32, pack22_32, pack23_32, pack24_32, pack25_32, pack26_32, pack27_32, pack28_32, pack29_32, pack30_32, pack31_32, pack32_32 }; #endif