/******************************************/ /*Title : bisearch.h */ /*Descr : BiSearch arithmetic Structure */ /*Author : Liu Wei */ /*Create : 2006-12-13 */ /*Version : R1V00_01 */ /*Modify : 2006-12-13 */ /******************************************/ #ifndef _BISEARCH_H_ #define _BISEARCH_H_ #define LL long long #define u8 unsigned char typedef struct BiSearch { LL llKey; //BiSearch Array Node Key int nDUPosIndex; //Data Unit array Position Index } BiSearch; #define BS_SIZE sizeof(BiSearch) typedef struct BiSearchArray { int nArrayCount; int nArrayTotalLen; BiSearch *pBiArray; //SearchArray pointer int (*GetIdleNodeFunc)(int* nDUIndex); } BiSearchArray; /*********************************************************************/ /*BiSearchReg : Init BiSearch Struct, Alloc BiSearch Memery */ /*Return : [0]:BiSearchReg fail [1] :BiSearchReg Success */ /*********************************************************************/ extern int BISearchReg ( BiSearchArray * pBSA, int nTotalSize ,void *GetIdleNodeFunc ); /*********************************************************************/ /*BiSearchUnReg : Release BiSearch Memery */ /*Return : [0]:BiSearchUnReg fail [1] :BiSearchUnReg Success */ /*********************************************************************/ int BISearchUnReg ( BiSearchArray * pBSA); /*********************************************************************/ /*BSearch : BiSearch from nStart to nEnd with the llKey */ /* Search Result save in the val "nPosResult" */ /*Return : [0]:BSearch fail [1] :BSearch Success */ /*********************************************************************/ int BSearch ( BiSearchArray * pBSA, int nStart, int nEnd, LL llKey, int *nPosResult ); /*********************************************************************/ /*BSearchArray : BiSearch from 0 to ArrayEndIndex with the llKey */ /* Search nPos Result save in the val "nPosResult" */ /*Return : [0]:BSearchArray fail [1] :BSearchArray Success */ /*********************************************************************/ int BSearchArray ( BiSearchArray * pBSA, LL llKey, int *nPosResult ); /*********************************************************************/ /*BISInsert : Insert a BiSearch Array Element with the llKey */ /* return Data Unit Array Index Get by GetIdleNodeFunc*/ /*Return : [0]:BISInsert fail [1]:BISInsert Success */ /*********************************************************************/ int BISInsert ( BiSearchArray * pBSA, LL llKey, int nDUPosIndex ); /*********************************************************************/ /*BISDelete : Delete a BiSearch Array Element with the llKey */ /*Return : [0]:BISDelete fail [1]:BISDelete Success */ /*********************************************************************/ int BISDelete ( BiSearchArray * pBSA, LL llKey ); /*********************************************************************/ /*BISSearch : BiSearch from 0 to ArrayEndIndex with the llKey */ /* Search DUIndex Result save in the val "nDUPosIndex"*/ /*Return : [0]:BISSearch fail [1]:BISSearch Success */ /*********************************************************************/ int BISSearch ( BiSearchArray * pBSA, LL llKey , int* nDUPosIndex); /*********************************************************************/ /*GetBISearchCount : Get The BiSearch struct counter */ /*Return : return The BiSearch struct counter */ /*********************************************************************/ int GetBISearchCount ( BiSearchArray * pBSA); /*********************************************************************/ /*GetDUIndex : Get The Data Unit Index by bisearch struct index */ /*Return : return the BiSearch struct dataunit index */ /*********************************************************************/ int GetDUIndex ( BiSearchArray * pBSA, int nBIIndex); //BiSearch ManageMent Operation typedef enum _BIS_OP { BIS_INIT = 0, BIS_SEARCH, BIS_INSERT, BIS_DELETE, }BIS_OP; /*********************************************************************/ /*BISSearchMng : BiSearch Management Opertion fuction */ /* Init : use BIS_OP [BIS_INIT] Insert the elment */ /* with the key_str and nDUIndex */ /* Search : use BIS_OP [BIS_SEARCH] search the elemnt */ /* with the key_str ,return nDUIndex */ /* Insert : se BIS_OP [BIS_Insert] Insert a BiSearch */ /* Array Element with the llKey ,return Data */ /* Unit Array Index Get by GetIdleNodeFunc() */ /* by GetIdleNodeFunc() */ /* Delete : use BIS_OP [BIS_DELETE] Delete the elment */ /* with the key_str */ /*Return : [0] fail [1] success */ /*********************************************************************/ int BISSearchMng( BiSearchArray * pBSA, BIS_OP mng_type,LL llkey, int* nDUIndex ); #endif