AMPS:双向链表源码解读 (二)
ListDest, AMPS_LListDuplicate r_pfAMPS_LListDuplicate);
int DList_RemoveFromData(t_AMPSDList* r_poDList, void* r_pvData, AMPS_LListRemoveLinkDataCallback r_pfAMPS_LListRemoveLinkDataCallback);
#ifdef __cplusplus
}
#endif
#endif /* __HEADER_AMPS_LINKLIST_H__ */
#ifndef __HEADER_AMPS_LINKLIST_H__
#define __HEADER_AMPS_LINKLIST_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include "AMPS_API.h"
#include "AMPS_Defines.h"
typedef struct _AMPSSList
t_AMPSSList;
typedef struct _AMPSDList
t_AMPSDList;
/*单向链表结构*/
struct _AMPSSList
{
void*
pvData;
t_AMPSSList*
poAMPSSListNext;
t_AMPSSList*
poAMPSSListPrev;
};
/*双向链表结构*/
struct _AMPSDList
{
unsigned char
uchCount; /*结点个数*/
t_AMPSSList*
poAMPSSListHead;
};
t_AMPSDList* DList_Init(t_AMPSDList** r_ppoDList);
int DList_Concat(t_AMPSDList** r_ppoDListSrc, t_AMPSDList* r_poDListDst);
t_AMPSSList* DList_Append(t_AMPSDList* list, void* r_pvData);
t_AMPSSList* DList_Prepend(t_AMPSDList* r_poDList, void* r_pvData);
void DList_PrependGivenNode(t_AMPSDList* r_poDList, void* r_pvData, t_AMPSSList* r_poSListNode);
void DList_AppendGivenNode(t_AMPSDList* r_poDList, void* r_pvData, t_AMPSSList* r_poSListNode);
t_AMPSSList* DList_Search(t_AMPSDList* r_poDList, AMPS_LListCompareLinkDataCallback r_pfAMPS_LListCompareCallback, void* r_pvData);
t_AMPSSList* DList_Find (t_AMPSDList* r_poDList, t_AMPSSList* r_poSListNode);
int DList_Remove(t_AMPSDList** r_ppoDList, t_AMPSSList* r_poSListNode, AMPS_LListRemoveLinkDataCallback r_pfAMPS_LListRemoveLinkDataCallback);
int DList_Sort(t_AMPSDList** r_ppoDList, AMPS_LListCompareLinkDataCallback r_pfAMPS_LListCompareCallback);
void DList_SwapNodesData(t_AMPSSList* r_poNodeOne, t_AMPSSList* r_poNodeTwo);
int DList_RemoveFirstNode(t_AMPSDList** r_ppoDList, AMPS_LListRemoveLinkDataCallback AMPS_LListRemoveLinkDataCallback);
void DList_RemoveNthNode(t_AMPSDList** r_ppoDList, int r_nLocation, AMPS_LListRemoveLinkDataCallback AMPS_LListRemoveLinkDataCallback);
t_AMPSSList* DList_InsertAfter (t_AMPSDList* r_poDList, t_AMPSSList* r_poSListPositionNode, void* r_pvData);
t_AMPSSList* DList_InsertBefore (t_AMPSDList* r_poDList, t_AMPSSList* r_poSListPositionNode, void* r_pvData);
void DList_Free(t_AMPSDList** r_ppoDList, AMPS_LListRemoveLinkDataCallback AMPS_LListRemoveLinkDataCallback);
void DList_FreeEx(t_AMPSDList** r_ppoDList, AMPS_LListProcessCallback r_pfAMPS_LListProcessCallback, void* r_pvData);
void DList_FreeNodes(t_AMPSDList** r_ppoDList, AMPS_LListRemoveLinkDataCallback AMPS_LListRemoveLinkDataCallback);
void DList_Traverse(t_AMPSDList* r_poDList, AMPS_LListProcessCallback r_fpDList_ProcessCallback, void* r_pvArg);
int DList_RemoveWithOutFree(t_AMPSDList* r_poDList, t_AMPSSList* r_poSListNode);
int SList_RemoveWithOutFree(t_AMPSSList** r_ppoAMPSSListHead, t_AMPSSList* r_poAMPSSListNode);
void* DList_GetNthNode(t_AMPSDList* r_poAMPSDList, int r_nNodeLocation);
int DList_Copy(t_AMPSDList* r_poAMPSDListSrc, t_AMPSDList* r_poAMPSDListDest, AMPS_LListDuplicate r_pfAMPS_LLis