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)-&gt;pEndOfList = (<i>rlst_Node_t</i>*)<a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; \        (pList_a)-&gt;pHead = (<i>rlst_Node_t</i>*)&amp;(pList_a)-&gt;pEndOfList; \        (pList_a)-&gt;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)-&gt;pNext = (pPred_a)-&gt;pNext; \        (pPred_a)-&gt;pNext = (pNode_a); \        <b>if</b> ((pPred_a)-&gt;pPrev == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) \           (pNode_a)-&gt;pPrev = (<i>rlst_Node_t</i>*)&amp;(pPred_a)-&gt;pPrev; \        <b>else</b> \           (pNode_a)-&gt;pPrev = (pPred_a); \        (pNode_a)-&gt;pNext-&gt;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-&gt;pNext == pNode_l-&gt;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-&gt;pPrev)-1); \                    (pList_l)-&gt;pHead = (<i>rlst_Node_t</i>*)&amp;(pList_l)-&gt;pEndOfList; \                    (pList_l)-&gt;pTail = (<i>rlst_Node_t</i>*)(pList_l); \            } <b>else</b> <b>if</b> (pNode_l-&gt;pNext-&gt;pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { \                <font color="#6920ac">/* last node on list */</font> \                pNode_l-&gt;pPrev-&gt;pNext = pNode_l-&gt;pNext; \                pNode_l-&gt;pNext-&gt;pPrev = pNode_l-&gt;pPrev; \            } <b>else</b> <b>if</b> (pNode_l-&gt;pPrev-&gt;pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { \                <font color="#6920ac">/* first node on list */</font> \                pNode_l-&gt;pNext-&gt;pPrev = pNode_l-&gt;pPrev; \                ((<i>rlst_Node_t</i>*)(((<i>rlst_Node_t</i>**)pNode_l-&gt;pPrev)-1))-&gt;pNext = \                                                        pNode_l-&gt;pNext; \            } <b>else</b> { \                <font color="#6920ac">/* middle mode */</font> \                pNode_l-&gt;pPrev-&gt;pNext = pNode_l-&gt;pNext; \                pNode_l-&gt;pNext-&gt;pPrev = pNode_l-&gt;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)-&gt;pHead-&gt;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)-&gt;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)-&gt;pHead-&gt;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)-&gt;pTail-&gt;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)-&gt;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)-&gt;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)-&gt;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)-&gt;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 &gt; 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 &gt; 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 + -
显示快捷键?