AMPS:单向链表源码解读 (二)

2014-11-24 08:28:21 · 作者: · 浏览: 1
k r_pfAMPS_LListCompareCallback);
int SList_InsertSortedAppend(void** r_ppvList, void* r_pvKey, void* r_pvData, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback);
void SList_SortPrepend(void** r_ppvList, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback);
void SList_SortAppend(void** r_ppvList, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback);
int SList_Traverse(void* r_ppvList, AMPS_LListProcessCallback r_pfAMPS_LListProcessCallback, void* r_pvArg);
int SList_Copy(void** r_ppvDest, void* r_pvSrc, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback, AMPS_LListCloneCallback r_pfAMPS_LListCloneCallback);
int SList_RemoveKey(void** r_ppvList, void* r_pvData, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback);
void* SList_FindData (void* r_pvList, void* r_pvData);
void* SList_GetNextNode(void* r_pvList);
void* SList_GetNodeData(void* r_pvNode);
void SList_AppendGivenNode(void** r_ppvList, void* r_pvSListNode);
void SList_PrependGivenNode(void** r_ppvList, void* r_pvGivenNode, void* r_pvNewNode);
t_AMPSSList* SList_Prepend(t_AMPSSList** r_ppoSList, void* r_pvData);
t_AMPSSList* SList_AppendEx(t_AMPSSList** r_ppoSList, void* r_pvData);
int SList_Append(void** r_ppvList, void* r_pvData, AMPS_LListCompareCallback r_pfAMPS_LListCompareCallback);
t_AMPSSList* SList_Last(t_AMPSSList* r_poSList);
void* SList_Alloc(void* r_pvData);
t_AMPSSList* SList_Search(t_AMPSSList* r_poSList, AMPS_LListCompareLinkDataCallback r_pfAMPS_LListCompareCallback, void* r_pvSrcData);
t_AMPSSList* SList_Find (t_AMPSSList* r_poSList, t_AMPSSList* r_poSListNode);
int SList_Remove(t_AMPSSList** r_ppoSList, t_AMPSSList* r_poSListNode, AMPS_LListFreeLinkDataCallback r_pfAMPS_LListFreeLinkDataCallback);
int SList_Free(t_AMPSSList** r_ppoSList, AMPS_LListFreeLinkDataCallback r_pfAMPS_LListFreeLinkDataCallback);
int SList_FreeEx(t_AMPSSList** r_ppoSList, AMPS_LListProcessCallback r_pfAMPS_LListProcessCallback, void* r_pvData);
unsigned int SList_Count(const t_AMPSSList* r_cpoSList);
int SList_Concat(t_AMPSSList** r_ppoSListSrc, t_AMPSSList* r_poSListDst);
#ifdef __cplusplus
}
#endif
#endif /* __HEADER_AMPS_LINKLIST_H__ */
AMPS_LinkList.c
[cpp]
/*****************************************************************
文件名称: AMPS_LinkList.c
功能描述: 链表操作API函数(单向链表和双向链表)
*****************************************************************/
#include "AMPS_LinkList.h"
#include "AMPS_MemMgt.h"
/*****************************************************************
函数名称: SList_Append
功能描述: 在链表后追加结点
入参::
void **list 原链表
void* pvData 待追加的结点
AMPS_LListCompareCallback compare 链表比较回调,此函数中没有使用
出参:
void **list 追加后的链表
返回值:
int
*****************************************************************/
int SList_Append(void **list, void* pvData, AMPS_LListCompareCallback compare)
{
t_AMPSSList** slist = (t_AMPSSList**)list;
{
t_AMPSSList *new_list = NULL; // pointer to newly created node
t_AMPSSList *last = NULL; // pointer to last node of l