group varint 是一种极为高效的压缩和解压算法, 只针对 uint32整数,是一种针对特定数据类型的压缩算法, 压缩比不高, 但是速度极快。
int32整数可以通过zigZag转换为 uint32数据。
下面给了2张图 辅助大家理解 varint 和 group varint
我的这个实现版本, 压缩 400M整数数据 耗时 0.56 秒,
解压 400M整数数据 耗时 0.35 秒
下面直接上代码, 看不懂的直接联系我 !!!!!!
/******************************************************************
* Created on: 2011-4-26
* Author: yewang@taobao.com clm971910@gmail.com
*
* Desc : 提供uint32的 varint 压缩和解压功能
* 提供group varint的高效实现
*
******************************************************************/
#ifndef VARINT_H_
#define VARINT_H_
#include <stdint.h>
#include <stddef.h>
#define MAX_VARINT32_BYTES 5
#define MAX_UINT8 256
#define MAX_UINT16 65536
#define MAX_UINT24 16777216
#define MAX_UINT32 4294967296
#define GROUP_VARINT_DECODE(idx) \
valueArr[0] = ((GROUP_VARINT_TYPE_##idx *) star)[0].u0; \
valueArr[1] = ((GROUP_VARINT_TYPE_##idx *) star)[0].u1; \
valueArr[2] = ((GROUP_VARINT_TYPE_##idx *) star)[0].u2; \
valueArr[3] = ((GROUP_VARINT_TYPE_##idx *) star)[0].u3;
namespace index_lib
{
/**
* group varint 的索引表,
* 前4列分别表示 4个int压缩单元 和 第一个索引单元的距离 (byte)
* 第5列 表示的是 下一个索引单元 和 第一个索引单元的距离(byte)
*/
static const int GROUP_VARINT_IDX_ARR[256][5] =
{
/* 00 00 00 00 */ {1, 2, 3, 4, 5},
/* 00 00 00 01 */ {1, 2, 3, 4, 6},
/* 00 00 00 10 */ {1, 2, 3, 4, 7},
/* 00 00 00 11 */ {1, 2, 3, 4, 8},
/* 00 00 01 00 */ {1, 2, 3, 5, 6},
/* 00 00 01 01 */ {1, 2, 3, 5, 7},
/* 00 00 01 10 */ {1, 2, 3, 5, 8},
/* 00 00 01 11 */ {1, 2, 3, 5, 9},
/* 00 00 10 00 */ {1, 2, 3, 6, 7},
/* 00 00 10 01 */ {1, 2, 3, 6, 8},
/* 00 00 10 10 */ {1, 2, 3, 6, 9},
/* 00 00 10 11 */ {1, 2, 3, 6, 10},
/* 00 00 11 00 */ {1, 2, 3, 7, 8},
/* 00 00 11 01 */ {1, 2, 3, 7, 9},
/* 00 00 11 10 */ {1, 2, 3, 7, 10},
/* 00 00 11 11 */ {1, 2, 3, 7, 11},
/* 00 01 00 00 */ {1, 2, 4, 5, 6},
/* 00 01 00 01 */ {1, 2, 4, 5, 7},
/* 00 01 00 10 */ {1, 2, 4, 5, 8},
/* 00 01 00 11 */ {1, 2, 4, 5, 9},
/* 00 01 01 00 */ {1, 2, 4, 6, 7},
/* 00 01 01 01 */ {1, 2, 4, 6, 8},
/* 00 01 01 10 */ {1, 2, 4, 6, 9},
/* 00 01 01 11 */ {1, 2, 4, 6, 10},
/* 00 01 10 00 */ {1, 2, 4, 7, 8},
/* 00 01 10 01 */ {1, 2, 4, 7, 9},
/* 00 01 10 10 */ {1, 2, 4, 7, 10},
/* 00 01 10 11 */ {1, 2, 4, 7, 11},
/* 00 01 11 00 */ {1, 2, 4, 8, 9},
/* 00 01 11 01 */ {1, 2, 4, 8, 10},
/* 00 01 11 10 */ {1, 2, 4, 8, 11},
/* 00 01 11 11 */ {1, 2, 4, 8, 12},
/* 00 10 00 00 */ {1, 2, 5, 6, 7},
/* 00 10 00 01 */ {1, 2, 5, 6, 8},
/* 00 10 00 10 */ {1, 2, 5, 6, 9},
/* 00 10 00 11 */ {1, 2, 5, 6, 10},
/* 00 10 01 00 */ {1, 2, 5, 7, 8},
/* 00 10 01 01 */ {1, 2, 5, 7, 9},
/* 00 10 01 10 */ {1, 2, 5, 7, 10},
/* 00 10 01 11 */ {1, 2, 5, 7, 11},
/* 00 10 10 00 */ {1, 2, 5, 8, 9},
/* 00 10 10 01 */ {1, 2, 5, 8, 10},
/* 00 10 10 10 */ {1, 2, 5, 8, 11},
/* 00 10 10 11 */ {1, 2, 5, 8, 12},
/* 00 10 11 00 */ {1, 2, 5, 9, 10},
/* 00 10 11 01 */ {1, 2, 5, 9, 11},
/* 00 10 11 10 */ {1, 2, 5, 9, 12},
/* 00 10 11 11 */ {1, 2, 5, 9, 13},
/* 00 11 00 00 */ {1, 2, 6, 7, 8},
/* 00 11 00 01 */ {1, 2, 6, 7, 9},
/* 00 11 00 10 */ {1, 2, 6, 7, 10},
/* 00 11 00 11 */ {1, 2, 6, 7, 11},
/* 00 11 01 00 */ {1, 2, 6, 8, 9},
/* 00 11 01 01 */ {1, 2, 6, 8, 10},
/* 00 11 01 10 */ {1, 2, 6, 8, 11},
/* 00 11 01 11 */ {1, 2, 6, 8, 12},
/* 00 11 10 00 */ {1, 2, 6, 9, 10},
/* 00 11 10 01 */ {1, 2, 6, 9, 11},
/* 00 11 10 10 */ {1, 2, 6, 9, 12},
/* 00 11 10 11 */ {1, 2, 6, 9, 13},
/* 00 11 11 00 */ {1, 2, 6, 10, 11},
/* 00 11 11 01 */ {1, 2, 6, 10, 12},
/* 00 11 11 10 */ {1, 2, 6, 10, 13},
/* 00 11 11 11 */ {1, 2, 6, 10, 14},
/* 01 00 00 00 */ {1, 3, 4, 5, 6},
/* 01 00 00 01 */ {1, 3, 4, 5, 7},
/* 01 00 00 10 */ {1, 3, 4, 5, 8},
/* 01 00 00 11 */ {1, 3, 4, 5, 9},
/* 01 00 01 00 */ {1, 3, 4, 6, 7},
/* 01 00 01 01 */ {1, 3, 4, 6, 8},
/* 01 00 01 10 */ {1, 3, 4, 6, 9},
/* 01 00 01 11 */ {1, 3, 4, 6, 10},
/* 01 00 10 00 */ {1, 3, 4, 7, 8},
/* 01 00 10 01 */ {1, 3, 4, 7, 9},
/* 01 00 10 10 */ {1, 3, 4, 7, 10},
/* 01 00 10 11 */ {1, 3, 4, 7, 11},
/* 01 00 11 00 */ {1, 3, 4, 8, 9},
/* 01 00 11 01 */ {1, 3, 4, 8, 10},
/* 01 00 11 10 */ {1, 3, 4, 8, 11},
/* 01 00 11 11 */ {1, 3, 4, 8, 12},
/* 01 01 00 00 */ {1, 3, 5, 6, 7},
/* 01 01 00 01 */ {1, 3, 5, 6, 8},
/* 01 01 00 10 */ {1, 3, 5, 6, 9},
/* 01 01 00 11 */ {1, 3, 5, 6, 10},
/* 01 01 01 00 */ {1, 3, 5, 7, 8},
/* 01 01 01 01 */ {1, 3, 5, 7, 9},
/* 01 01 01 10 */ {1, 3, 5, 7, 10},
/* 01 01 01 11 */ {1, 3, 5, 7, 11},
/* 01 01 10 00 */ {1, 3, 5, 8, 9},
/* 01 01 10 01 */ {1, 3, 5, 8, 10},
/* 01 01 10 10 */ {1, 3, 5, 8, 11},
/* 01 01 10 11 */ {1, 3, 5, 8, 12},
/* 01 01 11 00 */ {1, 3, 5, 9, 10},
/* 01 01 11 01 */ {1, 3, 5, 9, 11},
/* 01 01 11 10 */ {1, 3, 5, 9, 12},
/* 01 01 11 11 */ {1, 3, 5, 9, 13},
/* 01 10 00 00 */ {1, 3, 6, 7, 8},
/* 01 10 00 01 */ {1, 3, 6, 7, 9},
/* 01 10 00 10 */ {1, 3, 6, 7, 10},
/* 01 10 00 11 */ {1, 3, 6, 7, 11},
/* 01 10 01 00 */ {1, 3, 6, 8, 9},
/* 01 10 01 01 */ {1, 3, 6, 8, 10},
/* 01 10 01 10 */ {1, 3, 6, 8, 11},
/* 01 10 01 11 */ {1, 3, 6, 8, 12},
/* 01 10 10 00 */ {1, 3, 6, 9, 10},
/* 01 10 10 01 */ {1, 3, 6, 9, 11},
/* 01 10 10 10 */ {1, 3, 6, 9, 12},
/* 01 10 10 11 */ {1, 3, 6, 9, 13},
/* 01 10 11 00 */ {1, 3, 6, 10, 11},
/* 01 10 11 01 */ {1, 3, 6, 10, 12},
/* 01 10 11 10 */ {1, 3, 6, 10, 13},
/* 01 10 11 11 */ {1, 3, 6, 10, 14},
/* 01 11 00 00 */ {1, 3, 7, 8, 9},
/* 01 11 00 01 */ {1, 3, 7, 8, 10},
/* 01 11 00 10 */ {1, 3, 7, 8, 11},
/* 01 11 00 11 */ {1, 3, 7, 8, 12},
/* 01 11 01 00 */ {1, 3, 7, 9, 10},
/* 01 11 01 01 */ {1, 3, 7, 9, 11},
/* 01 11 01 10 */ {1, 3, 7, 9, 12},
/* 01 11 01 11 */ {1, 3, 7, 9, 13},
/* 01 11 10 00 */ {1, 3, 7, 10, 11},
/* 01 11 10 01 */ {1, 3, 7, 10, 12},
/* 01 11 10 10 */ {1, 3, 7, 10, 13},
/* 01 11 10 11 */ {1, 3, 7, 10, 14},
/* 01 11 11 00 */ {1, 3, 7, 11, 12},
/* 01 11 11 01 */ {1, 3, 7, 11, 13},
/* 01 11 11 10 */ {1, 3, 7, 11, 14},
/* 01 11 11 11 */ {1, 3, 7, 11, 15},
/* 10 00 00 00 */ {1, 4, 5, 6, 7},
/* 10 00 00 01 */ {1, 4, 5, 6, 8},
/* 10 00 00 10 */ {1, 4, 5, 6, 9},
/* 10 00 00 11 */ {1, 4, 5, 6, 10},
/* 10 00 01 00 */ {1, 4, 5, 7, 8},
/* 10 00 01 01 */ {1, 4, 5, 7, 9},
/* 10 00 01 10 */ {1, 4, 5, 7, 10},
/* 10 00 01 11 */ {1, 4, 5, 7, 11},
/* 10 00 10 00 */ {1, 4, 5, 8, 9},
/* 10 00 10 01 */ {1, 4, 5, 8, 10},
/* 10 00 10 10 */ {1, 4, 5, 8, 11},
/* 10 00 10 11 */ {1, 4, 5, 8, 12},
/* 10 00 11 00 */ {1, 4, 5, 9, 10},
/* 10 00 11 01 */ {1, 4, 5, 9, 11},
/* 10 00 11 10 */ {1, 4, 5, 9, 12},
/* 10 00 11 11 */ {1, 4, 5, 9, 13},
/* 10 01 00 00 */ {1, 4, 6, 7, 8},
/* 10 01 00 01 */ {1, 4, 6, 7, 9},
/* 10 01 00 10 */ {1, 4, 6, 7, 10},
/* 10 01 00 11 */ {1, 4, 6, 7, 11},
/* 10 01 01 00 */ {1, 4, 6, 8, 9},
/* 10 01 01 01 */ {1, 4, 6, 8, 10},
/* 10 01 01 10 */ {1, 4, 6, 8, 11},
/* 10 01 01 11 */ {1, 4, 6, 8, 12},
/* 10 01 10 00 */ {1, 4, 6, 9, 10},
/* 10 01 10 01 */ {1, 4, 6, 9, 11},
/* 10 01 10 10 */ {1, 4, 6, 9, 12},
/* 10 01 10 11 */ {1, 4, 6, 9, 13},
/* 10 01 11 00 */ {1, 4, 6, 10, 11},
/* 10 01 11 01 */ {1, 4, 6, 10, 12},
/* 10 01 11 10 */ {1, 4, 6, 10, 13},
/* 10 01 11 11 */ {1, 4, 6, 10, 14},
/* 10 10 00 00 */ {1, 4, 7, 8, 9},
/* 10 10 00 01 */ {1, 4, 7, 8, 10},
/* 10 10 00 10 */ {1, 4, 7, 8, 11},
/* 10 10 00 11 */ {1, 4, 7, 8, 12},
/* 10 10 01 00 */ {1, 4, 7, 9, 10},
/* 10 10 01 01 */ {1, 4, 7, 9, 11},
/* 10 10 01 10 */ {1, 4, 7, 9, 12},
/* 10 10 01 11 */ {1, 4, 7, 9, 13},
/* 10 10 10 00 */ {1, 4, 7, 10, 11},
/* 10 10 10 01 */ {1, 4, 7, 10, 12},
/* 10 10 10 10 */ {1, 4, 7, 10, 13},
/* 10 10 10 11 */ {1, 4, 7, 10, 14},
/* 10 10 11 00 */ {1, 4, 7, 11, 12},
/* 10 10 11 01 */ {1, 4, 7, 11, 13},
/* 10 10 11 10 */ {1, 4, 7, 11, 14},
/* 10 10 11 11 */ {1, 4, 7, 11, 15},
/* 10 11 00 00 */ {1, 4, 8, 9, 10},
/* 10 11 00 01 */ {1, 4, 8, 9, 11},
/* 10 11 00 10 */ {1, 4, 8, 9, 12},
/* 10 11 00 11 */ {1, 4, 8, 9, 13},
/* 10 11 01 00 */ {1, 4, 8, 10, 11},
/* 10 11 01 01 */ {1, 4, 8, 10, 12},
/* 10 11 01 10 */ {1, 4, 8, 10, 13},
/* 10 11 01 11 */ {1, 4, 8, 10, 14},
/* 10 11 10 00 */ {1, 4, 8, 11, 12},
/* 10 11 10 01 */ {1, 4, 8, 11, 13},
/* 10 11 10 10 */ {1, 4, 8, 11, 14},
/* 10 11 10 11 */ {1, 4, 8, 11, 15},
/* 10 11 11 00 */ {1, 4, 8, 12, 13},
/* 10 11 11 01 */ {1, 4, 8, 12, 14},
/* 10 11 11 10 */ {1, 4, 8, 12, 15},
/* 10 11 11 11 */ {1, 4, 8, 12, 16},
/* 11 00 00 00 */ {1, 5, 6, 7, 8},
/* 11 00 00 01 */ {1, 5, 6, 7, 9},
/* 11 00 00 10 */ {1, 5, 6, 7, 10},
/* 11 00 00 11 */ {1, 5, 6, 7, 11},
/* 11 00 01 00 */ {1, 5, 6, 8, 9},
/* 11 00 01 01 */ {1, 5, 6, 8, 10},
/* 11 00 01 10 */ {1, 5, 6, 8, 11},
/* 11 00 01 11 */ {1, 5, 6, 8, 12},
/* 11 00 10 00 */ {1, 5, 6, 9, 10},
/* 11 00 10 01 */ {1, 5, 6, 9, 11},
/* 11 00 10 10 */ {1, 5, 6, 9, 12},
/* 11 00 10 11 */ {1, 5, 6, 9, 13},
/* 11 00 11 00 */ {1, 5, 6, 10, 11},
/* 11 00 11 01 */ {1, 5, 6, 10, 12},
/* 11 00 11 10 */ {1, 5, 6, 10, 13},
/* 11 00 11 11 */ {1, 5, 6, 10, 14},
/* 11 01 00 00 */ {1, 5, 7, 8, 9},
/* 11 01 00 01 */ {1, 5, 7, 8, 10},
/* 11 01 00 10 */ {1, 5, 7, 8, 11},
/* 11 01 00 11 */ {1, 5, 7, 8, 12},
/* 11 01 01 00 */ {1, 5, 7, 9, 10},
/* 11 01 01 01 */ {1, 5, 7, 9, 11},
/* 11 01 01 10 */ {1, 5, 7, 9, 12},
/* 11 01 01 11 */ {1, 5, 7, 9, 13},
/* 11 01 10 00 */ {1, 5, 7, 10, 11},
/* 11 01 10 01 */ {1, 5, 7, 10, 12},
/* 11 01 10 10 */ {1, 5, 7, 10, 13},
/* 11 01 10 11 */ {1, 5, 7, 10, 14},
/* 11 01 11 00 */ {1, 5, 7, 11, 12},
/* 11 01 11 01 */ {1, 5, 7, 11, 13},
/* 11 01 11 10 */ {1, 5, 7, 11, 14},
/* 11 01 11 11 */ {1, 5, 7, 11, 15},
/* 11 10 00 00 */ {1, 5, 8, 9, 10},
/* 11 10 00 01 */ {1, 5, 8, 9, 11},
/* 11 10 00 10 */ {1, 5, 8, 9, 12},
/* 11 10 00 11 */ {1, 5, 8, 9, 13},
/* 11 10 01 00 */ {1, 5, 8, 10, 11},
/* 11 10 01 01 */ {1, 5, 8, 10, 12},
/* 11 10 01 10 */ {1, 5, 8, 10, 13},
/* 11 10 01 11 */ {1, 5, 8, 10, 14},
/* 11 10 10 00 */ {1, 5, 8, 11, 12},
/* 11 10 10 01 */ {1, 5, 8, 11, 13},
/* 11 10 10 10 */ {1, 5, 8, 11, 14},
/* 11 10 10 11 */ {1, 5, 8, 11, 15},
/* 11 10 11 00 */ {1, 5, 8, 12, 13},
/* 11 10 11 01 */ {1, 5, 8, 12, 14},
/* 11 10 11 10 */ {1, 5, 8, 12, 15},
/* 11 10 11 11 */ {1, 5, 8, 12, 16},
/* 11 11 00 00 */ {1, 5, 9, 10, 11},
/* 11 11 00 01 */ {1, 5, 9, 10, 12},
/* 11 11 00 10 */ {1, 5, 9, 10, 13},
/* 11 11 00 11 */ {1, 5, 9, 10, 14},
/* 11 11 01 00 */ {1, 5, 9, 11, 12},
/* 11 11 01 01 */ {1, 5, 9, 11, 13},
/* 11 11 01 10 */ {1, 5, 9, 11, 14},
/* 11 11 01 11 */ {1, 5, 9, 11, 15},
/* 11 11 10 00 */ {1, 5, 9, 12, 13},
/* 11 11 10 01 */ {1, 5, 9, 12, 14},
/* 11 11 10 10 */ {1, 5, 9, 12, 15},
/* 11 11 10 11 */ {1, 5, 9, 12, 16},
/* 11 11 11 00 */ {1, 5, 9, 13, 14},
/* 11 11 11 01 */ {1, 5, 9, 13, 15},
/* 11 11 11 10 */ {1, 5, 9, 13, 16},
/* 11 11 11 11 */ {1, 5, 9, 13, 17}
};
#pragma pack(1)
struct GROUP_VARINT_TYPE_0 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_1 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_2 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_3 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_4 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_5 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_6 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_7 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_8 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_9 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_10 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_11 { uint32_t u0:8; uint32_t u1:8; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_12 { uint32_t u0:8; uint32_t u1:8; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_13 { uint32_t u0:8; uint32_t u1:8; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_14 { uint32_t u0:8; uint32_t u1:8; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_15 { uint32_t u0:8; uint32_t u1:8; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_16 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_17 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_18 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_19 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_20 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_21 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_22 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_23 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_24 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_25 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_26 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_27 { uint32_t u0:8; uint32_t u1:16; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_28 { uint32_t u0:8; uint32_t u1:16; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_29 { uint32_t u0:8; uint32_t u1:16; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_30 { uint32_t u0:8; uint32_t u1:16; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_31 { uint32_t u0:8; uint32_t u1:16; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_32 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_33 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_34 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_35 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_36 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_37 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_38 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_39 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_40 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_41 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_42 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_43 { uint32_t u0:8; uint32_t u1:24; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_44 { uint32_t u0:8; uint32_t u1:24; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_45 { uint32_t u0:8; uint32_t u1:24; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_46 { uint32_t u0:8; uint32_t u1:24; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_47 { uint32_t u0:8; uint32_t u1:24; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_48 { uint32_t u0:8; uint32_t u1; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_49 { uint32_t u0:8; uint32_t u1; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_50 { uint32_t u0:8; uint32_t u1; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_51 { uint32_t u0:8; uint32_t u1; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_52 { uint32_t u0:8; uint32_t u1; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_53 { uint32_t u0:8; uint32_t u1; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_54 { uint32_t u0:8; uint32_t u1; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_55 { uint32_t u0:8; uint32_t u1; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_56 { uint32_t u0:8; uint32_t u1; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_57 { uint32_t u0:8; uint32_t u1; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_58 { uint32_t u0:8; uint32_t u1; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_59 { uint32_t u0:8; uint32_t u1; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_60 { uint32_t u0:8; uint32_t u1; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_61 { uint32_t u0:8; uint32_t u1; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_62 { uint32_t u0:8; uint32_t u1; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_63 { uint32_t u0:8; uint32_t u1; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_64 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_65 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_66 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_67 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_68 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_69 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_70 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_71 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_72 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_73 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_74 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_75 { uint32_t u0:16; uint32_t u1:8; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_76 { uint32_t u0:16; uint32_t u1:8; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_77 { uint32_t u0:16; uint32_t u1:8; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_78 { uint32_t u0:16; uint32_t u1:8; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_79 { uint32_t u0:16; uint32_t u1:8; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_80 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_81 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_82 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_83 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_84 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_85 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_86 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_87 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_88 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_89 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_90 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_91 { uint32_t u0:16; uint32_t u1:16; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_92 { uint32_t u0:16; uint32_t u1:16; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_93 { uint32_t u0:16; uint32_t u1:16; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_94 { uint32_t u0:16; uint32_t u1:16; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_95 { uint32_t u0:16; uint32_t u1:16; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_96 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_97 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_98 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_99 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_100 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_101 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_102 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_103 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_104 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_105 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_106 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_107 { uint32_t u0:16; uint32_t u1:24; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_108 { uint32_t u0:16; uint32_t u1:24; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_109 { uint32_t u0:16; uint32_t u1:24; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_110 { uint32_t u0:16; uint32_t u1:24; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_111 { uint32_t u0:16; uint32_t u1:24; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_112 { uint32_t u0:16; uint32_t u1; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_113 { uint32_t u0:16; uint32_t u1; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_114 { uint32_t u0:16; uint32_t u1; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_115 { uint32_t u0:16; uint32_t u1; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_116 { uint32_t u0:16; uint32_t u1; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_117 { uint32_t u0:16; uint32_t u1; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_118 { uint32_t u0:16; uint32_t u1; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_119 { uint32_t u0:16; uint32_t u1; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_120 { uint32_t u0:16; uint32_t u1; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_121 { uint32_t u0:16; uint32_t u1; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_122 { uint32_t u0:16; uint32_t u1; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_123 { uint32_t u0:16; uint32_t u1; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_124 { uint32_t u0:16; uint32_t u1; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_125 { uint32_t u0:16; uint32_t u1; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_126 { uint32_t u0:16; uint32_t u1; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_127 { uint32_t u0:16; uint32_t u1; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_128 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_129 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_130 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_131 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_132 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_133 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_134 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_135 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_136 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_137 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_138 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_139 { uint32_t u0:24; uint32_t u1:8; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_140 { uint32_t u0:24; uint32_t u1:8; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_141 { uint32_t u0:24; uint32_t u1:8; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_142 { uint32_t u0:24; uint32_t u1:8; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_143 { uint32_t u0:24; uint32_t u1:8; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_144 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_145 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_146 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_147 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_148 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_149 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_150 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_151 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_152 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_153 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_154 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_155 { uint32_t u0:24; uint32_t u1:16; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_156 { uint32_t u0:24; uint32_t u1:16; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_157 { uint32_t u0:24; uint32_t u1:16; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_158 { uint32_t u0:24; uint32_t u1:16; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_159 { uint32_t u0:24; uint32_t u1:16; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_160 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_161 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_162 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_163 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_164 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_165 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_166 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_167 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_168 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_169 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_170 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_171 { uint32_t u0:24; uint32_t u1:24; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_172 { uint32_t u0:24; uint32_t u1:24; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_173 { uint32_t u0:24; uint32_t u1:24; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_174 { uint32_t u0:24; uint32_t u1:24; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_175 { uint32_t u0:24; uint32_t u1:24; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_176 { uint32_t u0:24; uint32_t u1; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_177 { uint32_t u0:24; uint32_t u1; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_178 { uint32_t u0:24; uint32_t u1; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_179 { uint32_t u0:24; uint32_t u1; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_180 { uint32_t u0:24; uint32_t u1; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_181 { uint32_t u0:24; uint32_t u1; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_182 { uint32_t u0:24; uint32_t u1; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_183 { uint32_t u0:24; uint32_t u1; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_184 { uint32_t u0:24; uint32_t u1; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_185 { uint32_t u0:24; uint32_t u1; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_186 { uint32_t u0:24; uint32_t u1; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_187 { uint32_t u0:24; uint32_t u1; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_188 { uint32_t u0:24; uint32_t u1; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_189 { uint32_t u0:24; uint32_t u1; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_190 { uint32_t u0:24; uint32_t u1; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_191 { uint32_t u0:24; uint32_t u1; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_192 { uint32_t u0; uint32_t u1:8; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_193 { uint32_t u0; uint32_t u1:8; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_194 { uint32_t u0; uint32_t u1:8; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_195 { uint32_t u0; uint32_t u1:8; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_196 { uint32_t u0; uint32_t u1:8; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_197 { uint32_t u0; uint32_t u1:8; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_198 { uint32_t u0; uint32_t u1:8; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_199 { uint32_t u0; uint32_t u1:8; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_200 { uint32_t u0; uint32_t u1:8; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_201 { uint32_t u0; uint32_t u1:8; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_202 { uint32_t u0; uint32_t u1:8; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_203 { uint32_t u0; uint32_t u1:8; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_204 { uint32_t u0; uint32_t u1:8; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_205 { uint32_t u0; uint32_t u1:8; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_206 { uint32_t u0; uint32_t u1:8; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_207 { uint32_t u0; uint32_t u1:8; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_208 { uint32_t u0; uint32_t u1:16; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_209 { uint32_t u0; uint32_t u1:16; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_210 { uint32_t u0; uint32_t u1:16; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_211 { uint32_t u0; uint32_t u1:16; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_212 { uint32_t u0; uint32_t u1:16; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_213 { uint32_t u0; uint32_t u1:16; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_214 { uint32_t u0; uint32_t u1:16; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_215 { uint32_t u0; uint32_t u1:16; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_216 { uint32_t u0; uint32_t u1:16; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_217 { uint32_t u0; uint32_t u1:16; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_218 { uint32_t u0; uint32_t u1:16; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_219 { uint32_t u0; uint32_t u1:16; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_220 { uint32_t u0; uint32_t u1:16; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_221 { uint32_t u0; uint32_t u1:16; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_222 { uint32_t u0; uint32_t u1:16; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_223 { uint32_t u0; uint32_t u1:16; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_224 { uint32_t u0; uint32_t u1:24; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_225 { uint32_t u0; uint32_t u1:24; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_226 { uint32_t u0; uint32_t u1:24; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_227 { uint32_t u0; uint32_t u1:24; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_228 { uint32_t u0; uint32_t u1:24; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_229 { uint32_t u0; uint32_t u1:24; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_230 { uint32_t u0; uint32_t u1:24; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_231 { uint32_t u0; uint32_t u1:24; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_232 { uint32_t u0; uint32_t u1:24; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_233 { uint32_t u0; uint32_t u1:24; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_234 { uint32_t u0; uint32_t u1:24; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_235 { uint32_t u0; uint32_t u1:24; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_236 { uint32_t u0; uint32_t u1:24; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_237 { uint32_t u0; uint32_t u1:24; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_238 { uint32_t u0; uint32_t u1:24; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_239 { uint32_t u0; uint32_t u1:24; uint32_t u2; uint32_t u3; };
struct GROUP_VARINT_TYPE_240 { uint32_t u0; uint32_t u1; uint32_t u2:8; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_241 { uint32_t u0; uint32_t u1; uint32_t u2:8; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_242 { uint32_t u0; uint32_t u1; uint32_t u2:8; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_243 { uint32_t u0; uint32_t u1; uint32_t u2:8; uint32_t u3; };
struct GROUP_VARINT_TYPE_244 { uint32_t u0; uint32_t u1; uint32_t u2:16; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_245 { uint32_t u0; uint32_t u1; uint32_t u2:16; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_246 { uint32_t u0; uint32_t u1; uint32_t u2:16; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_247 { uint32_t u0; uint32_t u1; uint32_t u2:16; uint32_t u3; };
struct GROUP_VARINT_TYPE_248 { uint32_t u0; uint32_t u1; uint32_t u2:24; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_249 { uint32_t u0; uint32_t u1; uint32_t u2:24; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_250 { uint32_t u0; uint32_t u1; uint32_t u2:24; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_251 { uint32_t u0; uint32_t u1; uint32_t u2:24; uint32_t u3; };
struct GROUP_VARINT_TYPE_252 { uint32_t u0; uint32_t u1; uint32_t u2; uint32_t u3:8; };
struct GROUP_VARINT_TYPE_253 { uint32_t u0; uint32_t u1; uint32_t u2; uint32_t u3:16; };
struct GROUP_VARINT_TYPE_254 { uint32_t u0; uint32_t u1; uint32_t u2; uint32_t u3:24; };
struct GROUP_VARINT_TYPE_255 { uint32_t u0; uint32_t u1; uint32_t u2; uint32_t u3; };
#pragma pack()
/**
* 将一个uint32整数 做 varint 编码 输出到 buf中
*
* @param value 输出的值
* @param target 输出的缓冲 , 需确保buf 空间是够用的
*
* @return target中下一个可用的字节位置
*/
inline uint8_t *
varint_encode_uint32 ( uint32_t value, uint8_t * target)
{
target[0] = (uint8_t)(value | 0x80);
if ( value >= (1 << 7) )
{
target[1] = (uint8_t)( (value >> 7) | 0x80 );
if ( value >= (1 << 14) )
{
target[2] = (uint8_t)( (value >> 14) | 0x80 );
if ( value >= (1 << 21) )
{
target[3] = (uint8_t)((value >> 21) | 0x80);
if ( value >= (1 << 28) )
{
target[4] = (uint8_t)(value >> 28);
return target + 5;
}
else
{
target[3] &= 0x7F;
return target + 4;
}
}
else
{
target[2] &= 0x7F;
return target + 3;
}
}
else
{
target[1] &= 0x7F;
return target + 2;
}
}
else
{
target[0] &= 0x7F;
return target + 1;
}
}
/**
* 从buf中 将 varint压缩编码的值 还原读取出来
* 需要确保输入的buf 从 输出的指针到结尾 超过 5个byte, 避免出现core
* 函数内部不做边界检查
*
* @param buffer 输入的buf
* @param value 输出的值
*
* @return target中下一个可读的字节位置
*/
inline const uint8_t *
varint_decode_uint32(const uint8_t * buffer, uint32_t * value)
{
const uint8_t * ptr = buffer;
uint32_t i = 0;
uint32_t b;
uint32_t result;
b = *(ptr++); result = (b & 0x7F) ; if (!(b & 0x80)) goto done;
b = *(ptr++); result |= (b & 0x7F) << 7; if (!(b & 0x80)) goto done;
b = *(ptr++); result |= (b & 0x7F) << 14; if (!(b & 0x80)) goto done;
b = *(ptr++); result |= (b & 0x7F) << 21; if (!(b & 0x80)) goto done;
b = *(ptr++); result |= b << 28; if (!(b & 0x80)) goto done;
for (; i < MAX_VARINT32_BYTES; i++)
{
b = *(ptr++); if (!(b & 0x80)) goto done;
}
return NULL;
done:
*value = result;
return ptr;
}
/**
* 对整数数组进行 group varint编码, 一次处理4个整数
*
* @param valueArr 无符号整数的数组 元素个数, 必须是4的倍数。 多余不处理
* @param target 用于输出的buf . 需要确够大 , 4个整数最多用 17个byte
*
* @return target下一个可写byte
*/
inline uint8_t *
group_varint_encode_uint32 ( uint32_t * valueArr, uint8_t * target)
{
uint8_t len1 = 0; // 第 1 个数字用的 字节数
uint8_t len2 = 0; // 第 2 个数字用的 字节数
uint8_t len3 = 0; // 第 3 个数字用的 字节数
uint8_t len4 = 0; // 第 4 个数字用的 字节数
uint8_t len = 0; // 4个数字总共用的 字节数
uint8_t * buf = target + 1;
if ( valueArr[0] < MAX_UINT8 )
{
len1 = 1;
buf[0] = (uint8_t) valueArr[0];
}
else if ( valueArr[0] < MAX_UINT16 )
{
len1 = 2;
((uint16_t *)(buf))[0] = (uint16_t) valueArr[0];
}
else if ( valueArr[0] < MAX_UINT24 )
{
len1 = 3;
((uint32_t *)(buf))[0] = ( valueArr[0] );
} else {
len1 = 4;
((uint32_t *)(buf))[0] = valueArr[0];
}
len = len1;
/* 处理第二个数字 */
if ( valueArr[1] < MAX_UINT8 )
{
len2 = 1;
buf[len] = (uint8_t) valueArr[1];
}
else if ( valueArr[1] < MAX_UINT16 )
{
len2 = 2;
((uint16_t *)(buf + len))[0] = (uint16_t) valueArr[1];
}
else if ( valueArr[1] < MAX_UINT24 )
{
len2 = 3;
((uint32_t *)(buf + len))[0] = ( valueArr[1] );
} else {
len2 = 4;
((uint32_t *)(buf + len))[0] = valueArr[1];
}
len = len + len2;
/* 处理第3个数字 */
if ( valueArr[2] < MAX_UINT8 )
{
len3 = 1;
buf[len] = (uint8_t) valueArr[2];
}
else if ( valueArr[2] < MAX_UINT16 )
{
len3 = 2;
((uint16_t *)(buf + len))[0] = (uint16_t) valueArr[2];
}
else if ( valueArr[2] < MAX_UINT24 )
{
len3 = 3;
((uint32_t *)(buf + len))[0] = ( valueArr[2] );
} else {
len3 = 4;
((uint32_t *)(buf + len))[0] = valueArr[2];
}
len = len + len3;
/* 处理第4个数字 */
if ( valueArr[3] < MAX_UINT8 )
{
len4 = 1;
buf[len] = (uint8_t) valueArr[3];
}
else if ( valueArr[3] < MAX_UINT16 )
{
len4 = 2;
((uint16_t *)(buf + len))[0] = (uint16_t) valueArr[3];
}
else if ( valueArr[3] < MAX_UINT24 )
{
len4 = 3;
((uint32_t *)(buf + len))[0] = ( valueArr[3] );
} else {
len4 = 4;
((uint32_t *)(buf + len))[0] = valueArr[3];
}
len = len + len4;
/* 处理第一个索引字节 */
target[0] = ((len1 - 1) << 6) | ((len2 - 1) << 4) | ((len3 - 1) << 2) | (len4 - 1);
return buf + len;
}
/**
* 对输入的buf进行解压, 每次一定解压出4个整数
*
* @param buf 输入的buf
* @param valueArr 输出的数组, 需要预先开辟为4个整数的数组
*
* @return target下一个可读byte
*/
inline const uint8_t *
group_varint_decode_uint32 ( const uint8_t * buf, uint32_t * valueArr)
{
const uint8_t * star = buf + 1;
switch ( buf[0] )
{
case 0 : GROUP_VARINT_DECODE(0); break;
case 1 : GROUP_VARINT_DECODE(1); break;
case 2 : GROUP_VARINT_DECODE(2); break;
case 3 : GROUP_VARINT_DECODE(3); break;
case 4 : GROUP_VARINT_DECODE(4); break;
case 5 : GROUP_VARINT_DECODE(5); break;
case 6 : GROUP_VARINT_DECODE(6); break;
case 7 : GROUP_VARINT_DECODE(7); break;
case 8 : GROUP_VARINT_DECODE(8); break;
case 9 : GROUP_VARINT_DECODE(9); break;
case 10 : GROUP_VARINT_DECODE(10); break;
case 11 : GROUP_VARINT_DECODE(11); break;
case 12 : GROUP_VARINT_DECODE(12); break;
case 13 : GROUP_VARINT_DECODE(13); break;
case 14 : GROUP_VARINT_DECODE(14); break;
case 15 : GROUP_VARINT_DECODE(15); break;
case 16 : GROUP_VARINT_DECODE(16); break;
case 17 : GROUP_VARINT_DECODE(17); break;
case 18 : GROUP_VARINT_DECODE(18); break;
case 19 : GROUP_VARINT_DECODE(19); break;
case 20 : GROUP_VARINT_DECODE(20); break;
case 21 : GROUP_VARINT_DECODE(21); break;
case 22 : GROUP_VARINT_DECODE(22); break;
case 23 : GROUP_VARINT_DECODE(23); break;
case 24 : GROUP_VARINT_DECODE(24); break;
case 25 : GROUP_VARINT_DECODE(25); break;
case 26 : GROUP_VARINT_DECODE(26); break;
case 27 : GROUP_VARINT_DECODE(27); break;
case 28 : GROUP_VARINT_DECODE(28); break;
case 29 : GROUP_VARINT_DECODE(29); break;
case 30 : GROUP_VARINT_DECODE(30); break;
case 31 : GROUP_VARINT_DECODE(31); break;
case 32 : GROUP_VARINT_DECODE(32); break;
case 33 : GROUP_VARINT_DECODE(33); break;
case 34 : GROUP_VARINT_DECODE(34); break;
case 35 : GROUP_VARINT_DECODE(35); break;
case 36 : GROUP_VARINT_DECODE(36); break;
case 37 : GROUP_VARINT_DECODE(37); break;
case 38 : GROUP_VARINT_DECODE(38); break;
case 39 : GROUP_VARINT_DECODE(39); break;
case 40 : GROUP_VARINT_DECODE(40); break;
case 41 : GROUP_VARINT_DECODE(41); break;
case 42 : GROUP_VARINT_DECODE(42); break;
case 43 : GROUP_VARINT_DECODE(43); break;
case 44 : GROUP_VARINT_DECODE(44); break;
case 45 : GROUP_VARINT_DECODE(45); break;
case 46 : GROUP_VARINT_DECODE(46); break;
case 47 : GROUP_VARINT_DECODE(47); break;
case 48 : GROUP_VARINT_DECODE(48); break;
case 49 : GROUP_VARINT_DECODE(49); break;
case 50 : GROUP_VARINT_DECODE(50); break;
case 51 : GROUP_VARINT_DECODE(51); break;
case 52 : GROUP_VARINT_DECODE(52); break;
case 53 : GROUP_VARINT_DECODE(53); break;
case 54 : GROUP_VARINT_DECODE(54); break;
case 55 : GROUP_VARINT_DECODE(55); break;
case 56 : GROUP_VARINT_DECODE(56); break;
case 57 : GROUP_VARINT_DECODE(57); break;
case 58 : GROUP_VARINT_DECODE(58); break;
case 59 : GROUP_VARINT_DECODE(59); break;
case 60 : GROUP_VARINT_DECODE(60); break;
case 61 : GROUP_VARINT_DECODE(61); break;
case 62 : GROUP_VARINT_DECODE(62); break;
case 63 : GROUP_VARINT_DECODE(63); break;
case 64 : GROUP_VARINT_DECODE(64); break;
case 65 : GROUP_VARINT_DECODE(65); break;
case 66 : GROUP_VARINT_DECODE(66); break;
case 67 : GROUP_VARINT_DECODE(67); break;
case 68 : GROUP_VARINT_DECODE(68); break;
case 69 : GROUP_VARINT_DECODE(69); break;
case 70 : GROUP_VARINT_DECODE(70); break;
case 71 : GROUP_VARINT_DECODE(71); break;
case 72 : GROUP_VARINT_DECODE(72); break;
case 73 : GROUP_VARINT_DECODE(73); break;
case 74 : GROUP_VARINT_DECODE(74); break;
case 75 : GROUP_VARINT_DECODE(75); break;
case 76 : GROUP_VARINT_DECODE(76); break;
case 77 : GROUP_VARINT_DECODE(77); break;
case 78 : GROUP_VARINT_DECODE(78); break;
case 79 : GROUP_VARINT_DECODE(79); break;
case 80 : GROUP_VARINT_DECODE(80); break;
case 81 : GROUP_VARINT_DECODE(81); break;
case 82 : GROUP_VARINT_DECODE(82); break;
case 83 : GROUP_VARINT_DECODE(83); break;
case 84 : GROUP_VARINT_DECODE(84); break;
case 85 : GROUP_VARINT_DECODE(85); break;
case 86 : GROUP_VARINT_DECODE(86); break;
case 87 : GROUP_VARINT_DECODE(87); break;
case 88 : GROUP_VARINT_DECODE(88); break;
case 89 : GROUP_VARINT_DECODE(89); break;
case 90 : GROUP_VARINT_DECODE(90); break;
case 91 : GROUP_VARINT_DECODE(91); break;
case 92 : GROUP_VARINT_DECODE(92); break;
case 93 : GROUP_VARINT_DECODE(93); break;
case 94 : GROUP_VARINT_DECODE(94); break;
case 95 : GROUP_VARINT_DECODE(95); break;
case 96 : GROUP_VARINT_DECODE(96); break;
case 97 : GROUP_VARINT_DECODE(97); break;
case 98 : GROUP_VARINT_DECODE(98); break;
case 99 : GROUP_VARINT_DECODE(99); break;
case 100 : GROUP_VARINT_DECODE(100); break;
case 101 : GROUP_VARINT_DECODE(101); break;
case 102 : GROUP_VARINT_DECODE(102); break;
case 103 : GROUP_VARINT_DECODE(103); break;
case 104 : GROUP_VARINT_DECODE(104); break;
case 105 : GROUP_VARINT_DECODE(105); break;
case 106 : GROUP_VARINT_DECODE(106); break;
case 107 : GROUP_VARINT_DECODE(107); break;
case 108 : GROUP_VARINT_DECODE(108); break;
case 109 : GROUP_VARINT_DECODE(109); break;
case 110 : GROUP_VARINT_DECODE(110); break;
case 111 : GROUP_VARINT_DECODE(111); break;
case 112 : GROUP_VARINT_DECODE(112); break;
case 113 : GROUP_VARINT_DECODE(113); break;
case 114 : GROUP_VARINT_DECODE(114); break;
case 115 : GROUP_VARINT_DECODE(115); break;
case 116 : GROUP_VARINT_DECODE(116); break;
case 117 : GROUP_VARINT_DECODE(117); break;
case 118 : GROUP_VARINT_DECODE(118); break;
case 119 : GROUP_VARINT_DECODE(119); break;
case 120 : GROUP_VARINT_DECODE(120); break;
case 121 : GROUP_VARINT_DECODE(121); break;
case 122 : GROUP_VARINT_DECODE(122); break;
case 123 : GROUP_VARINT_DECODE(123); break;
case 124 : GROUP_VARINT_DECODE(124); break;
case 125 : GROUP_VARINT_DECODE(125); break;
case 126 : GROUP_VARINT_DECODE(126); break;
case 127 : GROUP_VARINT_DECODE(127); break;
case 128 : GROUP_VARINT_DECODE(128); break;
case 129 : GROUP_VARINT_DECODE(129); break;
case 130 : GROUP_VARINT_DECODE(130); break;
case 131 : GROUP_VARINT_DECODE(131); break;
case 132 : GROUP_VARINT_DECODE(132); break;
case 133 : GROUP_VARINT_DECODE(133); break;
case 134 : GROUP_VARINT_DECODE(134); break;
case 135 : GROUP_VARINT_DECODE(135); break;
case 136 : GROUP_VARINT_DECODE(136); break;
case 137 : GROUP_VARINT_DECODE(137); break;
case 138 : GROUP_VARINT_DECODE(138); break;
case 139 : GROUP_VARINT_DECODE(139); break;
case 140 : GROUP_VARINT_DECODE(140); break;
case 141 : GROUP_VARINT_DECODE(141); break;
case 142 : GROUP_VARINT_DECODE(142); break;
case 143 : GROUP_VARINT_DECODE(143); break;
case 144 : GROUP_VARINT_DECODE(144); break;
case 145 : GROUP_VARINT_DECODE(145); break;
case 146 : GROUP_VARINT_DECODE(146); break;
case 147 : GROUP_VARINT_DECODE(147); break;
case 148 : GROUP_VARINT_DECODE(148); break;
case 149 : GROUP_VARINT_DECODE(149); break;
case 150 : GROUP_VARINT_DECODE(150); break;
case 151 : GROUP_VARINT_DECODE(151); break;
case 152 : GROUP_VARINT_DECODE(152); break;
case 153 : GROUP_VARINT_DECODE(153); break;
case 154 : GROUP_VARINT_DECODE(154); break;
case 155 : GROUP_VARINT_DECODE(155); break;
case 156 : GROUP_VARINT_DECODE(156); break;
case 157 : GROUP_VARINT_DECODE(157); break;
case 158 : GROUP_VARINT_DECODE(158); break;
case 159 : GROUP_VARINT_DECODE(159); break;
case 160 : GROUP_VARINT_DECODE(160); break;
case 161 : GROUP_VARINT_DECODE(161); break;
case 162 : GROUP_VARINT_DECODE(162); break;
case 163 : GROUP_VARINT_DECODE(163); break;
case 164 : GROUP_VARINT_DECODE(164); break;
case 165 : GROUP_VARINT_DECODE(165); break;
case 166 : GROUP_VARINT_DECODE(166); break;
case 167 : GROUP_VARINT_DECODE(167); break;
case 168 : GROUP_VARINT_DECODE(168); break;
case 169 : GROUP_VARINT_DECODE(169); break;
case 170 : GROUP_VARINT_DECODE(170); break;
case 171 : GROUP_VARINT_DECODE(171); break;
case 172 : GROUP_VARINT_DECODE(172); break;
case 173 : GROUP_VARINT_DECODE(173); break;
case 174 : GROUP_VARINT_DECODE(174); break;
case 175 : GROUP_VARINT_DECODE(175); break;
case 176 : GROUP_VARINT_DECODE(176); break;
case 177 : GROUP_VARINT_DECODE(177); break;
case 178 : GROUP_VARINT_DECODE(178); break;
case 179 : GROUP_VARINT_DECODE(179); break;
case 180 : GROUP_VARINT_DECODE(180); break;
case 181 : GROUP_VARINT_DECODE(181); break;
case 182 : GROUP_VARINT_DECODE(182); break;
case 183 : GROUP_VARINT_DECODE(183); break;
case 184 : GROUP_VARINT_DECODE(184); break;
case 185 : GROUP_VARINT_DECODE(185); break;
case 186 : GROUP_VARINT_DECODE(186); break;
case 187 : GROUP_VARINT_DECODE(187); break;
case 188 : GROUP_VARINT_DECODE(188); break;
case 189 : GROUP_VARINT_DECODE(189); break;
case 190 : GROUP_VARINT_DECODE(190); break;
case 191 : GROUP_VARINT_DECODE(191); break;
case 192 : GROUP_VARINT_DECODE(192); break;
case 193 : GROUP_VARINT_DECODE(193); break;
case 194 : GROUP_VARINT_DECODE(194); break;
case 195 : GROUP_VARINT_DECODE(195); break;
case 196 : GROUP_VARINT_DECODE(196); break;
case 197 : GROUP_VARINT_DECODE(197); break;
case 198 : GROUP_VARINT_DECODE(198); break;
case 199 : GROUP_VARINT_DECODE(199); break;
case 200 : GROUP_VARINT_DECODE(200); break;
case 201 : GROUP_VARINT_DECODE(201); break;
case 202 : GROUP_VARINT_DECODE(202); break;
case 203 : GROUP_VARINT_DECODE(203); break;
case 204 : GROUP_VARINT_DECODE(204); break;
case 205 : GROUP_VARINT_DECODE(205); break;
case 206 : GROUP_VARINT_DECODE(206); break;
case 207 : GROUP_VARINT_DECODE(207); break;
case 208 : GROUP_VARINT_DECODE(208); break;
case 209 : GROUP_VARINT_DECODE(209); break;
case 210 : GROUP_VARINT_DECODE(210); break;
case 211 : GROUP_VARINT_DECODE(211); break;
case 212 : GROUP_VARINT_DECODE(212); break;
case 213 : GROUP_VARINT_DECODE(213); break;
case 214 : GROUP_VARINT_DECODE(214); break;
case 215 : GROUP_VARINT_DECODE(215); break;
case 216 : GROUP_VARINT_DECODE(216); break;
case 217 : GROUP_VARINT_DECODE(217); break;
case 218 : GROUP_VARINT_DECODE(218); break;
case 219 : GROUP_VARINT_DECODE(219); break;
case 220 : GROUP_VARINT_DECODE(220); break;
case 221 : GROUP_VARINT_DECODE(221); break;
case 222 : GROUP_VARINT_DECODE(222); break;
case 223 : GROUP_VARINT_DECODE(223); break;
case 224 : GROUP_VARINT_DECODE(224); break;
case 225 : GROUP_VARINT_DECODE(225); break;
case 226 : GROUP_VARINT_DECODE(226); break;
case 227 : GROUP_VARINT_DECODE(227); break;
case 228 : GROUP_VARINT_DECODE(228); break;
case 229 : GROUP_VARINT_DECODE(229); break;
case 230 : GROUP_VARINT_DECODE(230); break;
case 231 : GROUP_VARINT_DECODE(231); break;
case 232 : GROUP_VARINT_DECODE(232); break;
case 233 : GROUP_VARINT_DECODE(233); break;
case 234 : GROUP_VARINT_DECODE(234); break;
case 235 : GROUP_VARINT_DECODE(235); break;
case 236 : GROUP_VARINT_DECODE(236); break;
case 237 : GROUP_VARINT_DECODE(237); break;
case 238 : GROUP_VARINT_DECODE(238); break;
case 239 : GROUP_VARINT_DECODE(239); break;
case 240 : GROUP_VARINT_DECODE(240); break;
case 241 : GROUP_VARINT_DECODE(241); break;
case 242 : GROUP_VARINT_DECODE(242); break;
case 243 : GROUP_VARINT_DECODE(243); break;
case 244 : GROUP_VARINT_DECODE(244); break;
case 245 : GROUP_VARINT_DECODE(245); break;
case 246 : GROUP_VARINT_DECODE(246); break;
case 247 : GROUP_VARINT_DECODE(247); break;
case 248 : GROUP_VARINT_DECODE(248); break;
case 249 : GROUP_VARINT_DECODE(249); break;
case 250 : GROUP_VARINT_DECODE(250); break;
case 251 : GROUP_VARINT_DECODE(251); break;
case 252 : GROUP_VARINT_DECODE(252); break;
case 253 : GROUP_VARINT_DECODE(253); break;
case 254 : GROUP_VARINT_DECODE(254); break;
case 255 : GROUP_VARINT_DECODE(255); break;
}
return buf + GROUP_VARINT_IDX_ARR[ buf[0] ][4];
}
/**
* 对整数进行 zigZag编码, 有符号数 转换为 无符号数
*
* @param n 有符号数
*
* @return 无符号数
*/
inline uint32_t zigZag_encode32(int32_t n) { return (n << 1) ^ (n >> 31); }
inline uint64_t zigZag_encode64(int64_t n) { return (n << 1) ^ (n >> 63); }
/**
* 对整数进行 zigZag 解码, 无符号数 转换为 有符号数
*
* @param n 无符号数
*
* @return 有符号数
*/
inline int32_t zigZag_decode32(uint32_t n) { return (n >> 1) ^ -(int32_t)(n & 1); }
inline int64_t zigZag_decode64(uint64_t n) { return (n >> 1) ^ -(int64_t)(n & 1); }
}
#endif /* VARINT_H_ */

