Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
f638ebbb
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f638ebbb
编写于
8月 04, 2016
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Probably better [#METR-22173].
上级
4922eac9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
55 addition
and
272 deletion
+55
-272
dbms/include/DB/IO/VarInt.h
dbms/include/DB/IO/VarInt.h
+55
-272
未找到文件。
dbms/include/DB/IO/VarInt.h
浏览文件 @
f638ebbb
...
...
@@ -105,81 +105,17 @@ inline void readVarInt(Int16 & x, ReadBuffer & istr)
inline
void
writeVarUInt
(
UInt64
x
,
std
::
ostream
&
ostr
)
{
char
buf
[
9
];
buf
[
0
]
=
static_cast
<
UInt8
>
(
x
|
0x80
);
if
(
x
>=
(
1ULL
<<
7
))
{
buf
[
1
]
=
static_cast
<
UInt8
>
((
x
>>
7
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
14
))
{
buf
[
2
]
=
static_cast
<
UInt8
>
((
x
>>
14
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
21
))
{
buf
[
3
]
=
static_cast
<
UInt8
>
((
x
>>
21
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
28
))
{
buf
[
4
]
=
static_cast
<
UInt8
>
((
x
>>
28
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
35
))
{
buf
[
5
]
=
static_cast
<
UInt8
>
((
x
>>
35
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
42
))
{
buf
[
6
]
=
static_cast
<
UInt8
>
((
x
>>
42
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
49
))
{
buf
[
7
]
=
static_cast
<
UInt8
>
((
x
>>
49
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
56
))
{
buf
[
8
]
=
static_cast
<
UInt8
>
(
x
>>
56
);
ostr
.
write
(
buf
,
9
);
}
else
{
buf
[
7
]
&=
0x7F
;
ostr
.
write
(
buf
,
8
);
}
}
else
{
buf
[
6
]
&=
0x7F
;
ostr
.
write
(
buf
,
7
);
}
}
else
{
buf
[
5
]
&=
0x7F
;
ostr
.
write
(
buf
,
6
);
}
}
else
{
buf
[
4
]
&=
0x7F
;
ostr
.
write
(
buf
,
5
);
}
}
else
{
buf
[
3
]
&=
0x7F
;
ostr
.
write
(
buf
,
4
);
}
}
else
{
buf
[
2
]
&=
0x7F
;
ostr
.
write
(
buf
,
3
);
}
}
else
{
buf
[
1
]
&=
0x7F
;
ostr
.
write
(
buf
,
2
);
}
}
else
for
(
size_t
i
=
0
;
i
<
9
;
++
i
)
{
buf
[
0
]
&=
0x7F
;
ostr
.
write
(
buf
,
1
);
uint8_t
byte
=
x
&
0x7F
;
if
(
byte
>
0x7F
)
x
|=
0x80
;
ostr
.
put
(
x
);
x
>>=
7
;
if
(
!
x
)
return
;
}
}
...
...
@@ -197,9 +133,9 @@ inline void readVarUInt(UInt64 & x, ReadBuffer & istr)
if
(
istr
.
eof
())
throwReadAfterEOF
();
in
t
byte
=
*
istr
.
position
();
uint64_
t
byte
=
*
istr
.
position
();
++
istr
.
position
();
x
|=
(
static_cast
<
uint64_t
>
(
byte
)
&
0x7F
)
<<
(
7
*
i
);
x
|=
(
byte
&
0x7F
)
<<
(
7
*
i
);
if
(
!
(
byte
&
0x80
))
return
;
...
...
@@ -209,187 +145,54 @@ inline void readVarUInt(UInt64 & x, ReadBuffer & istr)
inline
void
readVarUInt
(
UInt64
&
x
,
std
::
istream
&
istr
)
{
int
byte
;
byte
=
istr
.
get
();
x
=
static_cast
<
UInt64
>
(
byte
)
&
0x7F
;
if
(
byte
&
0x80
)
x
=
0
;
for
(
size_t
i
=
0
;
i
<
9
;
++
i
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
7
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
14
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
21
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
28
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
35
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
42
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
(
static_cast
<
UInt64
>
(
byte
)
&
0x7F
)
<<
49
;
if
(
byte
&
0x80
)
{
byte
=
istr
.
get
();
x
|=
static_cast
<
UInt64
>
(
byte
)
<<
56
;
}
}
}
}
}
}
}
uint64_t
byte
=
istr
.
get
();
x
|=
(
byte
&
0x7F
)
<<
(
7
*
i
);
if
(
!
(
byte
&
0x80
))
return
;
}
}
inline
void
writeVarUInt
(
UInt64
x
,
WriteBuffer
&
ostr
)
{
char
buf
[
9
];
buf
[
0
]
=
static_cast
<
UInt8
>
(
x
|
0x80
);
if
(
x
>=
(
1ULL
<<
7
))
{
buf
[
1
]
=
static_cast
<
UInt8
>
((
x
>>
7
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
14
))
{
buf
[
2
]
=
static_cast
<
UInt8
>
((
x
>>
14
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
21
))
{
buf
[
3
]
=
static_cast
<
UInt8
>
((
x
>>
21
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
28
))
{
buf
[
4
]
=
static_cast
<
UInt8
>
((
x
>>
28
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
35
))
{
buf
[
5
]
=
static_cast
<
UInt8
>
((
x
>>
35
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
42
))
{
buf
[
6
]
=
static_cast
<
UInt8
>
((
x
>>
42
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
49
))
{
buf
[
7
]
=
static_cast
<
UInt8
>
((
x
>>
49
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
56
))
{
buf
[
8
]
=
static_cast
<
UInt8
>
(
x
>>
56
);
ostr
.
write
(
buf
,
9
);
}
else
{
buf
[
7
]
&=
0x7F
;
ostr
.
write
(
buf
,
8
);
}
}
else
{
buf
[
6
]
&=
0x7F
;
ostr
.
write
(
buf
,
7
);
}
}
else
{
buf
[
5
]
&=
0x7F
;
ostr
.
write
(
buf
,
6
);
}
}
else
{
buf
[
4
]
&=
0x7F
;
ostr
.
write
(
buf
,
5
);
}
}
else
{
buf
[
3
]
&=
0x7F
;
ostr
.
write
(
buf
,
4
);
}
}
else
{
buf
[
2
]
&=
0x7F
;
ostr
.
write
(
buf
,
3
);
}
}
else
{
buf
[
1
]
&=
0x7F
;
ostr
.
write
(
buf
,
2
);
}
}
else
for
(
size_t
i
=
0
;
i
<
9
;
++
i
)
{
buf
[
0
]
&=
0x7F
;
ostr
.
write
(
buf
,
1
);
uint8_t
byte
=
x
&
0x7F
;
if
(
byte
>
0x7F
)
x
|=
0x80
;
ostr
.
nextIfAtEnd
();
*
ostr
.
position
()
=
x
;
++
ostr
.
position
();
x
>>=
7
;
if
(
!
x
)
return
;
}
}
inline
char
*
writeVarUInt
(
UInt64
x
,
char
*
ostr
)
{
*
ostr
=
static_cast
<
UInt8
>
(
x
|
0x80
);
if
(
x
>=
(
1ULL
<<
7
))
for
(
size_t
i
=
0
;
i
<
9
;
++
i
)
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
7
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
14
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
14
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
21
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
21
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
28
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
28
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
35
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
35
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
42
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
42
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
49
))
{
*++
ostr
=
static_cast
<
UInt8
>
((
x
>>
49
)
|
0x80
);
if
(
x
>=
(
1ULL
<<
56
))
{
*++
ostr
=
static_cast
<
UInt8
>
(
x
>>
56
);
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
}
else
*
ostr
&=
0x7F
;
uint8_t
byte
=
x
&
0x7F
;
if
(
byte
>
0x7F
)
x
|=
0x80
;
*
ostr
=
x
;
++
ostr
;
x
>>=
7
;
if
(
!
x
)
return
ostr
;
}
else
*
ostr
&=
0x7F
;
return
++
ostr
;
return
ostr
;
}
...
...
@@ -397,41 +200,21 @@ inline const char * readVarUInt(UInt64 & x, const char * istr, size_t size)
{
const
char
*
end
=
istr
+
size
;
x
=
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
x
=
0
;
for
(
size_t
i
=
0
;
i
<
9
;
++
i
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
7
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
14
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
21
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
28
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
35
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
42
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
(
static_cast
<
UInt64
>
(
*
istr
)
&
0x7F
)
<<
49
;
if
(
*
istr
&
0x80
&&
++
istr
<
end
)
{
x
|=
static_cast
<
UInt64
>
(
*
istr
)
<<
56
;
}
}
}
}
}
}
}
if
(
istr
==
end
)
throwReadAfterEOF
();
uint64_t
byte
=
*
istr
;
++
istr
;
x
|=
(
byte
&
0x7F
)
<<
(
7
*
i
);
if
(
!
(
byte
&
0x80
))
return
istr
;
}
return
++
istr
;
return
istr
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录