亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? btreefind.c

?? b tree how to operate on b tr
?? C
字號(hào):
/*JS***********************************************************************    Program : BTREE*    Language: ANSI-C*    Author  : Joerg Schoen*    Purpose : Implement a B-Tree library.**    Part    : Search functions.**************************************************************************/#ifndef lintstatic const char rcsid[] = "$Id: btreefind.c,v 1.6 1998/05/22 08:42:15 joerg Stab joerg $";#endif/*********     INCLUDES                                         *********/#include "btreeint.h"/*********     DEFINES                                          *********/#ifndef bayTreeFind/*  START-DEFINITIONS 1 *//* **  Find the first element that matches the condition  ** */#define bayTreeFind(bt,content) bayTreeSeek(bt,content,-1,NULL, \					    (bt)->BAT_Compare,(bt)->BAT_User,0)/* ***  A stack to hold the current position in the tree  *** */typedef struct {  long BTP_PageNr;  long BTP_Position;} BayTreePos;/* ***  A handle to access an ascending/ descending sequence of entries  *** */typedef struct {  int         BTL_Type;  BayerTree  *BTL_BTree;  char       *BTL_Start,*BTL_End;  /*  start and end  */  char       *BTL_Old; /*  if removing duplicate entries  */  /*  User may request different comparison function and user pointer when   *   searching. These routines might only use the first part of every field   *   when doing the comparisons, for example.   */  int       (*BTL_Compare)(void *user,const void *a,const void *b);  void       *BTL_User;  BayTreePos *BTL_TPos;  /*  TPos and TDepth hold the current position  */  int         BTL_TDepth;} BayTreeHandle;/* ***  For routine bayTreeFStart  *** */#define BAYTREEF_INVERT    (1<<0)   /*  invert traversal  */#define BAYTREEF_SLOWER    (1<<1)   /*  condition for start is lower  */#define BAYTREEF_ELOWER    (1<<2)   /*  condition for end is lower  */#define BAYTREEF_DISTINCT  (1<<3)   /*  remove multiple entries  *//* ***  Internal flag to mark that stream is already rewound  *** */#define BAYTREEF_ATSTART   (1<<11)/* ***  Closing a stream currently frees only the memory  *** */#define bayTreeFEnd(btl,mode) (free((btl)->BTL_TPos),free((btl)->BTL_Old), \			       (mode) ? 0 :(free(btl),0))/*  Modes for routine bayTreeUpdate: Ensure that the inserted entity is *   unique regarding solely its contents */#define BAYTREEM_UNIQUE    (1<<0)/*  END-DEFINITIONS  */#endif#define Prototype extern/*********     PROTOTYPES                                       *********/Prototype BayTreeHandle *bayTreeFStart(BayerTree *bt,BayTreeHandle *btl,				       char *start,char *end,				       int (*fCompare)(void *u,						       const void *a,						       const void *b),				       void *user,int mode);Prototype long           bayTreeFNext(BayTreeHandle *btl,char *content,				      int mode);Prototype int            bayTreeFRewind(BayTreeHandle *btl);Prototype long           bayTreeSeek(BayerTree *bt,const char *content,				     long number,BayTreePos **pStack,				     int (*fCompare)(void *u,						     const void *a,						     const void *b),				     void *user,int mode);/*JS**********************************************************************   Start a find in the tree with start <= x <= end. If BAYTREEF_INVERT*    in mode is set, the entries are scanned in inverse order.*************************************************************************/BayTreeHandle *bayTreeFStart(BayerTree *bt,BayTreeHandle *btl,			     char *start,char *end,			     int (*fCompare)(void *u,const void *a,					     const void *b),			     void *user,int mode)/************************************************************************/{  int sMode;  /*  User may request different comparison routine  */  if(user == NULL) user = bt->BAT_User;  if(fCompare == NULL) fCompare = bt->BAT_Compare;  sMode = !(mode & BAYTREEF_INVERT) ?    ((mode & BAYTREEF_SLOWER) ? BAYSEEK_LASTELP1 : 0) :    ((mode & BAYTREEF_ELOWER) ? 0 : BAYSEEK_LASTELP1);  if((btl == NULL && (btl = (BayTreeHandle *)malloc(sizeof(*btl))) == NULL) ||     /*  Find position in tree  */     (btl->BTL_TDepth = bayTreeSeek(bt,(mode & BAYTREEF_INVERT) ? end : start,				    -1,&(btl->BTL_TPos),fCompare,user,sMode))     < 0)    return(NULL);  /*  Set up structure  */  btl->BTL_Type = (mode & (BAYTREEF_INVERT|BAYTREEF_SLOWER|BAYTREEF_ELOWER |			   BAYTREEF_DISTINCT)) | BAYTREEF_ATSTART;  btl->BTL_BTree   = bt;  btl->BTL_Start   = start;  btl->BTL_End     = end;  btl->BTL_Old     = NULL;  btl->BTL_Compare = fCompare;  btl->BTL_User    = user;  return(btl);}/*JS**********************************************************************   Returns next set number from the sequential stream, -2 on EOF, -1 on*    error. If mode != 0, the current position in the tree is not moved.*************************************************************************/long bayTreeFNext(BayTreeHandle *btl,char *content,int mode)/************************************************************************/{  BayerTree *bt;  long next,cLen;  int depth;  /*  Tree traversal: If traversing in ascending order   *   ((btl->BTL_Type & BAYTREEF_INVERT) == 0) we start with curr = -1 and   *   go up until curr = *p - 1, if traversing in descending order   *   ((btl->BTL_Type & BAYTREEF_INVERT) == BAYTREEF_INVERT) we start with   *   curr = *p and go down until curr = 0.   */  bt = btl->BTL_BTree;  cLen = bt->BAT_FieldLength;  depth = btl->BTL_TDepth;  /*  Loop until the next element is loaded  */  for(next = -1 ; next < 0 ;) {    char *p,*s;    BTreePage page;    long curr,fLen;    /*  Load current page and get current position  */    if((p = bayGetPage(bt,btl->BTL_TPos[depth].BTP_PageNr,0)) == NULL)      return(-1);    curr = btl->BTL_TPos[depth].BTP_Position;    fLen = BTPAGE_ISLEAF(bt,p) ? BTLEN_FIELDL(bt) : BTLEN_FIELD(bt);    if(!(btl->BTL_Type & BAYTREEF_INVERT)) {      /* ***  ASCENDING TRAVERSAL  *** */      if(curr >= BTPAGE_LENGTH(bt,p)) { /*  end of page reached  */	/*  Check for root page  */	if(depth == 0) goto finished;	/*  Walk up and go to next element  */	depth--;	continue;      }      s = p + BTOFF_START(bt) + curr * fLen;      if(0 <= curr) {	/*  Check for last element with condition "el <= end" */	if(btl->BTL_End) {	  int cmp = (*(btl->BTL_Compare))(btl->BTL_User,s + BTOFF_CONTENT(bt),					  btl->BTL_End);	  if(!(btl->BTL_Type & BAYTREEF_ELOWER) ? cmp > 0 : cmp >= 0)	    goto finished;	}	/*  Loading next will stop loop on next iteration  */	memcpyl(&next,s + BTOFF_SETNR(bt),sizeof(next));	if(content) memcpy(content,s + BTOFF_CONTENT(bt),cLen);      }      /*  Next element  */      if(mode == 0) (btl->BTL_TPos[depth].BTP_Position)++;      /*  Load right subpage  */#ifdef CONFIG_BTREE_EXTRALEAF      if(BTPAGE_ISLEAF(bt,p))	page = -1;      else#endif	memcpyl(&page,s + BTOFF_SUBPAGE(bt),sizeof(page));    } else {      /* ***  DESCENDING TRAVERSAL  *** */      /*  Correct value if necessary. We have to       *   pre-decrement the current position.       */      if(curr == -1) {	/*  Set to position at end of page  */	curr = btl->BTL_TPos[depth].BTP_Position = BTPAGE_LENGTH(bt,p);      } else	curr--;      /* **  End of page reached?  ** */      if(curr < 0) {	/*  Check for root page  */	if(depth == 0) goto finished;	/*  Walk up and go to next element  */	depth--;	continue;      }      s = p + BTOFF_START(bt) + curr * fLen;      if(curr < BTPAGE_LENGTH(bt,p)) {	/*  Check for last element with condition "start <= el" */	if(btl->BTL_Start) {	  int cmp = (*(btl->BTL_Compare))(btl->BTL_User,btl->BTL_Start,s +					  BTOFF_CONTENT(bt));	  if(!(btl->BTL_Type & BAYTREEF_SLOWER) ? cmp > 0 : cmp >= 0)	    goto finished;	}	/*  Loading next will stop loop on next iteration  */	memcpyl(&next,s + BTOFF_SETNR(bt),sizeof(next));	if(content) memcpy(content,s + BTOFF_CONTENT(bt),cLen);      }      /*  Load left subpage  */#ifdef CONFIG_BTREE_EXTRALEAF      if(BTPAGE_ISLEAF(bt,p))	page = -1;      else#endif	memcpyl(&page,s + BTOFF_SUBPAGEM1(bt),sizeof(page));      /*  Next element  */      if(mode == 0) btl->BTL_TPos[depth].BTP_Position = curr;    }    /*  One page down  */    if(page >= 0) {      depth++;      btl->BTL_TPos[depth].BTP_PageNr = page;      /*  If traversing in descending order, will be set to       *   page length on next call.       */      btl->BTL_TPos[depth].BTP_Position = -1;    }    /*  Remove multiple entries?  */    if((btl->BTL_Type & BAYTREEF_DISTINCT) && next >= 0 && mode == 0) {      if(btl->BTL_Old) {	if((*(btl->BTL_Compare))(btl->BTL_User,btl->BTL_Old,				 s + BTOFF_CONTENT(bt)) == 0) {	  next = -1; /*  continue looping  */	  continue; /*  skip memcpy below  */	}      } else if((btl->BTL_Old = (char *)malloc(cLen)) == NULL)	return(-1);      memcpy(btl->BTL_Old,s + BTOFF_CONTENT(bt),cLen);    }  }  if(mode == 0) {    btl->BTL_TDepth = depth;    btl->BTL_Type &= ~BAYTREEF_ATSTART;  }  return(next);finished:  /*  We have not corrected BTP_Position, so that   *   multiple calls will still yield EOF   */  btl->BTL_Type &= ~BAYTREEF_ATSTART;  return(-2);}/*JS**********************************************************************   Rewind a sequential access stream.*************************************************************************/int bayTreeFRewind(BayTreeHandle *btl)/************************************************************************/{  char *cont;  int mode;  /*  If stream is already rewound, we are done  */  if(btl->BTL_Type & BAYTREEF_ATSTART) return(0);  /*  Free old stack  */  free(btl->BTL_TPos);  if(btl->BTL_Old) {    free(btl->BTL_Old);    btl->BTL_Old = NULL;  }  if(!(btl->BTL_Type & BAYTREEF_INVERT)) {    cont = btl->BTL_Start;    mode = (btl->BTL_Type & BAYTREEF_SLOWER) ? BAYSEEK_LASTELP1 : 0;  } else {    cont = btl->BTL_End;    mode = (btl->BTL_Type & BAYTREEF_ELOWER) ? 0 : BAYSEEK_LASTELP1;  }  if((btl->BTL_TDepth = bayTreeSeek(btl->BTL_BTree,cont,-1,&(btl->BTL_TPos),				    btl->BTL_Compare,btl->BTL_User,mode)) < 0)    return(-1);  btl->BTL_Type |= BAYTREEF_ATSTART;  return(0);}/*JS**********************************************************************   Find the position of a node in the tree. If pstack != NULL, return*    the current stack depth and the stack in *pStack, otherwise return*    the set number of the node. If BAYSEEK_UNIQUE in mode is set,*    returns an error if a node whose contents match exactly already*    appears in the tree (in case we want to insert the new node).*    If BAYSEEK_LASTELP1 in mode is set, we then find the last element*    plus 1 that matches content, otherwise we find the first one.*    If BAYSEEK_EXACT in mode is set, we only return non-error if an*    element with the given content and set number appears in the tree*    (for deletion and update).*************************************************************************/long bayTreeSeek(BayerTree *bt,const char *content,long number,		 BayTreePos **pStack,		 int (*fCompare)(void *u,const void *a,const void *b),		 void *user,int mode)/************************************************************************/{  BTreePage page;  BayTreePos *stack;  int depth,sMax;  /*  Go down until we are on a leaf page  */  sMax = 0;  stack = NULL;  for(depth = 0, page = bt->BAT_Root ; page >= 0 ; depth++) {    char *p;    long fLen,pos;#ifdef DEBUG    /*  If we are on the root page and not in level 0, we     *   have a serious error!     */    if(depth > 0 && page == bt->BAT_Root) {      fprintf(stderr,"\ERROR in bayTreeSeek: Corrupted tree, entered root page!!\n");      goto error;    }#endif    if((p = bayGetPage(bt,page,0)) == NULL) goto error;    fLen = BTPAGE_ISLEAF(bt,p) ? BTLEN_FIELDL(bt) : BTLEN_FIELD(bt);    if(content) {      long upper,comp;      /*  Binary search on page  */      pos = 0; upper = BTPAGE_LENGTH(bt,p);      while(pos < upper) {        long m = (pos + upper) >> 1;        comp = (*fCompare)(user,p + (BTOFF_START(bt) + BTOFF_CONTENT(bt)) +			   m * fLen,content);	/*  Secondary order criteria is number (not	 *   if contents are unique!)	 */	if(comp == 0 && !(mode & BAYSEEK_UNIQUE) && number >= 0) {	  BTreeSetNr setNr;	  memcpyl(&setNr,p + BTOFF_START(bt) + BTOFF_SETNR(bt) + m * fLen,		  sizeof(setNr));	  comp = setNr - number;	}	if(comp < 0 || (comp == 0 && (mode & BAYSEEK_LASTELP1)))	  pos = m + 1;        else	  upper = m;      }    } else if(mode & BAYSEEK_LASTELP1) {      pos = BTPAGE_LENGTH(bt,p);    } else {      pos = 0;    }    if(pStack) {      if(depth >= sMax) {	sMax += 10;	if((stack = (BayTreePos *)realloc(stack,sMax * sizeof(*stack)))	   == NULL) goto error;      }      stack[depth].BTP_PageNr   = page;      stack[depth].BTP_Position = pos;    }    /*  Required element may already be found, so check here  */    if(pos < BTPAGE_LENGTH(bt,p)) {      BTreeSetNr setNr;      if((mode & BAYSEEK_UNIQUE) || pStack == NULL) {	if((*fCompare)(user,p + (BTOFF_START(bt) + BTOFF_CONTENT(bt)) +		       pos * fLen,content) == 0) {	  if(mode & BAYSEEK_UNIQUE) {	    /*  If element matches exactly, content is not unique  */	    JSErrNo = _ERR_BAYTREE + 2;	    goto error;	  }	  /*  Load set number and return  */	  memcpyl(&setNr,p + BTOFF_START(bt) + BTOFF_SETNR(bt) + pos * fLen,		  sizeof(setNr));	  return(setNr);	}      } else if(mode & BAYSEEK_EXACT) {        memcpyl(&setNr,p + BTOFF_START(bt) + BTOFF_SETNR(bt) + pos * fLen,		sizeof(setNr));        if(setNr == number &&	   (*fCompare)(user,p + (BTOFF_START(bt) + BTOFF_CONTENT(bt)) +		       pos * fLen,content) == 0)	  goto found;      }    }    /*  Stop if we come to a leaf page  */    if(BTPAGE_ISLEAF(bt,p)) break;    /*  Load number of left subpage to go to  */    memcpyl(&page,p + (BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt)) +	    pos * fLen,sizeof(page));  }  /*  In case of updating or looking for unique entry   *   it must have been found previously.   */  if((mode & BAYSEEK_EXACT) || pStack == NULL) {    JSErrNo = _ERR_BAYTREE + 1;    goto error;  }found:  *pStack = stack;  return(depth);error:  free(stack);  return(-1);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲日产国产综合网| 午夜日韩在线电影| 欧美日韩国产中文| 国产精品中文字幕日韩精品| 亚洲综合色自拍一区| 国产嫩草影院久久久久| 在线观看一区日韩| 东方aⅴ免费观看久久av| 午夜a成v人精品| 亚洲三级在线播放| 久久日韩粉嫩一区二区三区| 欧美另类z0zxhd电影| 成人免费福利片| 国产毛片精品一区| 蜜臀av亚洲一区中文字幕| 亚洲欧美另类小说视频| 久久久www免费人成精品| 7777精品伊人久久久大香线蕉完整版 | 国产一区二区不卡| 性做久久久久久免费观看欧美| 国产精品成人免费在线| 国产日韩三级在线| 精品精品欲导航| 欧美一二三四区在线| 欧美区一区二区三区| 欧美性受xxxx| 欧美在线免费观看亚洲| 欧美日韩一区二区三区在线看| youjizz久久| 国产精品911| 国产成人啪免费观看软件| 国内精品久久久久影院薰衣草| 三级久久三级久久| 日日摸夜夜添夜夜添国产精品| 亚洲v日本v欧美v久久精品| 亚洲综合久久av| 亚洲午夜在线视频| 亚洲成人av福利| 日韩国产欧美视频| 免费亚洲电影在线| 精品制服美女久久| 韩日欧美一区二区三区| 寂寞少妇一区二区三区| 精品在线一区二区三区| 国产精品一区二区你懂的| 国内精品国产成人| 国产传媒日韩欧美成人| 成人三级伦理片| a级精品国产片在线观看| 色综合天天做天天爱| 91国产精品成人| 91精品国产高清一区二区三区蜜臀 | 99久久精品免费精品国产| caoporn国产一区二区| 99久久99久久精品免费观看| 91免费在线视频观看| 欧美性色黄大片| 日韩视频永久免费| 日韩国产精品久久久久久亚洲| 欧美少妇xxx| 3d成人动漫网站| 欧美丰满美乳xxx高潮www| 在线观看亚洲精品视频| 欧美日韩mp4| 欧美大片免费久久精品三p | 亚洲激情在线播放| 亚洲图片一区二区| 国产人久久人人人人爽| 日韩精品电影在线| 色94色欧美sute亚洲13| 精品久久一区二区三区| 亚洲一区二区av电影| av激情成人网| 久久网站最新地址| 首页国产丝袜综合| 91久久人澡人人添人人爽欧美| 久久午夜色播影院免费高清| 日韩高清欧美激情| 色狠狠av一区二区三区| 中文字幕第一区综合| 狠狠色狠狠色综合日日91app| 欧美日韩免费一区二区三区视频| 国产精品久久看| 国产剧情一区在线| 91麻豆精品国产91久久久更新时间| 亚洲免费观看在线观看| 丰满白嫩尤物一区二区| 26uuu国产一区二区三区| 五月婷婷另类国产| 欧美日韩亚洲另类| 亚洲电影在线免费观看| 一本色道久久综合亚洲精品按摩| 国产精品美女久久久久高潮| 国产乱人伦偷精品视频免下载| 日韩免费在线观看| 蜜桃精品在线观看| 欧美成人精精品一区二区频| 日韩av一二三| 日韩欧美国产1| 老鸭窝一区二区久久精品| 91精品国产aⅴ一区二区| 日本一区中文字幕| 欧美一区二区福利视频| 蜜臀久久99精品久久久画质超高清| 宅男在线国产精品| 日本免费在线视频不卡一不卡二| 欧美精品亚洲一区二区在线播放| 天天影视涩香欲综合网| 欧美理论在线播放| 美国毛片一区二区| 日韩精品中文字幕在线不卡尤物| 麻豆极品一区二区三区| 久久人人爽人人爽| 成人综合婷婷国产精品久久| 国产精品电影一区二区| 色天天综合久久久久综合片| 亚洲综合久久av| 日韩欧美一区在线| 欧美精品乱码久久久久久按摩| 日韩专区在线视频| 欧美不卡在线视频| 国产毛片一区二区| 中文字幕综合网| 欧美日韩视频在线观看一区二区三区| 亚洲图片欧美一区| 日韩免费视频一区二区| 国产伦精一区二区三区| 亚洲欧美中日韩| 欧美日本免费一区二区三区| 狠狠色丁香久久婷婷综| 欧美激情一区三区| 欧美性猛交xxxxxx富婆| 麻豆精品一区二区av白丝在线| 久久精品欧美一区二区三区不卡 | 午夜精品福利在线| 日韩欧美成人一区二区| 成人免费不卡视频| 午夜精品一区二区三区电影天堂| 日韩一区二区在线看| 国产成人一区二区精品非洲| 亚洲精品水蜜桃| 精品国产一区二区三区av性色| 成人免费黄色在线| 日日夜夜免费精品视频| 国产欧美日韩在线观看| 欧美色欧美亚洲另类二区| 韩国午夜理伦三级不卡影院| 亚洲人一二三区| 日韩一区国产二区欧美三区| 暴力调教一区二区三区| 日韩精品一级二级| 国产精品免费av| 欧美一区二区三区四区高清| 成人免费的视频| 免费观看一级欧美片| 最新日韩在线视频| 亚洲丰满少妇videoshd| 久久影院午夜论| 欧美丝袜第三区| 成人免费精品视频| 久久机这里只有精品| 一区二区在线看| 国产三级精品视频| 这里只有精品99re| 色老汉一区二区三区| 国产美女精品人人做人人爽| 亚洲成a人在线观看| 中文字幕在线不卡国产视频| 欧美变态tickling挠脚心| 在线观看av不卡| 99re成人精品视频| 经典三级一区二区| 亚洲www啪成人一区二区麻豆| 亚洲欧洲成人精品av97| 精品国产sm最大网站免费看| 欧美日韩亚洲国产综合| 92国产精品观看| 国产成人av影院| 国内外成人在线视频| 日本成人中文字幕在线视频| 一区二区在线观看视频在线观看| 国产日韩欧美精品电影三级在线| 欧美大胆一级视频| 欧美午夜精品电影| 色88888久久久久久影院野外| 成人自拍视频在线观看| 韩日精品视频一区| 老司机精品视频在线| 日韩经典一区二区| 亚洲一区二区中文在线| 综合网在线视频| 国产精品久久国产精麻豆99网站| 久久久久久一二三区| 精品国产91久久久久久久妲己| 欧美一区二区精品在线| 91精品国产综合久久香蕉麻豆 | 欧美久久久一区| 91国产成人在线| 91麻豆精品秘密| 91一区二区三区在线播放|