rlq_core.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 644 行 · 第 1/2 页
C
644 行
pNode_a->pOnQueue = pQueue_a; <a href="rlst_Enqueue.FIND-FUNC">rlst_Enqueue</a>(&pQueue_a->RllList, &pNode_a->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->pOnQueue) { <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>rque_Queue_t</i> *pQueue = pNode_a->pOnQueue;<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 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 > 0 */</font></font> pQueue->Length--; pNode_a->pOnQueue = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; <a href="rlst_Remove.FIND-FUNC">rlst_Remove</a>(&pNode_a->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 > 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 > 0 */</font></font> pNode = (<i>rque_Node_t</i>*)<a href="rlst_RemoveHead.FIND-FUNC">rlst_RemoveHead</a>(&pQueue_a->RllList); <b>if</b> (pNode) {<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 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 > 0 */</font></font> pQueue_a->Length--; pNode->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 > 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 > 0 */</font></font> pNode = (<i>rque_Node_t</i>*)<a href="rlst_RemoveTail.FIND-FUNC">rlst_RemoveTail</a>(&pQueue_a->RllList); <b>if</b> (pNode) {<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 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 > 0 */</font></font> pQueue_a->Length--; pNode->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 > 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 > 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 > 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 > 0 */</font></font> <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a->pNode) pNode = (<i>rlst_Node_t</i>*)pCursor_a->pNode; <b>if</b> (pCursor_a->Removed == <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>) { pNode = pNode->pPrev; <font color="#6920ac">/* make sure that NEXT step on empty list is safe */</font> <b>if</b> (pNode->pPrev == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) <font color="#6920ac">/* ((rlst_Node_t**)pNode)++; */</font> pNode = (<i>rlst_Node_t</i>*)&pNode->pPrev; pCursor_a->pNode = (<i>rque_Node_t</i>*)pNode; } pCursor_a->Removed = <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>; <b>if</b> (pNode->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->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 > 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 > 0 */</font></font> <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a->pNode) <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pCursor_a->pNode->pOnQueue) pNode = pCursor_a->pNode; <b>if</b> (pNode->RllNode.pNext) { pCursor_a->pNode = (<i>rque_Node_t</i>*)pNode->RllNode.pPrev; pCursor_a->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 > 1</font> <b>if</b> (pCursor_a->pNode->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->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->pNode->pOnQueue)); }<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 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 + -
显示快捷键?