ssp_dll.c

来自「abstract rtos」· C语言 代码 · 共 180 行

C
180
字号
#include "syscfg.h"#ifdef __cplusplus#if __cplusplusextern "C"{#endif #endif #include "aos.h"DLL_NODE_S *dll_find(DLL_S *pList, VOID *pKey, 	S32 (*fnValCmp)(VOID *, DLL_NODE_S *)){	DLL_NODE_S *pNode;		DLL_Scan(pList, pNode, DLL_NODE_S *)	{		if (!fnValCmp(pKey, pNode))			return pNode;	}	return NULL;}VOID dll_insert_in_middle (DLL_S  *pList, DLL_NODE_S *pPrev, DLL_NODE_S *pMid, DLL_NODE_S *pNext){    pList->ulCount++;    pMid->pNext  = pNext;    pMid->pPrev  = pPrev;    pPrev->pNext = pMid;    pNext->pPrev = pMid;}VOID dll_delete_in_middle (DLL_S  *pList, DLL_NODE_S *pPrev, DLL_NODE_S *pNode, DLL_NODE_S *pNext){    pPrev->pNext = pNext;    pNext->pPrev = pPrev;    DLL_Init_Node(pNode);    (pList)->ulCount--;}VOID dll_insert (DLL_S  *pList, DLL_NODE_S *pPrev, DLL_NODE_S *pNode){    if(pPrev == NULL)    {        pPrev = &pList->Head;    }    dll_insert_in_middle(pList,pPrev,pNode,pPrev->pNext);}VOID dll_delete(DLL_S *pList, DLL_NODE_S *pNode){    if (DLL_Is_Node_In_List(pNode))    {        dll_delete_in_middle(pList, pNode->pPrev, pNode, pNode->pNext);    }} DLL_NODE_S *dll_get (DLL_S *pList){    DLL_NODE_S *pRetNode;    if(DLL_Count(pList) == 0)    {        return(NULL);    }    pRetNode = pList->Head.pNext;    dll_delete_in_middle(pList,&pList->Head,pList->Head.pNext,pList->Head.pNext->pNext);    return(pRetNode);}VOID dll_free_all(DLL_S *pList, VOID (*fnFree)(VOID *)){    DLL_NODE_S *pTempNode,*pNode,*pHead;    for(pHead = &pList->Head,pNode = pList->Head.pNext; pNode != pHead; pNode = pTempNode)    {        pTempNode = pNode->pNext;        fnFree(pNode);    }    DLL_Init(pList);}S32 dll_walk(DLL_S *pList, VOID (*fnVisit)(DLL_NODE_S *)){    DLL_NODE_S *pNode;    S32 nCnt;        nCnt = 0;    DLL_Scan(pList, pNode, DLL_NODE_S *)    {        fnVisit(pNode);        nCnt++;    }    return nCnt;}#ifdef __cplusplus#if __cplusplus}#endif #endif 

⌨️ 快捷键说明

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