AMPS:双向链表源码解读 (九)
*****
函数名称: DList_Traverse
功能描述: 遍历双向链表,在遍历中能过回调函数可对结点进行逐一处理
入参::
t_AMPSDList** list 原链表
AMPS_LListProcessCallback r_fpDList_ProcessCallback 结点处理函数
void* r_pvArg 回调函数参数
出参:
t_AMPSDList* 操作后的链表
返回值:
NA
*****************************************************************/
void DList_Traverse(t_AMPSDList* r_poDList, AMPS_LListProcessCallback r_fpDList_ProcessCallback, void* r_pvArg)
{
t_AMPSSList* poSList = r_poDList->poAMPSSListHead;
t_AMPSSList* poSListTemp1 = NULL;
t_AMPSSList* poSListTemp2 = NULL;
if(!poSList)
{
return;
}
for(poSListTemp1 = poSList; poSListTemp1; )
{
poSListTemp2 = poSListTemp1->poAMPSSListNext;
r_fpDList_ProcessCallback(poSListTemp1->pvData, r_pvArg);
poSListTemp1 = poSListTemp2;
}
}
/*****************************************************************
函数名称: DList_RemoveWithOutFree
功能描述: 释放双向链表指定结点,但不释放各节点内容
入参::
t_AMPSDList* r_poDList 原链表
t_AMPSSList* r_poSListNode 指定的结点
出参:
返回值:
int
*****************************************************************/
int DList_RemoveWithOutFree(t_AMPSDList* r_poDList, t_AMPSSList* r_poSListNode)
{
if(AMPS_SUCCESS != SList_RemoveWithOutFree(&r_poDList->poAMPSSListHead, r_poSListNode))
{
return AMPS_ERROR_FAILURE;
}
r_poDList->uchCount--;
return AMPS_SUCCESS;
}
/*****************************************************************
函数名称: DList_PrependGivenNode
功能描述: 前向插入指定结点,并为结点赋值
入参::
t_AMPSDList* r_poDList 原链表
void* pvData 结点内容
t_AMPSSList* r_poSListNode 指定的结点,通常内容为空,在外层分配空间
出参:
返回值:
int
*****************************************************************/
void DList_PrependGivenNode(t_AMPSDList* r_poAMPSDList, void* pvData, t_AMPSSList* r_poAMPSSListNode)
{
t_AMPSSList* poAMPSSListHead = r_poAMPSDList->poAMPSSListHead;
r_poAMPSSListNode->pvData = pvData;
r_poAMPSSListNode->poAMPSSListNext = poAMPSSListHead;
r_poAMPSSListNode->poAMPSSListPrev = NULL;
if(NULL != poAMPSSListHead)
{
poAMPSSListHead->poAMPSSListPrev = r_poAMPSSListNode;
}
r_poAMPSDList->poAMPSSListHead = r_poAMPSSListNode;
r_poAMPSDList->uchCount += 1;
}
/*****************************************************************
函数名称: DList_AppendGivenNode
功能描述: 后向追加指定结点,并为结点赋值
入参::
t_AMPSDList* r_poDList 原链表
void* pvData 结点内容
t_AMPSSList* r_poSListNode 指定的结点,通常内容为空,在外层分配空间
出参:
返回值:
int
*****************************************************************/
void DList_AppendGivenNode(t_AMPSDList* r_poAMPSDList, void* pvData, t_AMPSSList* r_poAMPSSListNode)
{
t_AMPSSList *poAMPSSListLastNode = NULL; // pointer to last node of link list
t_AMPSSList* poAMPSSListHead = r_poAMPSDList->poAMPSSListHead;
r_poAMPSSListNode->pvData = pvData;
r_poAMPSSListNode-