ill_core.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 1,267 行 · 第 1/4 页
C
1,267 行
<i>sizeof</i>(<i>ilst_Pool_t</i>)); } <b>else</b> { pPool_a->Flags = <a href="ILST_FLAG_INIT.FIND-DEF">ILST_FLAG_INIT</a>; <font color="#6920ac">/* reset flags */</font> pPool_a->pTable = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; <font color="#6920ac">/* no nodes */</font> pPool_a->NrNodes = 0; <font color="#6920ac">/* no nodes */</font> pPool_a->NrLists = 0; <font color="#6920ac">/* no lists */</font> pPool_a->NextList = 0; <font color="#6920ac">/* prevent list allocation */</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 0</font> <a href="CRTX_SET_NO_ID.FIND-DEF">CRTX_SET_NO_ID</a>(pPool_a); <font color="#6920ac">/* no id */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font> } <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/************************************************************************** * * SERVICE NAME * * ilst_AllocateList * * SYNOPSIS * * #include "cortex.h" * ilst_Pool_t Pool; * ilst_List_t List; -- preallocated list control block -- * ilst_Key_t MinKey; * ilst_Key_t MaxKey; * ilst_AllocateList(&Pool, &List, MinKey, MaxKey, NULL); * * #include "cortex.h" * ilst_Pool_t Pool; * ilst_List_t *pList; -- dynamically allocated list control block -- * crtx_Signed_t MinKey; * crtx_Signed_t MaxKey; * pList = ilst_AllocateList(&Pool, NULL, MinKey, MaxKey, NULL); * * DESCRIPTION * * Allocate index linked list from specified lists pool. * * ARGUMENTS * * o Pointer to the pool control block index list is allocated from; * o Pointer to index linked list control block (if NULL than * list control block will be allocated); * o Minimum key value; * o Maximum key value; * * RETURN VALUE * * o Pointer to index linked list control block; * o NULL if memory allocation error detected or all available * lists have been allocated; * * USAGE * * o Used by CORTEX to create internal control structures; * o Application level; * * CONSTRAINS * * o Does not provide multi-thread access protection; * o Lists Pool must be previously created by ilst_CreatePool(); * * AUTOR * * Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * VA 28-Jan-1997 Created initial version * **************************************************************************/</font><font size="+1"><i>ilst_List_t</i> *<b><font color="azure1"><a name="ilst_AllocateList">ilst_AllocateList</a></font></b>( <i>ilst_Pool_t</i> *pPool_a, <font color="#6920ac">/* lists pool */</font> <i>ilst_List_t</i> *pList_a, <font color="#6920ac">/* list control block */</font> <i>ilst_Key_t</i> MinKey_a, <font color="#6920ac">/* min key value */</font> <i>ilst_Key_t</i> MaxKey_a <font color="#6920ac">/* max key value */</font>){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <i>ilst_Node_t</i> *pHead; <i>ilst_Node_t</i> *pTail; <i>ilst_Index_t</i> ListIndex; <i>ilst_Index_t</i> HeadIndex; <i>ilst_Index_t</i> TailIndex;<font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <font color="#6920ac">/* Validate Arguments */</font> <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pPool_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="ILST_CHECK_POOL_ID.FIND-DEF">ILST_CHECK_POOL_ID</a>(pPool_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>(MinKey_a < MaxKey_a) <b>if</b> (pPool_a->NextList >= pPool_a->NrLists) <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> TooMany_Exc; <font color="#6920ac">/* no free lists left */</font> <font color="#6920ac">/* Prepare list control block */</font> <b>if</b> (pList_a == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { <font color="#6920ac">/* allocate pool control block */</font> pList_a = (<i>ilst_List_t</i>*)<a href="dmem_Alloc.FIND-FUNC">dmem_Alloc</a>(pPool_a->Attr.Segment, <i>sizeof</i>(<i>ilst_List_t</i>), <i>sizeof</i>(<i>crtx_Unsigned_t</i>)); <b>if</b> ((<i>crtx_Void_t</i>*)pList_a == (<i>crtx_Void_t</i>*)<a href="DMEM_ILLEGAL.FIND-DEF">DMEM_ILLEGAL</a>) { <font color="#6920ac">/* memory allocation error */</font> <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> MemAllocError_Exc; } <font color="#6920ac">/* mark as internally allocated list control block */</font> pList_a->Flags = <a href="ILST_FLAG_INIT.FIND-DEF">ILST_FLAG_INIT</a> | <a href="ILST_FLAG_LIST_ALLOC.FIND-DEF">ILST_FLAG_LIST_ALLOC</a>; } <b>else</b> { <font color="#6920ac">/* mark as externally allocated list control block */</font> pList_a->Flags = <a href="ILST_FLAG_INIT.FIND-DEF">ILST_FLAG_INIT</a>; } ListIndex = pPool_a->NrNodes + (2 * pPool_a->NextList++); HeadIndex = ListIndex++; TailIndex = ListIndex; pHead = pPool_a->pTable+HeadIndex; pTail = pPool_a->pTable+TailIndex; <font color="#6920ac">/* init head node */</font> pHead->Next = TailIndex; pHead->Prev = <a href="ILST_INDEX_NODE_EMPTY.FIND-DEF">ILST_INDEX_NODE_EMPTY</a>; pHead->Key = MinKey_a; <font color="#6920ac">/* init tail node */</font> pTail->Next = <a href="ILST_INDEX_NODE_EMPTY.FIND-DEF">ILST_INDEX_NODE_EMPTY</a>; pTail->Prev = HeadIndex; pTail->Key = MaxKey_a; <font color="#6920ac">/* init list control block */</font> pList_a->pPool = pPool_a; pList_a->pTable = pPool_a->pTable; pList_a->Index = HeadIndex;<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 0</font> <a href="ILST_SET_LIST_ID.FIND-DEF">ILST_SET_LIST_ID</a>(pList_a); pList_a->NrNodes = pPool_a->NrNodes;<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font> <b>return</b> pList_a;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font><font color="blue">MemAllocError_Exc:</font> <font color="#6920ac">/* memory allocation error exception */</font><font color="blue">TooMany_Exc:</font> <font color="#6920ac">/* all avaiable lists have been allocated */</font> <b>return</b> <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;}<font color="#6920ac">/************************************************************************** * * SERVICE NAME * * ilst_FreeList * * SYNOPSIS * * #include "cortex.h" * ilst_Pool_t Pool; * ilst_List_t *pList; -- dynamically allocated list control block -- * crtx_Signed_t MinKey; * crtx_Signed_t MaxKey; * pList = ilst_AllocateList(&Pool, NULL, MinKey, MaxKey, NULL); * ... * ilst_FreeList(pList); * * DESCRIPTION * * Free ILL list, This procedure only release list control block's * memory. Allociated list node are not freed and not available for * for future allocations. * * ARGUMENTS * * o Pointer to index linked list control block * * RETURN VALUE * * None * * USAGE * * o Used by CORTEX to create internal control structures; * o Application level; * * CONSTRAINS * * o Does not provide multi-thread access protection; * o Lists Pool must be previously created by ilst_CreatePool(); * * AUTOR * * Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * VA 28-Jan-1997 Created initial version * **************************************************************************/</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="ilst_FreeList">ilst_FreeList</a></font></b>( <i>ilst_List_t</i> *pList_a <font color="#6920ac">/* list control block */</font>){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <font color="#6920ac">/* Validate Arguments */</font> <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pList_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="ILST_CHECK_LIST_ID.FIND-DEF">ILST_CHECK_LIST_ID</a>(pList_a))<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font> <b>if</b> (pList_a->Flags & <a href="ILST_FLAG_LIST_ALLOC.FIND-DEF">ILST_FLAG_LIST_ALLOC</a>) { <font color="#6920ac">/* release internaly allocated list control block */</font> <a href="dmem_Free.FIND-FUNC">dmem_Free</a>(pList_a->pPool->Attr.Segment, (<i>crtx_Void_t</i>*)pList_a, <i>sizeof</i>(<i>ilst_List_t</i>)); } <b>else</b> { pList_a->Index = <a href="ILST_INVALID_INDEX.FIND-DEF">ILST_INVALID_INDEX</a>; pList_a->pTable = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; <font color="#6920ac">/* no node table */</font> pList_a->pPool = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>; <font color="#6920ac">/* no pool */</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 0</font> <a href="CRTX_SET_NO_ID.FIND-DEF">CRTX_SET_NO_ID</a>(pList_a); <font color="#6920ac">/* no id */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font> } <b>return</b>;<font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}<font color="#6920ac">/************************************************************************** * * SERVICE NAME * * ilst_IsEmpty * * SYNOPSIS * * #include "cortex.h" * crtx_Boolean Result; * list_List_t List; * * Result = iist_IsEmpty(&List); * * DESCRIPTION * * Test whether an index linked list is empty or not. * * ARGUMENTS * * o Pointer to index linked list control block; * * RETURN VALUE * * TRUE - the specified list is empty * FALSE - the specified list is not empty * * USAGE * * o Used by CORTEX to handle internal control structures; * o Application level; * * CONSTRAINS * * o Does not provide multi-thread access protection; * o List must be previously allocated by ilst_AllocateList * * AUTOR * * Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * VA 30-Jan-1997 Created initial version * **************************************************************************/</font><font size="+1"><i>crtx_Boolean_t</i> <b><font color="azure1"><a name="ilst_IsEmpty">ilst_IsEmpty</a></font></b>(
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?