aios/storage/indexlib/index/common/numeric_compress/GroupVarint.h (2,465 lines of code) (raw):

/* * Copyright 2014-present Alibaba Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <memory> #include <stddef.h> #include <stdint.h> #include "indexlib/index/common/numeric_compress/VbyteCompressor.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) \ dest[0] = ((GROUP_VARINT_TYPE_##idx*)buf)[0].u0; \ dest[1] = ((GROUP_VARINT_TYPE_##idx*)buf)[0].u1; \ dest[2] = ((GROUP_VARINT_TYPE_##idx*)buf)[0].u2; \ dest[3] = ((GROUP_VARINT_TYPE_##idx*)buf)[0].u3; namespace indexlib::index { #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() class GroupVarint { public: GroupVarint(); ~GroupVarint(); public: static const int32_t GROUP_VARINT_IDX_ARR[256][5]; static const uint8_t BytesOffset[4]; static const uint32_t BLOCK_SIZE = 128; static const uint32_t CompressItemLen = 4; static const uint32_t CompressItemLenBitNum = 2; static const uint32_t CompressItemLenBitMask = 3; public: inline static std::pair<Status, uint32_t> Compress(uint8_t* dest, size_t destLen, const uint32_t* src, size_t srcLen) { uint8_t* destPtr = dest; size_t destLeftLen = destLen; size_t blockSize = (srcLen - 1) / BLOCK_SIZE + 1; for (size_t i = 0, offset = 0; i < blockSize; ++i) { size_t left = srcLen - offset; size_t len = (left <= BLOCK_SIZE) ? left : BLOCK_SIZE; auto [status, num] = CompressBlock(destPtr, destLeftLen, src + offset, len); RETURN2_IF_STATUS_ERROR(status, 0, "compress block fail"); offset += BLOCK_SIZE; destPtr += num; destLeftLen -= num; } return std::make_pair(Status::OK(), destPtr - dest); } inline static std::pair<Status, uint32_t> CompressBlock(uint8_t* dest, size_t destLen, const uint32_t* src, size_t srcLen) { uint32_t itemCount = srcLen >> CompressItemLenBitNum; uint8_t* destPtr = dest; uint32_t offset = 0; for (uint32_t i = 0; i < itemCount; ++i) { uint32_t num = CompressItem(destPtr, src + offset); destPtr += num; offset += CompressItemLen; destLen -= num; } uint32_t leftLen = srcLen & CompressItemLenBitMask; if (leftLen) { for (uint32_t i = 0; i < leftLen; ++i) { auto [status, num] = indexlib::index::VByteCompressor::EncodeVInt32(destPtr, destLen, src[offset + i]); RETURN2_IF_STATUS_ERROR(status, 0, "encode vint32 fail"); destPtr += num; destLen -= num; } } return std::make_pair(Status::OK(), destPtr - dest); } inline static uint32_t CompressItem(uint8_t* dest, const uint32_t* src) { uint8_t len = 0; uint8_t* buf = dest + 1; uint8_t pos = 0; uint8_t itemLen = 0; for (size_t i = 0; i < CompressItemLen; ++i) { if (src[i] < MAX_UINT8) { itemLen = 1; buf[len] = (uint8_t)src[i]; } else if (src[i] < MAX_UINT16) { itemLen = 2; ((uint16_t*)(buf + len))[0] = (uint16_t)src[i]; } else if (src[i] < MAX_UINT24) { itemLen = 3; ((uint32_t*)(buf + len))[0] = src[i]; } else { itemLen = 4; ((uint32_t*)(buf + len))[0] = src[i]; } len += itemLen; pos |= (itemLen - 1) << BytesOffset[i]; } dest[0] = pos; return len + 1; } inline static std::pair<Status, uint32_t> Decompress(uint32_t* dest, size_t destLen, uint8_t* src, size_t srcLen, uint32_t& compressLen) { uint32_t itemCount = srcLen >> CompressItemLenBitNum; uint32_t* destPtr = dest; uint32_t offset = 0; for (uint32_t i = 0; i < itemCount; ++i) { uint32_t num = DecompressItem(destPtr, src + offset); offset += num; destPtr += CompressItemLen; destLen -= CompressItemLen; } uint32_t leftLen = srcLen & CompressItemLenBitMask; if (leftLen) { uint8_t* srcPtr = src + offset; uint32_t len = 5 * leftLen; // max vint len for (uint32_t i = 0; i < leftLen; ++i) { auto [status, val] = indexlib::index::VByteCompressor::DecodeVInt32(srcPtr, len); RETURN2_IF_STATUS_ERROR(status, 0, "decode vint32 fail"); *destPtr = val; destPtr++; destLen--; } offset = srcPtr - src; } compressLen = offset; return std::make_pair(Status::OK(), destPtr - dest); } inline static std::pair<Status, uint32_t> Decompress(uint32_t* dest, size_t destLen, uint8_t* src, size_t srcLen) { uint32_t itemCount = srcLen >> CompressItemLenBitNum; uint32_t* destPtr = dest; uint32_t offset = 0; for (uint32_t i = 0; i < itemCount; ++i) { uint32_t num = DecompressItem(destPtr, src + offset); offset += num; destPtr += CompressItemLen; destLen -= CompressItemLen; } uint32_t leftLen = srcLen & CompressItemLenBitMask; if (leftLen) { uint8_t* srcPtr = src + offset; uint32_t len = 5 * leftLen; // max vint len for (uint32_t i = 0; i < leftLen; ++i) { auto [status, val] = indexlib::index::VByteCompressor::DecodeVInt32(srcPtr, len); RETURN2_IF_STATUS_ERROR(status, 0, "decode vint32 fail"); *destPtr = val; destPtr++; destLen--; } } return std::make_pair(Status::OK(), destPtr - dest); } inline static uint32_t DecompressItem(uint32_t* dest, uint8_t* src) { const uint8_t* buf = src + 1; switch (src[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 GROUP_VARINT_IDX_ARR[src[0]][4]; } private: AUTIL_LOG_DECLARE(); }; } // namespace indexlib::index