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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? btreefile.c

?? b tree how to operate on b tr
?? C
字號:
/*JS***********************************************************************    Program : BTREE*    Language: ANSI-C*    Author  : Joerg Schoen*    Purpose : Implement a B-Tree library.**    Part    : File functions: open/ close/ create/ destroy a Bayer tree.**************************************************************************/#ifndef lintstatic const char rcsid[] = "$Id: btreefile.c,v 1.7 1998/05/22 09:54:48 joerg Stab joerg $";#endif/*********     INCLUDES                                         *********/#include "btreeint.h"/*********     DEFINES                                          *********/#ifndef bayTreeCreate/*  START-DEFINITIONS 1 *//*  Structure to access a Bayer tree  */typedef struct BayerTree BayerTree;struct BayerTree {  /*  The underlying buffered file  */  BuffFile *BAT_BFile;  /*  Page shift for determination of page size and length of field  */  int       BAT_PageShift;  long      BAT_FieldLength;  /*  Maximum number of elements per intermediate page and leaf page  */  long      BAT_MaxElement,BAT_MaxElementLeaf;  /*  Number of reserved bytes at end of every page  */  long      BAT_Reserved;  long      BAT_Root; /*  root page  */  /*  Page administration routine:   *    page == -1: Allocate new page and return page number, -1   *                on error.   *    page >=  0: Free the given page. Returns -1 on error.   */  long    (*BAT_PageAdmin)(BayerTree *bt,long page);  /*  Field comparison routine   */  int     (*BAT_Compare)(void *user,const void *a,const void *b);  void     *BAT_User;};/* ***  Creation of a tree is done by specifying -1 for the root page  *** */#define bayTreeCreate(bf,pLenShift,fLength,reserved,fPageAdmin,fCompare) \	bayTreeOpen(bf,pLenShift,fLength,reserved,-1,fPageAdmin,fCompare)/* ***  Closing a tree simply frees the allocated memory  *** */#define bayTreeClose(bt,mode)   ((mode) ? 0 : (free(bt),0))/* ***  Portable way to access the root page  *** */#define bayTreeRootPage(bt)     ((bt)->BAT_Root)/*  What error number to expect when set was not found  */#define BTERR_SETNOTFOUND       (_ERR_BAYTREE + 1)/*  END-DEFINITIONS  */#endif/* ERROR-DEFINITIONS from bayTree label _ERR_BAYTREE ord 17   Page size too small   Set not found   Field content not unique   Illegal page length   Fields not sorted   Tree's depth changed*/#define Prototype extern/*********     PROTOTYPES                                       *********/Prototype BayerTree     *bayTreeOpen(BayerTree *bt,BuffFile *bf,int pLenShift,				     long fLength,long reserved,long root,				     long (*fPageAdmin)(BayerTree *bt,							long page),				     int (*fCompare)(void *u,						     const void *a,						     const void *b),				     void *user);Prototype int            bayTreeDestroy(BayerTree *bt,int flag);Prototype int            bayTreeChPage(BayerTree *bt,long page,long nPage);/*JS**********************************************************************   Set up a structure to operate on a Bayer tree.*    Input parameters:*      bf:         The underlying buffered file where the tree resides.*                  The buffer size used to open the buffered file must*                  be a multiple of the page size of the Bayer tree, so*                  we can be sure to get pages as a whole when accessing*                  them.*      pLenShift:  Determines the page size (1 << pLenShift) that is*                  used for the tree.*      fLength:    Field length of tree entries.*      reserved:   Number of reserved bytes at the end of every page.*      root:       The root page of the tree. If root == -1, fPageAdmin*                  is called to allocate a root page, thus effectively*                  creating a Bayer tree.*      fPageAdmin: The page administration routine. If this routine*                  must call 'bFileFlush', it has to set Bit 2 in mode*                  to prevent this routine from clearing the DIRTY*                  flag on pages which results in errors!*      fCompare:   Comparison routine for entries.*      user:       User defined pointer that is passed to fCompare.*************************************************************************/BayerTree *bayTreeOpen(BayerTree *bt,BuffFile *bf,int pLenShift,long fLength,		       long reserved,long root,		       long (*fPageAdmin)(BayerTree *bt,long page),		       int (*fCompare)(void *u,const void *a,				       const void *b),void *user)/************************************************************************/{  BayerTree *bt2;  /* Set up structure */  if(bt)    bt2 = bt;  else if((bt2 = (BayerTree *)malloc(sizeof(*bt2))) == NULL)    return(NULL);  bt2->BAT_BFile = bf;  bt2->BAT_PageShift = pLenShift;  bt2->BAT_FieldLength = fLength;  bt2->BAT_PageAdmin = fPageAdmin;  bt2->BAT_Compare = fCompare;  bt2->BAT_User = user;  /*  Maximum number of elements on one page.   *   Substract number of reserved bytes.   */  bt2->BAT_MaxElement = (BTPAGE_SIZE(bt2) - BTOFF_START(bt2) - reserved) /    BTLEN_FIELD(bt2);#ifndef CONFIG_BTREE_EXTRALEAF  bt2->BAT_MaxElementLeaf = bt2->BAT_MaxElement;#else  bt2->BAT_MaxElementLeaf = (BTPAGE_SIZE(bt2) - BTOFF_START(bt2) - reserved) /    BTLEN_FIELDL(bt2);#endif  /*  If to less elements, user should better use bigger pages  */  if(bt2->BAT_MaxElement < 2) {    JSErrNo = _ERR_BAYTREE + 0;    goto error;  }  bt2->BAT_Reserved = reserved;  /*  Allocate new root page if required and set up empty root page.   *   Must set BAT_Root before calling fPageAdmin so that routine   *   might recognize that this is the very first call.   */  if((bt2->BAT_Root = root) == -1) {    char *rPage;    if((root = (*fPageAdmin)(bt2,-1)) < 0) goto error;    if((rPage = bayGetPage(bt2,root,BFILEMODE_DIRTY)) == NULL)      goto error;    /*  Root page is empty and is a leaf page  */    BTPAGE_LENGTH(bt2,rPage) = 0;    BTPAGE_SUBPAGE0(bt2,rPage) = -1L;    bt2->BAT_Root = root;  }  return(bt2);error:  if(bt == NULL) free(bt2);  return(NULL);}/*JS**********************************************************************   Destroys a Bayer tree by freeing all pages. If flag is non-zero, the*    root page is also freed, otherwise it is cleared.*************************************************************************/int bayTreeDestroy(BayerTree *bt,int flag)/************************************************************************/{  BayTreePos *stack;  int depth,mStack;  /*  Initialize stack  */  mStack = 10;  if((stack = (BayTreePos *)malloc(mStack * sizeof(*stack))) == NULL)    goto error;  stack[0].BTP_PageNr = bayTreeRootPage(bt);  stack[0].BTP_Position = -1;  for(depth = 0 ; 0 <= depth ; ) {    char *p;    long page;    page = stack[depth].BTP_PageNr;    if((p = bayGetPage(bt,page,0)) == NULL) goto error;    /*  Last position?  */    if(#ifdef CONFIG_BTREE_EXTRALEAF       !BTPAGE_ISLEAF(bt,p) &&#endif       stack[depth].BTP_Position < BTPAGE_LENGTH(bt,p))      /*  Load subpage  */      memcpyl(&page,p + (BTOFF_START(bt) + BTOFF_SUBPAGE(bt)) +	      stack[depth].BTP_Position * BTLEN_FIELD(bt),sizeof(page));    else      page = -1;    /*  If we are at the end of the page or on a leaf page, we     *   immediately free it and walk one level up.     */    if(page == -1) {      /*  Before moving one level up, free the page  */      if(flag == 0 && depth == 0) {	/*  If flag is 0, do not free root page, clear it instead  */	BTPAGE_LENGTH(bt,p) = 0;	BTPAGE_SUBPAGE0(bt,p) = -1L;      } else if((*(bt->BAT_PageAdmin))(bt,stack[depth].BTP_PageNr) < 0)	goto error;      depth--;      continue;    }    stack[depth].BTP_Position++;    depth++;    if(depth >= mStack) {      mStack += 10;      if((stack = (BayTreePos *)realloc(stack,mStack * sizeof(*stack))) ==	 NULL) goto error;    }    stack[depth].BTP_PageNr   = page;    stack[depth].BTP_Position = -1;  }  if(flag)    /*  Tree no longer has a root page  */    bt->BAT_Root = -1;  free(stack);  return(0);error:  return(-1);}/*JS**********************************************************************   Change the location of the given page by moving its contents to the*    new one. If newPage == -1, the new one is allocated. The tree is*    changed appropriately. The old page is *not* freed.*************************************************************************/int bayTreeChPage(BayerTree *bt,long page,long nPage)/************************************************************************/{  char *p1,*p2;  BTreePage newPage;  /*  Get new page and lock it  */  if(((newPage = nPage) == -1 &&      (newPage = (*(bt->BAT_PageAdmin))(bt,-1)) < 0) ||     (p1 = bayGetPage(bt,newPage,BFILEMODE_DIRTY | BFILEMODE_PROT)) == NULL)    goto error2;  /*  Get old one and copy it  */  if((p2 = bayGetPage(bt,page,0)) == NULL) goto error2;  memcpy(p1,p2,BTPAGE_SIZE(bt) - bt->BAT_Reserved);  if(BTPAGE_LENGTH(bt,p1) == 0) {#ifdef DEBUG    /*  Empty page encountered -- must be root page  */    if(page != bt->BAT_Root) {      JSErrNo = _ERR_BAYTREE + 3;      goto error;    }#endif    bt->BAT_Root = newPage;  } else {    BayTreePos *stack;    BTreeSetNr setNr;    int depth;    stack = NULL;    /*  Load first element from page and search for it to build up the stack  */    memcpyl(&setNr,p1 + BTOFF_START(bt) + BTOFF_SETNR(bt),sizeof(setNr));    if((depth = bayTreeSeek(bt,p1 + BTOFF_START(bt) + BTOFF_CONTENT(bt),setNr,			    &stack,bt->BAT_Compare,bt->BAT_User,BAYSEEK_EXACT))       < 0) goto error;    /*  Now change link to point to new page  */    if(depth == 0) {      /*  Is root page  */      bt->BAT_Root = newPage;    } else {      if((p2 = bayGetPage(bt,stack[depth - 1].BTP_PageNr,BFILEMODE_DIRTY))	 == NULL) {	free(stack);	goto error;      }#ifdef DEBUG      {	long page2;	memcpyl(&page2,p2 + (BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt)) +		stack[depth - 1].BTP_Position * BTLEN_FIELD(bt),sizeof(page2));	if(page2 != page) {	  fprintf(stderr,"Internal Error in bayTreeChPage (%ld != %ld)!!\n",		  page2,page);	}      }#endif      memcpyl(p2 + (BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt)) +	      stack[depth - 1].BTP_Position * BTLEN_FIELD(bt),&newPage,	      sizeof(newPage));    }    free(stack);  }  /*  Finally unlock original page  */  if(baySetPage(bt,newPage,BFILEMODE_UNPROT)) goto error2;  return(0);error:  (void)baySetPage(bt,newPage,BFILEMODE_UNPROT);error2:  if(nPage == -1 && newPage != -1) (void)(*(bt->BAT_PageAdmin))(bt,newPage);  return(-1);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩另类国产亚洲欧美一级| 亚洲视频一区二区在线| 欧美国产综合一区二区| 亚洲国产一区二区a毛片| 国产精品538一区二区在线| 欧美在线免费视屏| 国产欧美一区视频| 免费成人小视频| 欧美性xxxxx极品少妇| 国产精品日韩成人| 裸体健美xxxx欧美裸体表演| 在线精品视频免费观看| 国产精品美女久久久久久久网站| 琪琪一区二区三区| 欧美日韩国产在线播放网站| 亚洲美女屁股眼交| 91尤物视频在线观看| 久久久美女艺术照精彩视频福利播放| 亚洲综合区在线| 日本道免费精品一区二区三区| 久久久不卡网国产精品二区| 蜜桃av一区二区三区电影| 欧美日韩在线直播| 亚洲国产视频a| 色吊一区二区三区| 亚洲欧洲国产专区| 不卡高清视频专区| 国产精品成人免费| 色偷偷成人一区二区三区91| 国产精品久久久久久久久快鸭| 成人一区二区三区视频在线观看| 国产亚洲欧美在线| 成人aa视频在线观看| 国产精品久久久久精k8| 99re这里都是精品| 一区二区三区视频在线观看| 欧美在线视频你懂得| 丝袜亚洲另类欧美综合| 91精品国产福利| 青青草原综合久久大伊人精品优势 | 午夜精品爽啪视频| 欧美日韩精品高清| 轻轻草成人在线| 久久女同精品一区二区| 成人污视频在线观看| 亚洲人成精品久久久久久| 欧美亚洲国产一区二区三区| 午夜电影网亚洲视频| 欧美va亚洲va国产综合| 成人午夜在线视频| 亚洲香蕉伊在人在线观| 欧美一区二区三区免费在线看| 久久99热99| 国产精品久久久久久久久图文区| 91麻豆精品在线观看| 天堂精品中文字幕在线| 久久精品一区八戒影视| 色婷婷综合五月| 美女视频第一区二区三区免费观看网站| 精品国产伦理网| 91在线精品一区二区| 五月天丁香久久| 国产精品区一区二区三区| 欧美三级日韩三级国产三级| 国产一区二区在线电影| 最新中文字幕一区二区三区| 91精品欧美综合在线观看最新| 国内精品自线一区二区三区视频| 最新欧美精品一区二区三区| 555www色欧美视频| 99re这里只有精品首页| 看电影不卡的网站| 樱花草国产18久久久久| 久久综合九色综合97婷婷女人| 91国产免费观看| 国产精品亚洲一区二区三区在线| 一区二区欧美精品| 欧美国产1区2区| 日韩午夜在线影院| 在线亚洲精品福利网址导航| 国产盗摄一区二区三区| 青草国产精品久久久久久| 亚洲色图一区二区三区| 久久日韩精品一区二区五区| 欧美亚洲一区二区在线| 成人av网在线| 韩国三级中文字幕hd久久精品| 亚洲一区二区三区视频在线播放| 中文子幕无线码一区tr| 日韩免费看网站| 欧美视频在线观看一区| 99精品桃花视频在线观看| 国产一区二区三区香蕉| 免费人成网站在线观看欧美高清| 亚洲免费观看高清在线观看| 亚洲国产电影在线观看| 精品少妇一区二区三区免费观看 | 国产激情一区二区三区| 秋霞国产午夜精品免费视频| 亚洲成人在线免费| 亚洲一区二区三区在线播放| 亚洲欧美日韩在线播放| 亚洲欧洲精品一区二区三区| 国产欧美日韩综合精品一区二区| 欧美va亚洲va| 精品国产乱码久久久久久久久 | 日本不卡高清视频| 亚洲不卡av一区二区三区| 一区二区三区精品在线观看| 亚洲欧洲精品一区二区三区不卡 | 91在线观看高清| www.99精品| 91理论电影在线观看| 色综合久久综合| 91视频精品在这里| 在线免费观看一区| 欧美亚洲动漫精品| 欧美吻胸吃奶大尺度电影| 91麻豆精东视频| 在线观看一区二区精品视频| 在线观看不卡视频| 在线观看av不卡| 欧美另类高清zo欧美| 欧美精品日韩一本| 日韩欧美久久久| 久久嫩草精品久久久精品一| 久久女同互慰一区二区三区| 中文在线一区二区 | 日韩国产精品久久久久久亚洲| 亚洲国产精品影院| 日本成人在线一区| 国产麻豆精品一区二区| 成人妖精视频yjsp地址| 日本精品裸体写真集在线观看| 在线视频国产一区| 精品欧美乱码久久久久久| 日本一区二区三区在线观看| 亚洲精品久久久久久国产精华液| 亚洲成人激情综合网| 久久99精品久久久久久国产越南| 国产激情一区二区三区四区| 91小宝寻花一区二区三区| 欧美日韩综合色| 久久综合久色欧美综合狠狠| 国产精品不卡视频| 亚洲午夜久久久久中文字幕久| 日本欧美肥老太交大片| 丁香啪啪综合成人亚洲小说 | 成人免费看视频| 欧美亚洲丝袜传媒另类| 久久―日本道色综合久久| 亚洲日本青草视频在线怡红院 | 日韩一区二区在线看片| 国产欧美一区二区三区沐欲| 一区二区三区av电影| 国产一区二区三区最好精华液| 91色.com| 久久综合色婷婷| 亚洲国产成人高清精品| 成人永久免费视频| 日韩一级黄色片| 一区二区三区在线视频免费观看 | 在线免费精品视频| 久久久精品国产免大香伊| 亚洲午夜在线视频| 懂色av中文字幕一区二区三区| 欧美日韩国产另类一区| 国产欧美一区二区精品性色超碰 | 午夜影院久久久| av高清不卡在线| 久久久国产精品午夜一区ai换脸| 丝袜诱惑亚洲看片 | 成人午夜视频免费看| 欧美大尺度电影在线| 一区二区三区在线观看视频 | 欧美日韩mp4| 亚洲欧洲精品一区二区三区不卡| 精品系列免费在线观看| 欧美一区二区三区在线观看 | 日韩欧美高清一区| 一区二区在线看| www.亚洲人| 久久精子c满五个校花| 久久精品噜噜噜成人88aⅴ| 欧美日韩亚洲不卡| 一区二区三区四区av| 色综合久久中文综合久久牛| 国产精品免费观看视频| 丁香婷婷综合网| 欧美国产乱子伦| 懂色中文一区二区在线播放| 国产午夜精品一区二区三区嫩草| 蜜桃久久av一区| 欧美电影免费观看高清完整版在线观看| 亚洲3atv精品一区二区三区| 欧美视频中文字幕| 午夜精品久久久久久久蜜桃app| 欧美在线|欧美| 无码av中文一区二区三区桃花岛| 欧美日本免费一区二区三区|