rll_defs.h
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C头文件 代码 · 共 249 行
H
249 行
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/kernel/src/rll_defs.h</TITLE></HEAD><BODY><pre><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/* */</font><font color="#6920ac">/* Copyright (c) 1997-1999 Australian Real Time Embedded Systems */</font><font color="#6920ac">/* */</font><font color="#6920ac">/* PROPRIETARY RIGHTS of Australian Real Time Embedded Systems */</font><font color="#6920ac">/* are involved in the subject matter of this material. All reproduction,*/</font><font color="#6920ac">/* manufacturing, use, and sales rights pertaining to this subject matter*/</font><font color="#6920ac">/* are governed by the license agreement. The recipient of this software */</font><font color="#6920ac">/* implicitly accepts the terms of the license. */</font><font color="#6920ac">/* */</font><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/************************************************************************* * * FILE NAME * * rll_defs.h * * SYSTEM COMPONENT * * Reference Linked List (RLL) Management Component * * DESCRIPTION * * This file contains data and constant definitions for * Referens Linked List Management Component. * * SCCS HISTORY * * @(#)rll_defs.h 1.8, 01/25/99, 00:30:09 * * AUTHOR * * Vadim N. Azarovsky * * CREATED * * 10-Feb-1998 by Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * **************************************************************************/</font><b><font color='DarkGreen'>#ifndef</font></b><font color="maroon"> __RLL_DEFS__H</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="__RLL_DEFS__H">__RLL_DEFS__H</a></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> __cplusplus</font><i>extern</i> <font color="DarkGreen">"C"</font> {<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* __cplusplus */</font></font><b><font color='DarkGreen'>#include</font></b> <a href="crt_defs.h.FIND-INC"><font color="blue">"crt_defs.h"</font></a><font color="#6920ac">/*********************** * GLOBAL CONSTANSTS * ***********************/</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_LIST_ID">RLST_LIST_ID</a></font> 0x524C4C4CUL <font color="#6920ac">/* "RLLL" - RLL list */</font><font color="#6920ac">/* * Return Codes */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_SUCCESS">RLST_SUCCESS</a></font> CRTX_SUCCESS <font color="#6920ac">/* successful completion */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_ERR_INVALID_LIST">RLST_ERR_INVALID_LIST</a></font> -1 <font color="#6920ac">/* invalid RLL's list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_ERR_INVALID_NODE">RLST_ERR_INVALID_NODE</a></font> -2 <font color="#6920ac">/* invalid RLL's node */</font><font color="#6920ac">/* * RLL flags */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_FLAG_INIT">RLST_FLAG_INIT</a></font> 0x00 <font color="#6920ac">/* initialisation flags */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_FLAG_LIST_ALLOC">RLST_FLAG_LIST_ALLOC</a></font> 0x01 <font color="#6920ac">/* list control block is allocated */</font><font color="#6920ac">/***************** * GLOBAL MACROS * *****************/</font><font color="#6920ac">/* * RLST_INIT_LIST macro initialise pList_a control block */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_INIT_LIST">RLST_INIT_LIST</a></font>(pList_a) \ <a href="#RLST_SET_LIST_ID">RLST_SET_LIST_ID</a>(pList_a); \ (pList_a)->pEndOfList = (<i>rlst_Node_t</i>*)<a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; \ (pList_a)->pHead = (<i>rlst_Node_t</i>*)&(pList_a)->pEndOfList; \ (pList_a)->pTail = (<i>rlst_Node_t</i>*)(pList_a)<font color="#6920ac">/* * RLST_INSERT macro inserts pNode_a after pPred_a */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_INSERT">RLST_INSERT</a></font>(pPred_a,pNode_a) \ (pNode_a)->pNext = (pPred_a)->pNext; \ (pPred_a)->pNext = (pNode_a); \ <b>if</b> ((pPred_a)->pPrev == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) \ (pNode_a)->pPrev = (<i>rlst_Node_t</i>*)&(pPred_a)->pPrev; \ <b>else</b> \ (pNode_a)->pPrev = (pPred_a); \ (pNode_a)->pNext->pPrev = pNode_a<font color="#6920ac">/* * RLST_REMOVE macro removes pNode_a node from list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_REMOVE">RLST_REMOVE</a></font>(pNode_a) \ { <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rlst_Node_t</i> *pNode_l = (pNode_a); \ <b>if</b> (pNode_l->pNext == pNode_l->pPrev) { \ <font color="#6920ac">/* the only node on the list */</font> \ <a href="CRTX_REG_2.FIND-DEF">CRTX_REG_2</a> <i>rlst_List_t</i> *pList_l = \ (<i>rlst_List_t</i>*)(((<i>rlst_Node_t</i>**)pNode_l->pPrev)-1); \ (pList_l)->pHead = (<i>rlst_Node_t</i>*)&(pList_l)->pEndOfList; \ (pList_l)->pTail = (<i>rlst_Node_t</i>*)(pList_l); \ } <b>else</b> <b>if</b> (pNode_l->pNext->pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { \ <font color="#6920ac">/* last node on list */</font> \ pNode_l->pPrev->pNext = pNode_l->pNext; \ pNode_l->pNext->pPrev = pNode_l->pPrev; \ } <b>else</b> <b>if</b> (pNode_l->pPrev->pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { \ <font color="#6920ac">/* first node on list */</font> \ pNode_l->pNext->pPrev = pNode_l->pPrev; \ ((<i>rlst_Node_t</i>*)(((<i>rlst_Node_t</i>**)pNode_l->pPrev)-1))->pNext = \ pNode_l->pNext; \ } <b>else</b> { \ <font color="#6920ac">/* middle mode */</font> \ pNode_l->pPrev->pNext = pNode_l->pNext; \ pNode_l->pNext->pPrev = pNode_l->pPrev; \ } \ } \<font color="#6920ac">/* * RLST_IS_EMPTY return TRUE is pList_a is empty */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_IS_EMPTY">RLST_IS_EMPTY</a></font>(pList_a) \ ((pList_a)->pHead->pNext==<a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)<font color="#6920ac">/* * RLST_IS_EMPTY2 just different implementation of RLST_IS_EMPTY */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_IS_EMPTY2">RLST_IS_EMPTY2</a></font>(pList_a) \ ((pList_a)->pTail==(<i>rlst_Node_t</i>*)(pList_a))<font color="#6920ac">/* get key value of the node at the head of list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_GET_HEAD_KEY">RLST_GET_HEAD_KEY</a></font>(pList_a) \ (pList_a)->pHead->Key<font color="#6920ac">/* get key value of the node at the tail of list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_GET_TAIL_KEY">RLST_GET_TAIL_KEY</a></font>(pList_a) \ (pList_a)->pTail->Key<font color="#6920ac">/* get address of the node at the head of list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_GET_HEAD_REF">RLST_GET_HEAD_REF</a></font>(pList_a) \ (pList_a)->pHead<font color="#6920ac">/* get address of the node at the tail of list */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="RLST_GET_TAIL_REF">RLST_GET_TAIL_REF</a></font>(pList_a) \ (pList_a)->pTail<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL == 0</font><b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="RLST_SET_LIST_ID">RLST_SET_LIST_ID</a></font>(_list) <b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="RLST_CHECK_LIST_ID">RLST_CHECK_LIST_ID</a></font>(_list) (CRTX_TRUE)<b><font color='DarkGreen'>#else</font></b><font color="maroon"></font><b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="RLST_SET_LIST_ID">RLST_SET_LIST_ID</a></font>(_list) ((_list)->CheckID=RLST_LIST_ID)<b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="RLST_CHECK_LIST_ID">RLST_CHECK_LIST_ID</a></font>(_list) ((_list)->CheckID==RLST_LIST_ID)<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL == 0 */</font></font><font color="#6920ac">/*********************** * GLOBAL DATA TYPES * ***********************/</font><i><a name="rlst_Key_t">typedef</a></i> <i>crtx_Uint32_t</i> <i><font color='DarkBlue'>rlst_Key_t</font></i>;<font color="#6920ac">/* * RLL Attributes Structure. The following structure allowes to * specify RLL attributes when list is created. */</font><i><a name="rlst_Attr_t">typedef</a></i> <i>struct</i> rlst_Attr_s { <i>crtx_SegNum_t</i> Segment; <font color="#6920ac">/* memory segment */</font>} <i><font color='DarkBlue'>rlst_Attr_t</font></i>;<font color="#6920ac">/* * Reference linked list's node */</font><i><a name="rlst_Node_t">typedef</a></i> <i>struct</i> rlst_Node_s { <i>struct</i> rlst_Node_s *pNext; <font color="#6920ac">/* next node on list */</font> <i>struct</i> rlst_Node_s *pPrev; <font color="#6920ac">/* previous node on list */</font> <i>rlst_Key_t</i> Key; <font color="#6920ac">/* node key */</font>} <i><font color='DarkBlue'>rlst_Node_t</font></i>;<font color="#6920ac">/* * Reference linked list's control block */</font><i><a name="rlst_List_t">typedef</a></i> <i>struct</i> rlst_List_s { <i>rlst_Node_t</i> *pHead; <font color="#6920ac">/* first node on the list */</font> <i>rlst_Node_t</i> *pEndOfList; <font color="#6920ac">/* end of the list mark */</font> <i>rlst_Node_t</i> *pTail; <font color="#6920ac">/* last node on the list */</font> <i>crtx_Int_t</i> Flags; <font color="#6920ac">/* RLL flags */</font> <i>rlst_Attr_t</i> Attr; <font color="#6920ac">/* lists attributes */</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 0</font> <i>crtx_Uint32_t</i> CheckID; <font color="#6920ac">/* list id (for error checking) */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font>} <i><font color='DarkBlue'>rlst_List_t</font></i>;<font color="#6920ac">/***************** * GLOBAL DATA * *****************/</font><i>extern</i> <i>rlst_Attr_t</i> rlst_AttrDefault_g; <font color="#6920ac">/* default attribute */</font><font color="#6920ac">/*************************** * PROCEDURES PROTOTYPES * ***************************/</font><font color="#6920ac">/* create/initialise list control block */</font><font size="+1"><i>rlst_List_t</i> *<a href="rlst_CreateList.FIND-FUNC">rlst_CreateList</a>(<i>rlst_List_t</i> *pList_a, <i>rlst_Attr_t</i> *pAttr_a);</font><font color="#6920ac">/* destroy list control block */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_DestroyList.FIND-FUNC">rlst_DestroyList</a>(<i>rlst_List_t</i> *pList_a);</font><font color="#6920ac">/* add node at the head */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_AddHead.FIND-FUNC">rlst_AddHead</a>(<i>rlst_List_t</i> *pList_a, <i>rlst_Node_t</i> *pNode_a);</font><font color="#6920ac">/* add node at the tail */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_AddTail.FIND-FUNC">rlst_AddTail</a>(<i>rlst_List_t</i> *pList_a, <i>rlst_Node_t</i> *pNode_a);</font><font color="#6920ac">/* put node on the list after specified node */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_Insert.FIND-FUNC">rlst_Insert</a>(<i>rlst_List_t</i> *pList_a, <i>rlst_Node_t</i> *pPred_a, <i>rlst_Node_t</i> *pNew_a);</font><font color="#6920ac">/* put node on the list according to key value */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_Enqueue.FIND-FUNC">rlst_Enqueue</a>(<i>rlst_List_t</i> *pList_a, <i>rlst_Node_t</i> *pNode_a, <i>rlst_Key_t</i> Key_a);</font><font color="#6920ac">/* remove node from list (node must be on list) */</font><font size="+1"><i>crtx_Void_t</i> <a href="rlst_Remove.FIND-FUNC">rlst_Remove</a>(<i>rlst_Node_t</i> *pNode_a);</font><font color="#6920ac">/* remove node form the head of list */</font><font size="+1"><i>rlst_Node_t</i> *<a href="rlst_RemoveHead.FIND-FUNC">rlst_RemoveHead</a>(<i>rlst_List_t</i> *pList_a);</font><font color="#6920ac">/* remove node from the tail of list */</font><font size="+1"><i>rlst_Node_t</i> *<a href="rlst_RemoveTail.FIND-FUNC">rlst_RemoveTail</a>(<i>rlst_List_t</i> *pList_a);</font><font color="#6920ac">/* ===== END OF THE DEFINITION FILE ===== */</font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> __cplusplus</font>}<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* __cplusplus */</font></font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* __RLL_DEFS__H */</font></font></pre></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?