Skip to content

Instantly share code, notes, and snippets.

@bit-hack
Last active June 22, 2018 14:49
Show Gist options
  • Save bit-hack/bf5113e86579924536b6d30b9918355e to your computer and use it in GitHub Desktop.
Save bit-hack/bf5113e86579924536b6d30b9918355e to your computer and use it in GitHub Desktop.
256 variable length prefix codes
struct prefix_code_t {
uint8_t index; // length sorted index
uint8_t size; // number of bits in prefix code
uint32_t code; // bit encoded prefix code
};
static const prefix_code_t codes[] =
{ 0x0fd, 0x12, 0x0003ffff }, // 00000000000000111111111111111111
{ 0x0ff, 0x13, 0x0005ffff }, // 00000000000001011111111111111111
{ 0x0fe, 0x13, 0x0001ffff }, // 00000000000000011111111111111111
{ 0x0fc, 0x11, 0x0000ffff }, // 00000000000000001111111111111111
{ 0x0fb, 0x11, 0x00017fff }, // 00000000000000010111111111111111
{ 0x0fa, 0x11, 0x00007fff }, // 00000000000000000111111111111111
{ 0x0f9, 0x11, 0x0001bfff }, // 00000000000000011011111111111111
{ 0x0f8, 0x11, 0x0000bfff }, // 00000000000000001011111111111111
{ 0x0f5, 0x10, 0x00003fff }, // 00000000000000000011111111111111
{ 0x0f4, 0x10, 0x0000dfff }, // 00000000000000001101111111111111
{ 0x0f3, 0x10, 0x00005fff }, // 00000000000000000101111111111111
{ 0x0ed, 0x0f, 0x00001fff }, // 00000000000000000001111111111111
{ 0x0f1, 0x10, 0x0000efff }, // 00000000000000001110111111111111
{ 0x0f6, 0x11, 0x00016fff }, // 00000000000000010110111111111111
{ 0x0f7, 0x11, 0x00006fff }, // 00000000000000000110111111111111
{ 0x0f0, 0x10, 0x0000afff }, // 00000000000000001010111111111111
{ 0x0ef, 0x10, 0x00002fff }, // 00000000000000000010111111111111
{ 0x0ee, 0x10, 0x0000cfff }, // 00000000000000001100111111111111
{ 0x0f2, 0x10, 0x00004fff }, // 00000000000000000100111111111111
{ 0x0ec, 0x0f, 0x00000fff }, // 00000000000000000000111111111111
{ 0x0db, 0x0d, 0x000017ff }, // 00000000000000000001011111111111
{ 0x0da, 0x0d, 0x000007ff }, // 00000000000000000000011111111111
{ 0x0e9, 0x0e, 0x00003bff }, // 00000000000000000011101111111111
{ 0x0e8, 0x0e, 0x00001bff }, // 00000000000000000001101111111111
{ 0x0e7, 0x0e, 0x00002bff }, // 00000000000000000010101111111111
{ 0x0e6, 0x0e, 0x00000bff }, // 00000000000000000000101111111111
{ 0x0d9, 0x0d, 0x000013ff }, // 00000000000000000001001111111111
{ 0x0d8, 0x0d, 0x000003ff }, // 00000000000000000000001111111111
{ 0x0e3, 0x0e, 0x00003dff }, // 00000000000000000011110111111111
{ 0x0e2, 0x0e, 0x00001dff }, // 00000000000000000001110111111111
{ 0x0e1, 0x0e, 0x00002dff }, // 00000000000000000010110111111111
{ 0x0e0, 0x0e, 0x00000dff }, // 00000000000000000000110111111111
{ 0x0d7, 0x0d, 0x000015ff }, // 00000000000000000001010111111111
{ 0x0de, 0x0e, 0x000025ff }, // 00000000000000000010010111111111
{ 0x0dd, 0x0e, 0x000005ff }, // 00000000000000000000010111111111
{ 0x0bf, 0x0c, 0x000009ff }, // 00000000000000000000100111111111
{ 0x0be, 0x0c, 0x000001ff }, // 00000000000000000000000111111111
{ 0x0bd, 0x0c, 0x00000eff }, // 00000000000000000000111011111111
{ 0x0bc, 0x0c, 0x000006ff }, // 00000000000000000000011011111111
{ 0x0a6, 0x0b, 0x000002ff }, // 00000000000000000000001011111111
{ 0x0d1, 0x0d, 0x00001cff }, // 00000000000000000001110011111111
{ 0x0d0, 0x0d, 0x00000cff }, // 00000000000000000000110011111111
{ 0x0b2, 0x0c, 0x000004ff }, // 00000000000000000000010011111111
{ 0x0a5, 0x0b, 0x000000ff }, // 00000000000000000000000011111111
{ 0x0cd, 0x0d, 0x00001f7f }, // 00000000000000000001111101111111
{ 0x0e4, 0x0e, 0x00002f7f }, // 00000000000000000010111101111111
{ 0x0df, 0x0e, 0x00000f7f }, // 00000000000000000000111101111111
{ 0x0cc, 0x0d, 0x0000177f }, // 00000000000000000001011101111111
{ 0x0eb, 0x0e, 0x0000277f }, // 00000000000000000010011101111111
{ 0x0ea, 0x0e, 0x0000077f }, // 00000000000000000000011101111111
{ 0x0b9, 0x0c, 0x00000b7f }, // 00000000000000000000101101111111
{ 0x0b8, 0x0c, 0x0000037f }, // 00000000000000000000001101111111
{ 0x0a4, 0x0b, 0x0000057f }, // 00000000000000000000010101111111
{ 0x0a8, 0x0b, 0x0000017f }, // 00000000000000000000000101111111
{ 0x071, 0x09, 0x0000007f }, // 00000000000000000000000001111111
{ 0x0c8, 0x0d, 0x00001fbf }, // 00000000000000000001111110111111
{ 0x0cf, 0x0d, 0x00000fbf }, // 00000000000000000000111110111111
{ 0x0b6, 0x0c, 0x000007bf }, // 00000000000000000000011110111111
{ 0x0ba, 0x0c, 0x00000bbf }, // 00000000000000000000101110111111
{ 0x0bb, 0x0c, 0x000003bf }, // 00000000000000000000001110111111
{ 0x08d, 0x0a, 0x000001bf }, // 00000000000000000000000110111111
{ 0x070, 0x09, 0x000000bf }, // 00000000000000000000000010111111
{ 0x06f, 0x09, 0x0000013f }, // 00000000000000000000000100111111
{ 0x06e, 0x09, 0x0000003f }, // 00000000000000000000000000111111
{ 0x0c3, 0x0d, 0x00001fdf }, // 00000000000000000001111111011111
{ 0x0c2, 0x0d, 0x00000fdf }, // 00000000000000000000111111011111
{ 0x0c1, 0x0d, 0x000017df }, // 00000000000000000001011111011111
{ 0x0c0, 0x0d, 0x000007df }, // 00000000000000000000011111011111
{ 0x0a1, 0x0b, 0x000003df }, // 00000000000000000000001111011111
{ 0x0b5, 0x0c, 0x00000ddf }, // 00000000000000000000110111011111
{ 0x0c7, 0x0d, 0x000015df }, // 00000000000000000001010111011111
{ 0x0d6, 0x0d, 0x000005df }, // 00000000000000000000010111011111
{ 0x090, 0x0b, 0x000001df }, // 00000000000000000000000111011111
{ 0x06d, 0x09, 0x000000df }, // 00000000000000000000000011011111
{ 0x0a3, 0x0b, 0x0000075f }, // 00000000000000000000011101011111
{ 0x09a, 0x0b, 0x0000035f }, // 00000000000000000000001101011111
{ 0x099, 0x0b, 0x0000055f }, // 00000000000000000000010101011111
{ 0x091, 0x0b, 0x0000015f }, // 00000000000000000000000101011111
{ 0x0ae, 0x0b, 0x0000065f }, // 00000000000000000000011001011111
{ 0x0ad, 0x0b, 0x0000025f }, // 00000000000000000000001001011111
{ 0x0ac, 0x0b, 0x0000045f }, // 00000000000000000000010001011111
{ 0x0ab, 0x0b, 0x0000005f }, // 00000000000000000000000001011111
{ 0x040, 0x08, 0x0000009f }, // 00000000000000000000000010011111
{ 0x05c, 0x09, 0x0000011f }, // 00000000000000000000000100011111
{ 0x061, 0x09, 0x0000001f }, // 00000000000000000000000000011111
{ 0x0e5, 0x0e, 0x00003fef }, // 00000000000000000011111111101111
{ 0x0dc, 0x0e, 0x00001fef }, // 00000000000000000001111111101111
{ 0x0d3, 0x0d, 0x00000fef }, // 00000000000000000000111111101111
{ 0x0d2, 0x0d, 0x000017ef }, // 00000000000000000001011111101111
{ 0x0ce, 0x0d, 0x000007ef }, // 00000000000000000000011111101111
{ 0x0b4, 0x0c, 0x00000bef }, // 00000000000000000000101111101111
{ 0x0b3, 0x0c, 0x000003ef }, // 00000000000000000000001111101111
{ 0x0cb, 0x0d, 0x00001def }, // 00000000000000000001110111101111
{ 0x0ca, 0x0d, 0x00000def }, // 00000000000000000000110111101111
{ 0x0b7, 0x0c, 0x000005ef }, // 00000000000000000000010111101111
{ 0x0a0, 0x0b, 0x000001ef }, // 00000000000000000000000111101111
{ 0x088, 0x0a, 0x000002ef }, // 00000000000000000000001011101111
{ 0x087, 0x0a, 0x000000ef }, // 00000000000000000000000011101111
{ 0x086, 0x0a, 0x0000036f }, // 00000000000000000000001101101111
{ 0x09c, 0x0b, 0x0000056f }, // 00000000000000000000010101101111
{ 0x09b, 0x0b, 0x0000016f }, // 00000000000000000000000101101111
{ 0x062, 0x09, 0x0000006f }, // 00000000000000000000000001101111
{ 0x038, 0x08, 0x000000af }, // 00000000000000000000000010101111
{ 0x042, 0x08, 0x0000002f }, // 00000000000000000000000000101111
{ 0x097, 0x0b, 0x000007cf }, // 00000000000000000000011111001111
{ 0x096, 0x0b, 0x000003cf }, // 00000000000000000000001111001111
{ 0x095, 0x0b, 0x000005cf }, // 00000000000000000000010111001111
{ 0x094, 0x0b, 0x000001cf }, // 00000000000000000000000111001111
{ 0x085, 0x0a, 0x000002cf }, // 00000000000000000000001011001111
{ 0x084, 0x0a, 0x000000cf }, // 00000000000000000000000011001111
{ 0x051, 0x09, 0x0000014f }, // 00000000000000000000000101001111
{ 0x052, 0x09, 0x0000004f }, // 00000000000000000000000001001111
{ 0x05a, 0x09, 0x0000018f }, // 00000000000000000000000110001111
{ 0x056, 0x09, 0x0000008f }, // 00000000000000000000000010001111
{ 0x03f, 0x08, 0x0000000f }, // 00000000000000000000000000001111
{ 0x0c6, 0x0d, 0x00001ff7 }, // 00000000000000000001111111110111
{ 0x0c5, 0x0d, 0x00000ff7 }, // 00000000000000000000111111110111
{ 0x0c4, 0x0d, 0x000017f7 }, // 00000000000000000001011111110111
{ 0x0d5, 0x0d, 0x000007f7 }, // 00000000000000000000011111110111
{ 0x09f, 0x0b, 0x000003f7 }, // 00000000000000000000001111110111
{ 0x083, 0x0a, 0x000001f7 }, // 00000000000000000000000111110111
{ 0x060, 0x09, 0x000000f7 }, // 00000000000000000000000011110111
{ 0x082, 0x0a, 0x00000377 }, // 00000000000000000000001101110111
{ 0x092, 0x0b, 0x00000577 }, // 00000000000000000000010101110111
{ 0x09e, 0x0b, 0x00000177 }, // 00000000000000000000000101110111
{ 0x064, 0x09, 0x00000077 }, // 00000000000000000000000001110111
{ 0x081, 0x0a, 0x000003b7 }, // 00000000000000000000001110110111
{ 0x080, 0x0a, 0x000001b7 }, // 00000000000000000000000110110111
{ 0x05f, 0x09, 0x000000b7 }, // 00000000000000000000000010110111
{ 0x03b, 0x08, 0x00000037 }, // 00000000000000000000000000110111
{ 0x018, 0x07, 0x00000057 }, // 00000000000000000000000001010111
{ 0x033, 0x07, 0x00000017 }, // 00000000000000000000000000010111
{ 0x066, 0x09, 0x000001e7 }, // 00000000000000000000000111100111
{ 0x065, 0x09, 0x000000e7 }, // 00000000000000000000000011100111
{ 0x04b, 0x08, 0x00000067 }, // 00000000000000000000000001100111
{ 0x04a, 0x08, 0x000000a7 }, // 00000000000000000000000010100111
{ 0x03e, 0x08, 0x00000027 }, // 00000000000000000000000000100111
{ 0x03d, 0x08, 0x000000c7 }, // 00000000000000000000000011000111
{ 0x044, 0x08, 0x00000047 }, // 00000000000000000000000001000111
{ 0x02a, 0x07, 0x00000007 }, // 00000000000000000000000000000111
{ 0x093, 0x0b, 0x000007fb }, // 00000000000000000000011111111011
{ 0x08f, 0x0b, 0x000003fb }, // 00000000000000000000001111111011
{ 0x07f, 0x0a, 0x000001fb }, // 00000000000000000000000111111011
{ 0x05d, 0x09, 0x000000fb }, // 00000000000000000000000011111011
{ 0x0a2, 0x0b, 0x0000077b }, // 00000000000000000000011101111011
{ 0x0a9, 0x0b, 0x0000037b }, // 00000000000000000000001101111011
{ 0x07e, 0x0a, 0x0000017b }, // 00000000000000000000000101111011
{ 0x06c, 0x09, 0x0000007b }, // 00000000000000000000000001111011
{ 0x07d, 0x0a, 0x000003bb }, // 00000000000000000000001110111011
{ 0x07c, 0x0a, 0x000001bb }, // 00000000000000000000000110111011
{ 0x069, 0x09, 0x000000bb }, // 00000000000000000000000010111011
{ 0x050, 0x08, 0x0000003b }, // 00000000000000000000000000111011
{ 0x067, 0x09, 0x000001db }, // 00000000000000000000000111011011
{ 0x07b, 0x0a, 0x000002db }, // 00000000000000000000001011011011
{ 0x07a, 0x0a, 0x000000db }, // 00000000000000000000000011011011
{ 0x04f, 0x08, 0x0000005b }, // 00000000000000000000000001011011
{ 0x022, 0x07, 0x0000001b }, // 00000000000000000000000000011011
{ 0x04d, 0x08, 0x000000eb }, // 00000000000000000000000011101011
{ 0x04c, 0x08, 0x0000006b }, // 00000000000000000000000001101011
{ 0x032, 0x07, 0x0000002b }, // 00000000000000000000000000101011
{ 0x031, 0x07, 0x0000004b }, // 00000000000000000000000001001011
{ 0x030, 0x07, 0x0000000b }, // 00000000000000000000000000001011
{ 0x079, 0x0a, 0x000003f3 }, // 00000000000000000000001111110011
{ 0x078, 0x0a, 0x000001f3 }, // 00000000000000000000000111110011
{ 0x05b, 0x09, 0x000000f3 }, // 00000000000000000000000011110011
{ 0x043, 0x08, 0x00000073 }, // 00000000000000000000000001110011
{ 0x02f, 0x07, 0x00000033 }, // 00000000000000000000000000110011
{ 0x02e, 0x07, 0x00000053 }, // 00000000000000000000000001010011
{ 0x02d, 0x07, 0x00000013 }, // 00000000000000000000000000010011
{ 0x00c, 0x06, 0x00000023 }, // 00000000000000000000000000100011
{ 0x02c, 0x07, 0x00000043 }, // 00000000000000000000000001000011
{ 0x02b, 0x07, 0x00000003 }, // 00000000000000000000000000000011
{ 0x0d4, 0x0d, 0x00001ffd }, // 00000000000000000001111111111101
{ 0x0c9, 0x0d, 0x00000ffd }, // 00000000000000000000111111111101
{ 0x0af, 0x0c, 0x000007fd }, // 00000000000000000000011111111101
{ 0x098, 0x0b, 0x000003fd }, // 00000000000000000000001111111101
{ 0x077, 0x0a, 0x000001fd }, // 00000000000000000000000111111101
{ 0x076, 0x0a, 0x000002fd }, // 00000000000000000000001011111101
{ 0x075, 0x0a, 0x000000fd }, // 00000000000000000000000011111101
{ 0x053, 0x09, 0x0000017d }, // 00000000000000000000000101111101
{ 0x068, 0x09, 0x0000007d }, // 00000000000000000000000001111101
{ 0x074, 0x0a, 0x000003bd }, // 00000000000000000000001110111101
{ 0x073, 0x0a, 0x000001bd }, // 00000000000000000000000110111101
{ 0x063, 0x09, 0x000000bd }, // 00000000000000000000000010111101
{ 0x06b, 0x09, 0x0000013d }, // 00000000000000000000000100111101
{ 0x06a, 0x09, 0x0000003d }, // 00000000000000000000000000111101
{ 0x072, 0x0a, 0x000003dd }, // 00000000000000000000001111011101
{ 0x08e, 0x0a, 0x000001dd }, // 00000000000000000000000111011101
{ 0x05e, 0x09, 0x000000dd }, // 00000000000000000000000011011101
{ 0x049, 0x08, 0x0000005d }, // 00000000000000000000000001011101
{ 0x029, 0x07, 0x0000001d }, // 00000000000000000000000000011101
{ 0x015, 0x06, 0x0000002d }, // 00000000000000000000000000101101
{ 0x046, 0x08, 0x000000cd }, // 00000000000000000000000011001101
{ 0x045, 0x08, 0x0000004d }, // 00000000000000000000000001001101
{ 0x028, 0x07, 0x0000000d }, // 00000000000000000000000000001101
{ 0x048, 0x08, 0x000000f5 }, // 00000000000000000000000011110101
{ 0x041, 0x08, 0x00000075 }, // 00000000000000000000000001110101
{ 0x027, 0x07, 0x00000035 }, // 00000000000000000000000000110101
{ 0x009, 0x06, 0x00000015 }, // 00000000000000000000000000010101
{ 0x021, 0x07, 0x00000065 }, // 00000000000000000000000001100101
{ 0x020, 0x07, 0x00000025 }, // 00000000000000000000000000100101
{ 0x00d, 0x06, 0x00000005 }, // 00000000000000000000000000000101
{ 0x047, 0x08, 0x000000f9 }, // 00000000000000000000000011111001
{ 0x03c, 0x08, 0x00000079 }, // 00000000000000000000000001111001
{ 0x017, 0x07, 0x00000039 }, // 00000000000000000000000000111001
{ 0x014, 0x06, 0x00000019 }, // 00000000000000000000000000011001
{ 0x013, 0x06, 0x00000029 }, // 00000000000000000000000000101001
{ 0x012, 0x06, 0x00000009 }, // 00000000000000000000000000001001
{ 0x00f, 0x06, 0x00000031 }, // 00000000000000000000000000110001
{ 0x00e, 0x06, 0x00000011 }, // 00000000000000000000000000010001
{ 0x034, 0x07, 0x00000061 }, // 00000000000000000000000001100001
{ 0x039, 0x08, 0x000000a1 }, // 00000000000000000000000010100001
{ 0x04e, 0x08, 0x00000021 }, // 00000000000000000000000000100001
{ 0x008, 0x06, 0x00000001 }, // 00000000000000000000000000000001
{ 0x0b0, 0x0c, 0x00000ffe }, // 00000000000000000000111111111110
{ 0x0b1, 0x0c, 0x000007fe }, // 00000000000000000000011111111110
{ 0x09d, 0x0b, 0x000003fe }, // 00000000000000000000001111111110
{ 0x08c, 0x0a, 0x000001fe }, // 00000000000000000000000111111110
{ 0x0aa, 0x0b, 0x000006fe }, // 00000000000000000000011011111110
{ 0x0a7, 0x0b, 0x000002fe }, // 00000000000000000000001011111110
{ 0x08b, 0x0a, 0x000000fe }, // 00000000000000000000000011111110
{ 0x059, 0x09, 0x0000017e }, // 00000000000000000000000101111110
{ 0x058, 0x09, 0x0000007e }, // 00000000000000000000000001111110
{ 0x057, 0x09, 0x000001be }, // 00000000000000000000000110111110
{ 0x08a, 0x0a, 0x000002be }, // 00000000000000000000001010111110
{ 0x089, 0x0a, 0x000000be }, // 00000000000000000000000010111110
{ 0x03a, 0x08, 0x0000003e }, // 00000000000000000000000000111110
{ 0x026, 0x07, 0x0000005e }, // 00000000000000000000000001011110
{ 0x025, 0x07, 0x0000001e }, // 00000000000000000000000000011110
{ 0x024, 0x07, 0x0000006e }, // 00000000000000000000000001101110
{ 0x023, 0x07, 0x0000002e }, // 00000000000000000000000000101110
{ 0x00a, 0x06, 0x0000000e }, // 00000000000000000000000000001110
{ 0x055, 0x09, 0x000001f6 }, // 00000000000000000000000111110110
{ 0x054, 0x09, 0x000000f6 }, // 00000000000000000000000011110110
{ 0x037, 0x08, 0x00000076 }, // 00000000000000000000000001110110
{ 0x01f, 0x07, 0x00000036 }, // 00000000000000000000000000110110
{ 0x01e, 0x07, 0x00000056 }, // 00000000000000000000000001010110
{ 0x01d, 0x07, 0x00000016 }, // 00000000000000000000000000010110
{ 0x011, 0x06, 0x00000026 }, // 00000000000000000000000000100110
{ 0x010, 0x06, 0x00000006 }, // 00000000000000000000000000000110
{ 0x01c, 0x07, 0x0000007a }, // 00000000000000000000000001111010
{ 0x01b, 0x07, 0x0000003a }, // 00000000000000000000000000111010
{ 0x01a, 0x07, 0x0000005a }, // 00000000000000000000000001011010
{ 0x019, 0x07, 0x0000001a }, // 00000000000000000000000000011010
{ 0x007, 0x05, 0x0000000a }, // 00000000000000000000000000001010
{ 0x006, 0x05, 0x00000012 }, // 00000000000000000000000000010010
{ 0x005, 0x05, 0x00000002 }, // 00000000000000000000000000000010
{ 0x00b, 0x06, 0x0000003c }, // 00000000000000000000000000111100
{ 0x036, 0x08, 0x000000dc }, // 00000000000000000000000011011100
{ 0x035, 0x08, 0x0000005c }, // 00000000000000000000000001011100
{ 0x016, 0x07, 0x0000001c }, // 00000000000000000000000000011100
{ 0x004, 0x05, 0x0000000c }, // 00000000000000000000000000001100
{ 0x003, 0x05, 0x00000014 }, // 00000000000000000000000000010100
{ 0x002, 0x05, 0x00000004 }, // 00000000000000000000000000000100
{ 0x001, 0x04, 0x00000008 }, // 00000000000000000000000000001000
{ 0x000, 0x04, 0x00000000 }, // 00000000000000000000000000000000
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment