Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
169d9e17
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
169d9e17
编写于
11月 24, 2021
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update fst build struct
上级
169f6b3a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
76 addition
and
18 deletion
+76
-18
source/libs/index/inc/index_fst.h
source/libs/index/inc/index_fst.h
+1
-1
source/libs/index/inc/index_fst_util.h
source/libs/index/inc/index_fst_util.h
+0
-1
source/libs/index/src/index_fst.c
source/libs/index/src/index_fst.c
+75
-16
未找到文件。
source/libs/index/inc/index_fst.h
浏览文件 @
169d9e17
...
...
@@ -151,7 +151,6 @@ uint64_t fstStateFindInput(FstState *state, FstNode *node, uint8_t b);
#define FST_STATE_ONE_TRNAS_NEXT(node) (node->state.state == OneTransNext)
...
...
@@ -205,6 +204,7 @@ typedef struct FstNode {
// Return the address of this node.
#define FST_NODE_ADDR(node) node->start
FstNode
*
fstNodeCreate
(
int64_t
version
,
CompiledAddr
addr
,
FstSlice
*
data
);
void
fstNodeDestroy
(
FstNode
*
fstNode
);
...
...
source/libs/index/inc/index_fst_util.h
浏览文件 @
169d9e17
...
...
@@ -45,7 +45,6 @@ extern const uint64_t TRANS_INDEX_THRESHOLD;
// `0` is a legal value which means there are no transitions/outputs
extern
#define FST_SET_TRANSITION_PACK_SIZE(v, sz) do {v = (v & 0b00001111) | (sz << 4} while(0)
#define FST_GET_TRANSITION_PACK_SIZE(v) (((v) & 0b11110000) >> 4)
#define FST_SET_OUTPUT_PACK_SIZE(v, sz) do { v = (v & 0b11110000) | sz } while(0)
...
...
source/libs/index/src/index_fst.c
浏览文件 @
169d9e17
...
...
@@ -228,35 +228,92 @@ uint64_t fstStateEndAddrForOneTransNext(FstState* s, FstSlice *data) {
return
FST_SLICE_LEN
(
data
)
-
1
-
fstStateInputLen
(
s
);
}
uint64_t
fstStateEndAddrForOneTrans
(
FstState
*
s
,
FstSlice
*
data
,
PackSizes
sizes
)
{
return
FST_SLICE_LEN
(
data
)
-
1
-
fstStateInputLen
(
s
)
-
1
-
FST_GET_TRANSITION_PACK_SIZE
(
sizes
)
-
FST_GET_OUTPUT_PACK_SIZE
(
sizes
);
return
FST_SLICE_LEN
(
data
)
-
1
-
fstStateInputLen
(
s
)
-
1
// pack size
-
FST_GET_TRANSITION_PACK_SIZE
(
sizes
)
-
FST_GET_OUTPUT_PACK_SIZE
(
sizes
);
}
uint64_t
fstStateEndAddrForAnyTrans
(
FstState
*
state
,
uint64_t
version
,
FstSlice
*
date
,
PackSizes
sizes
,
uint64_t
nTrans
)
{
return
1
;
uint8_t
oSizes
=
FST_GET_OUTPUT_PACK_SIZE
(
sizes
);
uint8_t
finalOsize
=
!
fstStateIsFinalState
(
state
)
?
0
:
oSizes
;
return
FST_SLICE_LEN
(
date
)
-
1
-
fstStateNtransLen
(
state
)
-
1
//pack size
-
fstStateTotalTransSize
(
state
,
version
,
sizes
,
nTrans
)
-
nTrans
*
oSizes
// output values
-
finalOsize
;
// final output
}
// input
uint8_t
fstStateInput
(
FstState
*
state
,
FstNode
*
node
)
{
return
1
;
uint8_t
fstStateInput
(
FstState
*
s
,
FstNode
*
node
)
{
assert
(
s
->
state
==
OneTransNext
||
s
->
state
==
OneTrans
);
FstSlice
*
slice
=
&
node
->
data
;
uint8_t
inp
=
fstStateCommInput
(
s
);
return
inp
!=
0
?
inp
:
slice
->
data
[
slice
->
start
-
1
];
}
uint8_t
fstStateInputForAnyTrans
(
FstState
*
state
,
FstNode
*
node
,
uint64_t
i
)
{
return
1
;
uint8_t
fstStateInputForAnyTrans
(
FstState
*
s
,
FstNode
*
node
,
uint64_t
i
)
{
assert
(
s
->
state
==
AnyTrans
);
FstSlice
*
slice
=
&
node
->
data
;
uint64_t
at
=
node
->
start
-
fstStateNtransLen
(
s
)
-
1
// pack size
-
fstStateTransIndexSize
(
s
,
node
->
version
,
node
->
nTrans
)
-
i
-
1
;
// the output size
return
slice
->
data
[
at
];
}
// trans_addr
CompiledAddr
fstStateTransAddr
(
FstState
*
state
,
FstNode
*
node
)
{
return
1
;
}
CompiledAddr
fstStateTransAddrForAnyTrans
(
FstState
*
state
,
FstNode
*
node
,
uint64_t
i
)
{
return
1
;
CompiledAddr
fstStateTransAddr
(
FstState
*
s
,
FstNode
*
node
)
{
assert
(
s
->
state
==
OneTransNext
||
s
->
state
==
OneTrans
);
FstSlice
*
slice
=
&
node
->
data
;
if
(
s
->
state
==
OneTransNext
)
{
return
(
CompiledAddr
)(
node
->
end
);
}
else
{
PackSizes
sizes
=
node
->
sizes
;
uint8_t
tSizes
=
FST_GET_TRANSITION_PACK_SIZE
(
sizes
);
uint64_t
i
=
node
->
start
-
fstStateInputLen
(
s
)
-
1
// PackSizes
-
tSizes
;
// refactor error logic
return
unpackDelta
(
slice
->
data
+
i
,
tSizes
,
node
->
end
);
}
}
CompiledAddr
fstStateTransAddrForAnyTrans
(
FstState
*
s
,
FstNode
*
node
,
uint64_t
i
)
{
assert
(
s
->
state
==
AnyTrans
);
FstSlice
*
slice
=
&
node
->
data
;
uint8_t
tSizes
=
FST_GET_TRANSITION_PACK_SIZE
(
node
->
sizes
);
uint64_t
at
=
node
->
start
-
fstStateNtransLen
(
s
)
-
1
-
fstStateTransIndexSize
(
s
,
node
->
version
,
node
->
nTrans
)
-
node
->
nTrans
-
(
i
*
tSizes
)
-
tSizes
;
return
unpackDelta
(
slice
->
data
+
at
,
tSizes
,
node
->
end
);
}
// sizes
PackSizes
fstStateSizes
(
FstState
*
state
,
FstSlice
*
data
)
{
return
1
;
PackSizes
fstStateSizes
(
FstState
*
s
,
FstSlice
*
slice
)
{
assert
(
s
->
state
==
OneTrans
||
s
->
state
==
AnyTrans
)
;
uint64_t
i
;
if
(
s
->
state
==
OneTrans
)
{
i
=
FST_SLICE_LEN
(
slice
)
-
1
-
fstStateInputLen
(
s
)
-
1
;
}
else
{
i
=
FST_SLICE_LEN
(
slice
)
-
1
-
fstStateNtransLen
(
s
)
-
1
;
}
return
(
PackSizes
)(
slice
->
data
[
slice
->
start
+
i
]);
}
// Output
Output
fstStateOutput
(
FstState
*
state
,
FstNode
*
node
)
{
return
1
;
}
Output
fstStateOutputForAnyTrans
(
FstState
*
state
,
FstNode
*
node
,
uint64_t
i
)
{
return
1
;
...
...
@@ -281,7 +338,9 @@ uint64_t fstStateTotalTransSize(FstState *state, uint64_t version, PackSizes siz
return
1
;
}
uint64_t
fstStateTransIndexSize
(
FstState
*
state
,
uint64_t
version
,
uint64_t
nTrans
)
{
return
1
;
if
(
version
>=
2
&&
nTrans
>
TRANS_INDEX_THRESHOLD
)
return
256
;
return
0
;
}
uint64_t
fstStateNtransLen
(
FstState
*
state
)
{
return
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录