Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
21592f57
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
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,发现更多精彩内容 >>
提交
21592f57
编写于
11月 25, 2021
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update fst struct
上级
4e9fba6d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
32 deletion
+36
-32
source/libs/index/src/index_fst.c
source/libs/index/src/index_fst.c
+36
-32
未找到文件。
source/libs/index/src/index_fst.c
浏览文件 @
21592f57
...
...
@@ -181,6 +181,8 @@ static FstState stateDict[] = {
{.
state
=
AnyTrans
,
.
val
=
0
b00000000
},
{.
state
=
EmptyFinal
,
.
val
=
0
b00000000
}
};
// debug
static
char
*
fStStateStr
[]
=
{
"ONE_TRANS_NEXT"
,
"ONE_TRANS"
,
"ANY_TRANS"
,
"EMPTY_FINAL"
};
FstState
fstStateCreate
(
State
state
){
uint8_t
idx
=
(
uint8_t
)
state
;
...
...
@@ -507,7 +509,6 @@ FstNode *fstNodeCreate(int64_t version, CompiledAddr addr, FstSlice *slice) {
n
->
sizes
=
sz
;
n
->
finalOutput
=
0
;
}
else
{
uint64_t
sz
=
fstStateSizes
(
&
st
,
slice
);
// s.sizes(data)
uint32_t
nTrans
=
fstStateNtrans
(
&
st
,
slice
);
// s.ntrans(data)
n
->
data
=
*
slice
;
...
...
@@ -539,19 +540,19 @@ FstTransitions* fstNodeTransitions(FstNode *node) {
// Returns the transition at index `i`.
bool
fstNodeGetTransitionAt
(
FstNode
*
node
,
uint64_t
i
,
FstTransition
*
trn
)
{
bool
s
=
true
;
//FstState st =
node->state;
if
(
FST_STATE_ONE_TRNAS_NEXT
(
node
)
)
{
trn
->
inp
=
0
;
FstState
*
st
=
&
node
->
state
;
if
(
st
->
state
==
OneTransNext
)
{
trn
->
inp
=
fstStateInput
(
st
,
node
)
;
trn
->
out
=
0
;
trn
->
addr
=
0
;
}
else
if
(
FST_STATE_ONE_TRNAS
(
node
)
)
{
trn
->
inp
=
0
;
trn
->
out
=
0
;
trn
->
addr
=
0
;
}
else
if
(
FST_STATE_ANY_TRANS
(
node
)
)
{
trn
->
inp
=
0
;
trn
->
out
=
0
;
trn
->
addr
=
0
;
trn
->
addr
=
fstStateTransAddr
(
st
,
node
)
;
}
else
if
(
st
->
state
==
OneTrans
)
{
trn
->
inp
=
fstStateInput
(
st
,
node
)
;
trn
->
out
=
fstStateOutput
(
st
,
node
)
;
trn
->
addr
=
fstStateTransAddr
(
st
,
node
)
;
}
else
if
(
st
->
state
==
AnyTrans
)
{
trn
->
inp
=
fstStateInputForAnyTrans
(
st
,
node
,
i
)
;
trn
->
out
=
fstStateOutputForAnyTrans
(
st
,
node
,
i
)
;
trn
->
addr
=
fstStateTransAddrForAnyTrans
(
st
,
node
,
i
)
;
}
else
{
s
=
false
;
}
...
...
@@ -561,12 +562,15 @@ bool fstNodeGetTransitionAt(FstNode *node, uint64_t i, FstTransition *trn) {
// Returns the transition address of the `i`th transition
bool
fstNodeGetTransitionAddrAt
(
FstNode
*
node
,
uint64_t
i
,
CompiledAddr
*
res
)
{
bool
s
=
true
;
if
(
FST_STATE_ONE_TRNAS_NEXT
(
node
))
{
}
else
if
(
FST_STATE_ONE_TRNAS
(
node
))
{
}
else
if
(
FST_STATE_ANY_TRANS
(
node
))
{
FstState
*
st
=
&
node
->
state
;
if
(
st
->
state
==
OneTransNext
)
{
assert
(
i
==
0
);
fstStateTransAddr
(
st
,
node
);
}
else
if
(
st
->
state
==
OneTrans
)
{
assert
(
i
==
0
);
fstStateTransAddr
(
st
,
node
);
}
else
if
(
st
->
state
==
AnyTrans
)
{
fstStateTransAddrForAnyTrans
(
st
,
node
,
i
);
}
else
if
(
FST_STATE_EMPTY_FINAL
(
node
)){
s
=
false
;
}
else
{
...
...
@@ -579,19 +583,19 @@ bool fstNodeGetTransitionAddrAt(FstNode *node, uint64_t i, CompiledAddr *res) {
// If no transition for this byte exists, then `false` is returned.
bool
fstNodeFindInput
(
FstNode
*
node
,
uint8_t
b
,
uint64_t
*
res
)
{
bool
s
=
true
;
uint8_t
input
;
// get s.input
FstState
fs
=
node
->
state
;
if
(
FST_STATE_ONE_TRNAS_NEXT
(
node
))
{
if
(
b
==
input
)
{
*
res
=
0
;
}
else
{
return
s
;
}
}
else
if
(
FST_STATE_ONE_TRNAS
(
node
))
{
if
(
b
==
input
)
{
*
res
=
0
;
}
else
{
return
s
;}
}
else
if
(
FST_STATE_ANY_TRANS
(
node
))
{
}
else
if
(
FST_STATE_EMPTY_FINAL
(
node
))
{
s
=
false
;
}
FstState
*
st
=
&
node
->
state
;
if
(
st
->
state
==
OneTransNext
)
{
if
(
fstStateInput
(
st
,
node
)
==
b
)
{
*
res
=
0
;
}
else
{
s
=
false
;
}
}
else
if
(
st
->
state
==
OneTrans
)
{
if
(
fstStateInput
(
st
,
node
)
==
b
)
{
*
res
=
0
;}
else
{
s
=
false
;
}
}
else
if
(
st
->
state
==
AnyTrans
)
{
bool
null
=
false
;
uint64_t
out
=
fstStateFindInput
(
st
,
node
,
b
,
&
null
);
if
(
null
==
false
)
{
*
res
=
out
;
}
else
{
s
=
false
;}
}
return
s
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录