rlq_core.c

来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 644 行 · 第 1/2 页

C
644
字号
    pNode_a-&gt;pOnQueue = pQueue_a;    <a href="rlst_Enqueue.FIND-FUNC">rlst_Enqueue</a>(&amp;pQueue_a-&gt;RllList, &amp;pNode_a-&gt;RllNode, Key_a);    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pQueue_a))    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* remove node from queue */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="rque_Remove">rque_Remove</a></font></b>(    <i>rque_Node_t</i> *pNode_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pNode_a)    <b>if</b> (pNode_a-&gt;pOnQueue)    {        <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rque_Queue_t</i> *pQueue = pNode_a-&gt;pOnQueue;<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>        <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_NODE_ID.FIND-DEF">RQUE_CHECK_NODE_ID</a>(pNode_a))        <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_QUEUE_ID.FIND-DEF">RQUE_CHECK_QUEUE_ID</a>(pQueue))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>        pQueue-&gt;Length--;        pNode_a-&gt;pOnQueue = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;        <a href="rlst_Remove.FIND-FUNC">rlst_Remove</a>(&amp;pNode_a-&gt;RllNode);        <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pQueue))    }    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* remove node form the head of queue */</font><font size="+1"><i>rque_Node_t</i> *<b><font color="azure1"><a name="rque_RemoveHead">rque_RemoveHead</a></font></b>(    <i>rque_Queue_t</i> *pQueue_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rque_Node_t</i>  *pNode;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pQueue_a)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_QUEUE_ID.FIND-DEF">RQUE_CHECK_QUEUE_ID</a>(pQueue_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>    pNode = (<i>rque_Node_t</i>*)<a href="rlst_RemoveHead.FIND-FUNC">rlst_RemoveHead</a>(&amp;pQueue_a-&gt;RllList);    <b>if</b> (pNode)    {<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>        <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_NODE_ID.FIND-DEF">RQUE_CHECK_NODE_ID</a>(pNode))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>        pQueue_a-&gt;Length--;        pNode-&gt;pOnQueue = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;    }    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pQueue_a))    <b>return</b> pNode;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* remove node from the tail of queue */</font><font size="+1"><i>rque_Node_t</i> *<b><font color="azure1"><a name="rque_RemoveTail">rque_RemoveTail</a></font></b>(    <i>rque_Queue_t</i> *pQueue_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rque_Node_t</i>  *pNode;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pQueue_a)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_QUEUE_ID.FIND-DEF">RQUE_CHECK_QUEUE_ID</a>(pQueue_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>    pNode = (<i>rque_Node_t</i>*)<a href="rlst_RemoveTail.FIND-FUNC">rlst_RemoveTail</a>(&amp;pQueue_a-&gt;RllList);    <b>if</b> (pNode)    {<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>        <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_NODE_ID.FIND-DEF">RQUE_CHECK_NODE_ID</a>(pNode))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>        pQueue_a-&gt;Length--;        pNode-&gt;pOnQueue = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;    }    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pQueue_a))    <b>return</b> pNode;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* initialise node */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="rque_NodeInit">rque_NodeInit</a></font></b>(    <i>rque_Node_t</i> *pNode_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pNode_a)    <a href="RQUE_INIT_NODE.FIND-DEF">RQUE_INIT_NODE</a>(pNode_a);    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* associate cursor with queue */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="rque_CursorInit">rque_CursorInit</a></font></b>(    <i>rque_Queue_t</i>  *pQueue_a,     <i>rque_Cursor_t</i> *pCursor_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pQueue_a)    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_QUEUE_ID.FIND-DEF">RQUE_CHECK_QUEUE_ID</a>(pQueue_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>    <a href="RQUE_INIT_CURSOR.FIND-DEF">RQUE_INIT_CURSOR</a>(pCursor_a,pQueue_a);    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pQueue_a))    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* advance cursor */</font><font color="#6920ac">/* *  - steps backward to guaranty proper priority handling; *  - can be applied on empty list any number of times *  - safely wraps around at the beginning of the list and  *    returns NULL (it's allowed to go for the next run without *    cursor additional initialisation);  */</font><font size="+1"><i>rque_Node_t</i> *<b><font color="azure1"><a name="rque_CursorNext">rque_CursorNext</a></font></b>(    <i>rque_Cursor_t</i> *pCursor_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rlst_Node_t</i>  *pNode;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_CURSOR_ID.FIND-DEF">RQUE_CHECK_CURSOR_ID</a>(pCursor_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a-&gt;pNode)    pNode = (<i>rlst_Node_t</i>*)pCursor_a-&gt;pNode;    <b>if</b> (pCursor_a-&gt;Removed == <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>)    {        pNode = pNode-&gt;pPrev;        <font color="#6920ac">/* make sure that NEXT step on empty list is safe */</font>        <b>if</b> (pNode-&gt;pPrev == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)            <font color="#6920ac">/* ((rlst_Node_t**)pNode)++; */</font>            pNode = (<i>rlst_Node_t</i>*)&amp;pNode-&gt;pPrev;        pCursor_a-&gt;pNode = (<i>rque_Node_t</i>*)pNode;    }    pCursor_a-&gt;Removed = <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>;    <b>if</b> (pNode-&gt;pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)    {        <font color="#6920ac">/* have reached the beginning og queue or queue is empty */</font>        <b>return</b> <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;       <font color="#6920ac">/* there is no enxt node on list */</font>    }    <b>return</b> pCursor_a-&gt;pNode;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font size="+1"><i>rque_Node_t</i> *<b><font color="azure1"><a name="rque_CursorRemove">rque_CursorRemove</a></font></b>(    <i>rque_Cursor_t</i> *pCursor_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rque_Node_t</i> *pNode;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_CHECK_CURSOR_ID.FIND-DEF">RQUE_CHECK_CURSOR_ID</a>(pCursor_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 0 */</font></font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a-&gt;pNode)    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a-&gt;pNode-&gt;pOnQueue)    pNode = pCursor_a-&gt;pNode;    <b>if</b> (pNode-&gt;RllNode.pNext)    {        pCursor_a-&gt;pNode = (<i>rque_Node_t</i>*)pNode-&gt;RllNode.pPrev;        pCursor_a-&gt;Removed = <a href="CRTX_TRUE.FIND-DEF">CRTX_TRUE</a>;        <a href="#rque_Remove">rque_Remove</a>(pNode);<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL &gt; 1</font>        <b>if</b> (pCursor_a-&gt;pNode-&gt;RllNode.pNext == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)        {            <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>((<i>rque_Queue_t</i>*)(((<i>rlst_Node_t</i>**)pCursor_a-&gt;pNode)-1)));        }        <b>else</b>        {            <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(<a href="RQUE_VALIDATE.FIND-DEF">RQUE_VALIDATE</a>(pCursor_a-&gt;pNode-&gt;pOnQueue));        }<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL &gt; 1 */</font></font>        <b>return</b> pNode;    }    <b>else</b>    {        <font color="#6920ac">/* queue is empty or we have reached begining of queue or         * REMOVE immediately follows cursor initialisation without         * calling NEXT */</font>        <b>return</b> <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;    }<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}</pre></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?