AMPS:双向链表源码解读 (八)

2014-11-24 08:28:16 · 作者: · 浏览: 10
功能描述: 在双向链表指定结点前插入一个新结点
入参::
t_AMPSDList* list 原链表
t_AMPSSList *positionNode 指定的结点
t_AMPSSList *positionNode 待插入的新结点数据
出参:
NA
返回值:
t_AMPSDList* 操作后的链表
*****************************************************************/
t_AMPSSList* DList_InsertBefore (t_AMPSDList *list, t_AMPSSList *positionNode, void *pvData)
{
t_AMPSSList *pNewNode = NULL;
t_AMPSSList *pPosNode = positionNode;
if (NULL == positionNode)
{
//printf("DList_InsertAfter: input parameters are invalid \n");
return NULL;
}
pNewNode = AMPS_InternalMalloc(sizeof(t_AMPSSList));
pNewNode->pvData = pvData;
pNewNode->poAMPSSListPrev = pPosNode->poAMPSSListPrev;
pNewNode->poAMPSSListNext = pPosNode;
if (NULL != pPosNode->poAMPSSListPrev)
pPosNode->poAMPSSListPrev->poAMPSSListNext = pNewNode;
pPosNode->poAMPSSListPrev = pNewNode;
list->uchCount++;
return pNewNode;
}
/*****************************************************************
函数名称: DList_Free
功能描述: 释放双向链表
入参::
t_AMPSDList** list 原链表
AMPS_LListRemoveLinkDataCallback func_ptr 结点操作回调
出参:
t_AMPSDList** 操作后的链表
返回值:
NA
*****************************************************************/
void DList_Free(t_AMPSDList **list, AMPS_LListRemoveLinkDataCallback func_ptr)
{
t_AMPSDList* dlist = *list;
t_AMPSSList *list_ptr = NULL;
if (NULL != dlist)
{
list_ptr = dlist->
poAMPSSListHead;
}
/*使用单向链表释放函数*/
SList_Free(&list_ptr, func_ptr);
AMPS_InternalFree(dlist);
dlist = NULL;
}
/*****************************************************************
函数名称: DList_Free
功能描述: 释放双向链表(释放前可对结点进行操作)
入参::
t_AMPSDList** list 原链表
AMPS_LListRemoveLinkDataCallback func_ptr
void* r_pvData 回调函数参数
出参:
t_AMPSDList** 操作后的链表
返回值:
NA
*****************************************************************/
void DList_FreeEx(t_AMPSDList** r_ppoDList, AMPS_LListProcessCallback r_pfAMPS_LListProcessCallback, void* r_pvData)
{
t_AMPSDList* dlist = *r_ppoDList;
t_AMPSSList *list_ptr = NULL;
if (NULL != dlist)
{
list_ptr = dlist->poAMPSSListHead;
}
SList_FreeEx(&list_ptr, r_pfAMPS_LListProcessCallback, r_pvData);
AMPS_InternalFree(dlist);
dlist = NULL;
}
/*****************************************************************
函数名称: DList_FreeNodes
功能描述: 释放双向链表结点
入参::
t_AMPSDList** list 原链表
AMPS_LListRemoveLinkDataCallback func_ptr
出参:
t_AMPSDList** 操作后的链表
返回值:
NA
*****************************************************************/
void DList_FreeNodes(t_AMPSDList **list, AMPS_LListRemoveLinkDataCallback func_ptr)
{
SList_Free(&(*list)->poAMPSSListHead, func_ptr);
(*list)->poAMPSSListHead = NULL;
(*list)->uchCount = 0;
}
/************************************************************