83#define RB_SCAN(pstTree, pstNode) do { \
84 (pstNode) = LOS_RbFirstNode((pstTree)); \
85 for (; NULL != (pstNode); (pstNode) = LOS_RbSuccessorNode((pstTree), (pstNode))) {
87#define RB_SCAN_END(pstTree, pstNode) } \
91#define RB_SCAN_SAFE(pstTree, pstNode, pstNodeTemp) do { \
92 (pstNode) = LOS_RbFirstNode((pstTree)); \
93 (pstNodeTemp) = LOS_RbSuccessorNode((pstTree), (pstNode)); \
94 for (; NULL != (pstNode); (pstNode) = (pstNodeTemp), (pstNodeTemp) = LOS_RbSuccessorNode((pstTree), (pstNode))) {
96#define RB_SCAN_SAFE_END(pstTree, pstNode, pstNodeTemp) } \
100#define RB_MID_SCAN(pstTree, pstNode) do { \
101 for (; NULL != (pstNode); (pstNode) = LOS_RbSuccessorNode((pstTree), (pstNode))) {
103#define RB_MID_SCAN_END(pstTree, pstNode) } \
107#define RB_WALK(pstTree, pstNode, pstRbWalk) do { \
108 LosRbWalk *(pstRbWalk) = NULL; \
109 pstRbWalk = LOS_RbCreateWalk(pstTree); \
110 (pstNode) = LOS_RbWalkNext(pstRbWalk); \
111 for (; NULL != (pstNode); (pstNode) = LOS_RbWalkNext(pstRbWalk)) {
113#define RB_WALK_END(pstTree, pstNode, pstRbWalk) } \
114 LOS_RbDeleteWalk(pstRbWalk); \
118#define RB_WALK_TERMINATE(pstRbWalk) LOS_RbDeleteWalk(pstRbWalk);
119#define RB_COUNT(pstTree) ((pstTree)->ulNodes)
120#define RB_IS_NOT_NILT(pstX) ((NULL != (pstX)->pstLeft) && (NULL != (pstX)->pstRight))
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
ULONG_T(* pfRBCmpKeyFn)(const VOID *, const VOID *)
VOID LOS_RbDeleteWalk(LosRbWalk *pstWalk)
struct TagRbTree LosRbTree
LosRbNode * LOS_RbGetNextNode(LosRbTree *pstTree, VOID *pKey)
ULONG_T LOS_RbAddNode(LosRbTree *pstTree, LosRbNode *pstNew)
struct TagRbNode LosRbNode
VOID LOS_RbInitTree(LosRbTree *pstTree, pfRBCmpKeyFn pfCmpKey, pfRBFreeFn pfFree, pfRBGetKeyFn pfGetKey)
VOID LOS_RbDestroyTree(LosRbTree *pstTree)
VOID * LOS_RbWalkNext(LosRbWalk *pstWalk)
VOID LOS_RbDelNode(LosRbTree *pstTree, LosRbNode *pstNode)
VOID * LOS_RbSuccessorNode(LosRbTree *pstTree, VOID *pstData)
VOID * LOS_RbFirstNode(LosRbTree *pstTree)
VOID *(* pfRBGetKeyFn)(LosRbNode *)
ULONG_T(* pfRBFreeFn)(LosRbNode *)
struct TagRbWalk LosRbWalk
记录步数
ULONG_T LOS_RbGetNode(LosRbTree *pstTree, VOID *pKey, LosRbNode **ppstNode)
LosRbWalk * LOS_RbCreateWalk(LosRbTree *pstTree)
struct TagRbNode * pstParent
爸爸是谁 ?
struct TagRbNode * pstLeft
左孩子是谁 ?
struct TagRbNode * pstRight
右孩子是谁 ?
struct TagRbTree * pstTree