/* ---------------------------------------------------------------------------- * Copyright (c) Huawei Technologies Co., Ltd. 2013-2019. All rights reserved. * Description: BinaryTree Private HeadFile * Author: Huawei LiteOS Team * Create: 2013-01-01 * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * 3. Neither the name of the copyright holder nor the names of its contributors may be used * to endorse or promote products derived from this software without specific prior written * permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * --------------------------------------------------------------------------- */ //定义了与二叉树相关的结构体和函数,用于实现对数据的快速查找和插入。 #ifndef _LOS_BINARYTREE_PRI_H #define _LOS_BINARYTREE_PRI_H #include "los_typedef.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ //定义二叉树节点的模型 typedef struct tagBinNode { struct tagBinNode *left;//左子树节点 struct tagBinNode *right;//右子树节点 UINT32 nodeId;//节点的编号 CHAR keyValue[0];//节点记录的值(柔性数组,动态分配内存) } BinNode; //链接二叉树节点 typedef struct { BinNode leaf;//一个二叉树 UINTPTR linkReg1;//无符号数的指针,可连接三个节点 UINTPTR linkReg2; UINTPTR linkReg3; } LinkRegNode; #define LR_COUNT 4096 extern LinkRegNode g_linkRegNode[LR_COUNT];//4096个链接二叉树节点 extern UINT32 g_linkRegNodeIndex;//链接二叉树节点的索引 extern LinkRegNode *g_linkRegRoot;//链接二叉树节点的指针 //地址二叉树节点 typedef struct { BinNode leaf;//一个二叉树节点 UINTPTR addr;//二叉树节点记录的地址 } AddrNode; #define ADDR_COUNT 40960 extern AddrNode g_addrNode[ADDR_COUNT];//40960个地址二叉树节点 extern UINT32 g_addrNodeIndex;//地址二叉树节点的索引 extern AddrNode *g_addrRoot;//地址二叉树节点的指针 //请求大小二叉树节点 typedef struct { BinNode leaf;//一个二叉树 UINT32 reqSize;//请求数据大小 } ReqSizeNode; #define REQ_SIZE_COUNT 4096 extern ReqSizeNode g_reqSizeNode[REQ_SIZE_COUNT];//4096个请求大小二叉树节点 extern UINT32 g_reqSizeNodeIndex;//请求大小二叉树节点的索引 extern ReqSizeNode *g_reqSizeRoot;//请求大小二叉树节点的指针 //任务编号二叉树节点 typedef struct { BinNode leaf; UINT32 taskId; } TaskIDNode; #define TASK_ID_COUNT 1024//1024个任务编号 //将节点插入二叉树的函数 extern UINT32 OsBinTreeInsert(const VOID *node, UINT32 nodeLen, BinNode **leaf, BinNode *(*GetMyBinNode)(UINT32 *nodeId), INT32 (*CompareNode)(const VOID *node1, const VOID *node2)); //比较两个二叉树节点 extern INT32 OsCompareLRNode(const VOID *node1, const VOID *node2); //通过二叉树节点的编号得到二叉树 extern BinNode *OsGetLRBinNode(UINT32 *nodeId); //比较两个地址二叉树节点 extern INT32 OsCompareAddrNode(const VOID *node1, const VOID *node2); //通过地址二叉树节点的编号得到地址二叉树 extern BinNode *OsGetAddrBinNode(UINT32 *nodeId); //比较两个请求大小二叉树节点 extern INT32 OsCompareReqSizeNode(const VOID *node1, const VOID *node2); //通过请求大小二叉树节点的编号得到请求大小二叉树 extern BinNode *OsGetReqSizeBinNode(UINT32 *nodeId); //比较两个任务编号二叉树节点 extern INT32 OsCompareTaskIDNode(const VOID *node1, const VOID *node2); //通过任务编号二叉树节点的编号得到任务编号二叉树 extern BinNode *OsGetTaskIDBinNode(UINT32 *nodeId); #ifdef __cplusplus #if __cplusplus } #endif /* __cplusplus */ #endif /* __cplusplus */ #endif /* _LOS_BINARYTREE_PRI_H */