📄 ssp_dll.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -