#ifndef __NET_UTIL_H__ #define __NET_UTIL_H__ #ifdef NET_UTIL_IMPLEMENTATION #define NET_UTIL_EXTERN #else #define NET_UTIL_EXTERN extern #endif #define MAX_TRANS_SIZE (1024*8) //16KB #define NET_URL_MAX_SIZE (256) typedef struct NetMemCtrlBlock_t_ { GL_MEMPOOL_t MemPool; /*next = (ptr); (ptr)->prev = (ptr); \ }while(0) #define chain_entry(ptr, type, member) \ container_of(ptr, type, member) #define container_of(ptr, type, member) ({ \ const typeof(((type*)0->member) *__mptr = (ptr); \ (type *)((char *)__mptr) - offsetof(type, member));}) #define offsetof(TYPE, MEMBER) ((size_t)&(TYPE *)0->MEMBER) #endif #define PARAM_MATCH_SUCCESS 1 #define PARAM_MATCH_FAIL 0 typedef int (*ListObjFreeFunction)(void *pMember, void *pParam); typedef int (*ListMatchFunction)(void *pMember, void *pParam); //if matched return 1,else return 0 typedef int (*ListInsertCondFunc)(void *pMember, void *pInsertMember); //if satisfy return 1,others return 0 typedef int (*MemberChkAttrFunc)(void *pMember); //if attribute satisfy return 1,else return 0 typedef int (*MemberBuFunc)(void *pMember, void *pParam, void **ppMember); //backup member need attribute typedef int (*SortCompareFunc)(void *pMember1, void *pMember2); //if member1 > member2 return 1,else if pMember1 < pMember2 return -1, else return 0 typedef int (*MemberChkRepeat)(void *pMember, void *pParam); //if attribute of pmember satify pParam return 1,others return 0; typedef struct ListCfg_t_ { ListMatchFunction pfMatchFunc; //match funtion ListInsertCondFunc pfCondFunc; //instert condition,be used for insert obj to list. MemberChkAttrFunc pfChkAttrFunc; //attribute check funtion, be used for check some member whether marked. MemberBuFunc pfBuFunc; //backup member function, be used for backup be copyed obj. SortCompareFunc *pfCompFunc; //compare function, MemberChkRepeat pfChkReFunc; //repeat check function. ListObjFreeFunction pfMemFreeFunc; //memory Free Func, } ListCfg_t; typedef struct ListHead_struct ListHead_t; struct ListHead_struct { ListHead_t *pNext, *pPrev; }; typedef struct DLink_st DLink; NET_UTIL_EXTERN void Net_Util_MemFree(NetMemCtrlBlock_t* pMemCB,void * pAddr); NET_UTIL_EXTERN void *Net_Util_MemCalloc(NetMemCtrlBlock_t* pMemCB,UINT32 dSize); NET_UTIL_EXTERN void *Net_Util_MemAlloc(NetMemCtrlBlock_t* pMemCB,UINT32 dSize); NET_UTIL_EXTERN void *Net_Util_MemRealloc(NetMemCtrlBlock_t* pMemCB,void *pAddr,UINT32 dSize); NET_UTIL_EXTERN INT32 Net_Util_MemInitialize(NetMemCtrlBlock_t* pMemCB, char *pszName, UINT32 dMEMPoolSize); NET_UTIL_EXTERN void Net_Util_MemFinalize(NetMemCtrlBlock_t* pMemCB); NET_UTIL_EXTERN INT32 Net_Util_Native2Utf8(char *pSrcStr, char *pDestStr, UINT32 dDstBuflen, int sdEncoding); NET_UTIL_EXTERN INT32 Net_Util_ConvertURLText(const char* pszScr, char* pszDes); NET_UTIL_EXTERN DLink *Net_Util_CreateList(ListCfg_t *pfCfg); NET_UTIL_EXTERN INT32 Net_Util_CheckDListInit(DLink *dl); NET_UTIL_EXTERN ListHead_t *Net_Util_GetDListHead(DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_CheckMemberExist(DLink *dl, void *pParam, UINT32 *pdExist); NET_UTIL_EXTERN INT32 Net_Util_GetListMemberCnt(DLink *dl, UINT32 *pdCnt); NET_UTIL_EXTERN INT32 Net_Util_AddObj2ListHead(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_AddObj2ListTail(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2ListWithRepeatDetach(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2AscendSortedList(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2DescendSortedList(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2AscendSortedListWithRepeatDetach(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2DescendSortedListWithRepeatDetach(void *pMember, DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2PosBefore(void *pMember, ListHead_t *pPosition); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2PosAfter(void *pMember, ListHead_t *pPosition, ListHead_t *pHead); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2CondBefore(DLink *dl, void *pInsertMember); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2CondAfter(DLink *dl, void *pInsertMember); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2ObjBefore(DLink *dl, void *pInsertMember, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_InsertObj2ObjAfter(DLink * dl, void * pInsertMember, void * pParam); NET_UTIL_EXTERN void *Net_Util_GetMemberById(DLink *dl, void *pParam); NET_UTIL_EXTERN void *Net_Util_GetMemberByOffset(DLink *dl, UINT32 dOffset); NET_UTIL_EXTERN ListHead_t *Net_Util_GetMemberPos(DLink *dl, void *pMember); NET_UTIL_EXTERN INT32 Net_Util_GetMemberOffset(DLink *dl, void *pMember, UINT32 *pdOffset); NET_UTIL_EXTERN void *Net_Util_GetMemberByPos(DLink *dl, ListHead_t *pPosition); NET_UTIL_EXTERN ListHead_t *Net_Util_GetPosById(DLink *dl, void *pParam); NET_UTIL_EXTERN void *Net_Util_Get1stMember(DLink *dl); NET_UTIL_EXTERN DLink * Net_Util_SplitList(DLink *dl, ListHead_t *pPos); NET_UTIL_EXTERN INT32 Net_Util_MoveNode2ListHead(DLink *dl, void *pMember); NET_UTIL_EXTERN INT32 Net_Util_MoveNode2ListTail(DLink *dl, void *pMember); NET_UTIL_EXTERN INT32 Net_Util_RemoveNodeByOffset(DLink *dl, UINT32 dOffset, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_Remove1stNode(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_RemoveTailNode(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_RemoveNodeByPos(DLink *dl, ListHead_t *pPosition, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_RemoveObjFromList(DLink*dl, void *pId, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_Remove1stObjFromListByCond(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_RemoveAllObjsFromList(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_RemoveObjsFromListByCond(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_DestroyList(DLink *dl, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_BackUpList(DLink *pListA, DLink *pListB, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_BackUpListByCond(DLink *pListA, DLink *pListB, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2List(DLink *pSrcList, DLink *pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2AscendSortedList(DLink *pSrcList, DLink *pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2DescendSortedList(DLink *pSrcList, DLink *pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2ListByCond(DLink *pSrcList, DLink *pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2AscendSortedListWitchCondDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2DescendSortedListWitchCondDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2ListWithEqualDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2ListWithEqualAndCondDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2AscendSortedListWithEqualAndCondDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN INT32 Net_Util_AddList2DescendSortedListWithEqualAndCondDetach(DLink * pSrcList, DLink * pDesList, void *pParam); NET_UTIL_EXTERN void *Net_Util_RandPlayMember(DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_SortListByDescend(DLink *dl); NET_UTIL_EXTERN INT32 Net_Util_SortListByAscend(DLink *dl); //NET_UTIL_EXTERN INT32 Net_Util_DestroyBackupList(ListHead_t *pHead); NET_UTIL_EXTERN INT32 Net_Util_ReverseList(DLink *dl); #endif