Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
a01ea0be
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
a01ea0be
编写于
8月 24, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more code
上级
0bb11b08
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
60 addition
and
3 deletion
+60
-3
include/util/trbtree.h
include/util/trbtree.h
+15
-2
source/util/src/trbtree.c
source/util/src/trbtree.c
+1
-1
source/util/test/CMakeLists.txt
source/util/test/CMakeLists.txt
+8
-0
source/util/test/trbtreeTest.cpp
source/util/test/trbtreeTest.cpp
+36
-0
未找到文件。
include/util/trbtree.h
浏览文件 @
a01ea0be
...
...
@@ -13,17 +13,24 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_UTIL_RBTREE_H_
#define _TD_UTIL_RBTREE_H_
#include "os.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
SRBTree
SRBTree
;
typedef
struct
SRBTreeNode
SRBTreeNode
;
typedef
struct
SRBTreeIter
SRBTreeIter
;
typedef
int32_t
(
*
tRBTreeCmprFn
)(
void
*
,
void
*
);
typedef
int32_t
(
*
tRBTreeCmprFn
)(
const
void
*
,
const
void
*
);
// SRBTree =============================================
#define tRBTreeCreate(compare) \
(SRBTree) { .cmprFn = (compare), .root = NULL, .minNode = NULL, .maxNode = NULL }
(SRBTree) { .cmprFn = (compare), .root
Node
= NULL, .minNode = NULL, .maxNode = NULL }
SRBTreeNode
*
tRBTreePut
(
SRBTree
*
pTree
,
SRBTreeNode
*
pNew
);
void
tRBTreeDrop
(
SRBTree
*
pTree
,
SRBTreeNode
*
pNode
);
...
...
@@ -56,3 +63,9 @@ struct SRBTreeIter {
SRBTree
*
pTree
;
SRBTreeNode
*
pNode
;
};
#ifdef __cplusplus
}
#endif
#endif
/*_TD_UTIL_RBTREE_H_*/
\ No newline at end of file
source/util/src/trbtree.c
浏览文件 @
a01ea0be
...
...
@@ -256,7 +256,7 @@ SRBTreeNode *tRBTreeIterNext(SRBTreeIter *pIter) {
if
(
pIter
->
pNode
->
right
)
{
pIter
->
pNode
=
pIter
->
pNode
->
right
;
while
(
pIter
->
pNode
->
left
)
{
pIter
->
pNode
->
left
;
pIter
->
pNode
=
pIter
->
pNode
->
left
;
}
}
else
{
while
(
true
)
{
...
...
source/util/test/CMakeLists.txt
浏览文件 @
a01ea0be
...
...
@@ -75,4 +75,12 @@ target_link_libraries(taosbsearchTest os util gtest_main)
add_test
(
NAME taosbsearchTest
COMMAND taosbsearchTest
)
# trbtreeTest
add_executable
(
rbtreeTest
"trbtreeTest.cpp"
)
target_link_libraries
(
rbtreeTest os util gtest_main
)
add_test
(
NAME rbtreeTest
COMMAND rbtreeTest
)
\ No newline at end of file
source/util/test/trbtreeTest.cpp
0 → 100644
浏览文件 @
a01ea0be
#include <gtest/gtest.h>
#include <stdio.h>
#include <stdlib.h>
#include "trbtree.h"
static
int32_t
tCmprInteger
(
const
void
*
p1
,
const
void
*
p2
)
{
if
(
*
(
int
*
)
p1
<
*
(
int
*
)
p2
)
{
return
-
1
;
}
else
if
(
*
(
int
*
)
p1
>
*
(
int
*
)
p2
)
{
return
1
;
}
return
0
;
}
TEST
(
trbtreeTest
,
rbtree_test1
)
{
SRBTree
rt
=
tRBTreeCreate
(
tCmprInteger
);
int
a
[]
=
{
1
,
3
,
4
,
2
,
7
,
5
,
8
};
for
(
int
i
=
0
;
i
<
sizeof
(
a
)
/
sizeof
(
a
[
0
]);
i
++
)
{
SRBTreeNode
*
pNode
=
(
SRBTreeNode
*
)
taosMemoryMalloc
(
sizeof
(
*
pNode
)
+
sizeof
(
int
));
*
(
int
*
)
pNode
->
payload
=
a
[
i
];
tRBTreePut
(
&
rt
,
pNode
);
}
SRBTreeIter
rti
=
tRBTreeIterCreate
(
&
rt
);
SRBTreeNode
*
pNode
=
tRBTreeIterNext
(
&
rti
);
int
la
=
0
;
while
(
pNode
)
{
GTEST_ASSERT_GT
(
*
(
int
*
)
pNode
->
payload
,
la
);
la
=
*
(
int
*
)
pNode
->
payload
;
pNode
=
tRBTreeIterNext
(
&
rti
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录